본문 바로가기
Swift

타입 메서드 (Type method)

by JDeoks 2023. 5. 1.

타입 메서드는 클래스, 구조체, 열거형에 속하는 함수로, 해당 타입 자체에 연관된 동작을 수행한다. 인스턴스 메서드와는 달리 타입메서드는 특정 인스턴스에 종속되지 않으며, 인스턴스를 생성하지 않고도 호출할 수 있다.

 

타입메서드는 주로 다음과 같은 상황에서 사용된다.

  1. 인스턴스를 생성하지 않고도 수행할 수 있는 작업을 처리할 때
  2. 클래스에 대한 유틸리티 기능을 제공할 때
  3. 인스턴스 생성을 대체하거나 관리하는 팩토리 메서드를 구현할 때

1. 인스턴스를 생성하지 않고도 수행할 수 있는 작업을 처리할 때:

타입 메서드는 타입에 속하기 때문에 인스턴스 생성 없이 호출할 수 있다. 따라서 인스턴스 변수나 메서드에 의존하지 않는 작업을 수행할 때 유용하다.

struct EmailValidator {
    static func isValid(email: String) -> Bool {
        // 이메일 유효성 검사 로직 구현
    }
}

let validEmail = "john@example.com"
let isValid = EmailValidator.isValid(email: validEmail)

 

2. 타입에 대한 유틸리티 기능을 제공할 때:

타입 메서드는 특정 타입와 관련된 유틸리티 기능을 제공하는 데 사용된다. 

struct MathUtility {
    static func squareRoot(of value: Double) -> Double {
        // 제곱근 계산 로직 구현
    }
}

let squareRoot = MathUtility.squareRoot(of: 9) // 결과는 3.0

3. 팩토리 메서드 구현: 

객체 생성을 캡슐화하는 팩토리 메서드를 구현할 때 타입 메서드를 사용할 수 있다. 이를 통해 객체 생성 로직을 한 곳에서 관리하고, 다양한 타입의 객체를 생성할 수 있다.

class Animal {
    // ...
}

class Dog: Animal {
    // ...
}

class Cat: Animal {
    // ...
}

class AnimalFactory {
    static func createAnimal(type: String) -> Animal? {
        switch type {
        case "Dog":
            return Dog()
        case "Cat":
            return Cat()
        default:
            return nil
        }
    }
}

let myDog = AnimalFactory.createAnimal(type: "Dog")
let myCat = AnimalFactory.createAnimal(type: "Cat")