🔥 Extension으로 계산 속성 추가하기
Extension을 사용하면 기존 타입에 계산 인스턴스 속성과 계산 타입 속성을 추가할 수 있습니다. 아래 예제는 Swift의 내장 타입인 Double
에 다섯 개의 계산 인스턴스 속성을 추가하여 거리 단위를 다루는 기본적인 기능을 제공합니다:
extension Double { var km: Double { return self * 1_000.0 } // 킬로미터로 변환 var m: Double { return self } // 미터로 변환 var cm: Double { return self / 100.0 } // 센티미터로 변환 var mm: Double { return self / 1_000.0 } // 밀리미터로 변환 var ft: Double { return self / 3.28084 } // 피트로 변환 } let oneInch = 25.4.mm print("One inch is \(oneInch) meters") // "One inch is 0.0254 meters" 출력 let threeFeet = 3.ft print("Three feet is \(threeFeet) meters") // "Three feet is 0.914399970739201 meters" 출력
swift
이 계산 속성들은 Double
값이 특정 길이 단위로 고려되어야 함을 나타냅니다. 비록 계산 속성으로 구현되었지만, 이러한 속성의 이름은 점 문법을 사용하여 부동 소수점 리터럴 값에 덧붙일 수 있습니다. 이는 해당 리터럴 값을 사용하여 거리 변환을 수행하는 방법이 됩니다.
예를 들어, 1.0
의 Double
값은 "1미터"를 나타내는 것으로 간주됩니다. 이것이 m
계산 속성이 self
를 반환하는 이유죠. 즉, 표현식 1.m
은 1.0
의 Double
값을 계산하는 것으로 간주됩니다.
다른 단위는 미터로 측정된 값으로 표현하기 위해 일부 변환이 필요합니다. 1킬로미터는 1,000미터와 같기 때문에 km
계산 속성은 미터로 표현된 수로 변환하기 위해 값에 1_000.00
을 곱합니다. 유사하게 1미터에는 3.28084피트가 있으므로 ft
계산 속성은 기본 Double
값을 3.28084
로 나누어 피트에서 미터로 변환합니다.
이 속성들은 읽기 전용 계산 속성이므로 간결성을 위해 get
키워드 없이 표현됩니다. 반환 값의 타입은 Double
이며, Double
이 허용되는 수학적 계산 내에서 사용될 수 있습니다:
let aMarathon = 42.km + 195.m print("A marathon is \(aMarathon) meters long") // "A marathon is 42195.0 meters long" 출력
swift
이렇게 계산 속성을 사용하면 코드의 가독성과 표현력을 크게 높일 수 있습니다. 기존 타입에 의미 있는 속성을 추가함으로써 도메인에 특화된 용어를 사용할 수 있게 되죠. 예를 들어, 거리를 다루는 코드에서 Double
값을 직접 사용하는 대신 km
, m
, ft
등의 계산 속성을 사용하면 코드의 의도가 훨씬 더 명확해집니다.
또한 이런 방식은 타입 안전성도 향상시킵니다. 거리 값을 잘못된 단위로 혼동하는 실수를 컴파일 타임에 방지할 수 있기 때문이죠.