🔥 Extension으로 중첩 타입 추가하기

294자
4분

Extension을 사용하면 기존 클래스, 구조체, 열거형에 새로운 중첩 타입을 추가할 수 있습니다:

extension Int {
    enum Kind {
        case negative, zero, positive
    }
    var kind: Kind {
        switch self {
        case 0:
            return .zero
        case let x where x > 0:
            return .positive
        default:
            return .negative
        }
    }
}
swift

이 예제는 Int에 새로운 중첩 열거형을 추가합니다. Kind라고 불리는 이 열거형은 특정 정수가 나타내는 숫자의 종류를 표현하죠. 구체적으로는 그 숫자가 음수인지, 0인지, 양수인지를 나타냅니다.

또한 이 예제는 Intkind라는 새로운 계산 인스턴스 속성을 추가합니다. 이 속성은 해당 정수에 적합한 Kind 열거형 case를 반환하죠.

이제 중첩 열거형을 어떤 Int 값에서든 사용할 수 있습니다:

func printIntegerKinds(_ numbers: [Int]) {
    for number in numbers {
        switch number.kind {
        case .negative:
            print("- ", terminator: "")
        case .zero:
            print("0 ", terminator: "")
        case .positive:
            print("+ ", terminator: "")
        }
    }
    print("")
}
printIntegerKinds([3, 19, -27, 0, -6, 0, 7])
// 출력 결과: "+ + - 0 - 0 + "
 
swift

printIntegerKinds(_:) 함수는 Int 값의 배열을 입력받아 그 값들을 차례로 반복합니다. 배열의 각 정수에 대해, 함수는 해당 정수의 kind 계산 속성을 고려하여 적절한 설명을 출력하죠.

이 예제는 Extension을 사용하여 기존 타입에 새로운 기능을 추가하는 또 다른 방법을 보여줍니다. Int 타입 자체를 수정하지 않고도 새로운 중첩 타입과 계산 속성을 추가할 수 있죠.

중첩 타입은 관련된 타입을 논리적으로 그룹화하고 네임스페이스를 관리하는 데 유용합니다. 이 예제에서 Kind 열거형은 Int에 특화되어 있으며, Int 내부에 중첩됨으로써 그 관계가 명확해집니다.

또한 계산 속성 kindInt 값의 종류를 판단하는 편리한 방법을 제공합니다. 이는 코드의 가독성과 표현력을 향상시키죠.

우리는 이 Extension의 유용성을 다음과 같이 나타낼 수 있습니다:

lecture image

이 다이어그램은 Int 타입이 Kind 열거형과 kind 계산 속성을 통해 확장되는 것을 보여줍니다. kind 속성은 Kind 열거형을 활용하여 Int 값을 분류하죠.

이처럼 Extension과 중첩 타입을 함께 사용하면 타입을 더욱 풍부하고 표현력 있게 만들 수 있습니다.