🔥 Extension으로 중첩 타입 추가하기
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인지, 양수인지를 나타냅니다.
또한 이 예제는 Int
에 kind
라는 새로운 계산 인스턴스 속성을 추가합니다. 이 속성은 해당 정수에 적합한 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
내부에 중첩됨으로써 그 관계가 명확해집니다.
또한 계산 속성 kind
는 Int
값의 종류를 판단하는 편리한 방법을 제공합니다. 이는 코드의 가독성과 표현력을 향상시키죠.
우리는 이 Extension의 유용성을 다음과 같이 나타낼 수 있습니다:
이 다이어그램은 Int
타입이 Kind
열거형과 kind
계산 속성을 통해 확장되는 것을 보여줍니다. kind
속성은 Kind
열거형을 활용하여 Int
값을 분류하죠.
이처럼 Extension과 중첩 타입을 함께 사용하면 타입을 더욱 풍부하고 표현력 있게 만들 수 있습니다.