Swift - 확장(Extensions)
Objective-C에는 특정 클래스에 메소드나 읽기전용 프로퍼티를 추가 할 수 있는 카테고리라는 기능이 있다. 개발자가 원하는 기능을 아무 클래스에나 추가 할 수 있는 굉장히 편리하면서도 무서운 기능이다. 스위프트에도 이와 비슷한 기능이 확장(Extensions) 라는 개념으로 제공된다.
익스텐션은 아래와 같은 문법으로 정의 할 수 있다.
좀 더 긴 예제를 보자. MyDatetime 이라는 클래스를 하나 정의한다.
여기서 나는 두 가지 프로퍼티와 하나의 메소드를 이 클래스에 추가해 주고 싶다. 하지만 만약 클래스를 직접 건드리는게 불가능한 상황이라면 익스텐션(Extensions) 기능을 이용하면 된다.
결과는 예측 가능하겠지만 아래왁 같다.
그나저나 관련 글을 더 쓰고 싶었는데 플레이그라운드에서 위 코드만 돌리면 Xcode가 죽어나간다. 아직 베타이기 때문에 죽어나가는 것을 탓할 수는 없겠지만 그래도 안타까운 일이다.
어쨌거나 확장(extension)에 관한 핵심은 모두 설명했으니 여기서 끝을 낸다.
[관련글] Swift - 구조체(Structure) 훑어보기
[관련글] Swift - 클래스(Class) 훑어보기
[관련글] Swift - 프로퍼티(Properties)
[관련글] Swift - 메소드(Method)
[돌아가기] 스위프트(Swift) 가이드
익스텐션은 아래와 같은 문법으로 정의 할 수 있다.
extension SomeClassOrStruct { ... }빈약한 예제 같은데, 이 내부에는 클래스(class)나 구조체(struct)의 프로퍼티나 메소드를 정의하는 것과 동일하게 사용이 가능하기 때문에 생략한 것일 뿐이다. :-)
좀 더 긴 예제를 보자. MyDatetime 이라는 클래스를 하나 정의한다.
class MyDatetime { var year = 1 var month = 1 var day = 1 var hour = 0 var minute = 0 var second = 0 init(year:Int, month:Int, day:Int, hour:Int, minute:Int, second:Int) { self.year = year self.month = month self.day = day self.hour = hour self.minute = minute self.second = second } }그저 초기화(init)할 때 프로퍼티를 초기화 해 주는 단순한 기능의 클래스다.
여기서 나는 두 가지 프로퍼티와 하나의 메소드를 이 클래스에 추가해 주고 싶다. 하지만 만약 클래스를 직접 건드리는게 불가능한 상황이라면 익스텐션(Extensions) 기능을 이용하면 된다.
extension MyDatetime { var dateString: String { return "\(self.year)-\(self.month)-\(self.day)" } var timeString: String { return "\(self.hour):\(self.minute):\(self.second)" } func print() { println("\(self.dateString) \(self.timeString)") } }앞서 이야기한 두 개의 프로퍼티(dateString, timeString)의 getter와 하나의 메소드(print)를 extension을 이용해 정의했다.
결과는 예측 가능하겠지만 아래왁 같다.
var dt = MyDatetime(year: 2002, month: 1, day: 5, hour: 12, minute: 10, second: 59) dt.print() // 콘솔에 2002-1-5 12:10:59 가 찍힌다마치 원래 클래스에 이런게 정의되어 있는 듯 클래스의 기능이 확장되었다.
그나저나 관련 글을 더 쓰고 싶었는데 플레이그라운드에서 위 코드만 돌리면 Xcode가 죽어나간다. 아직 베타이기 때문에 죽어나가는 것을 탓할 수는 없겠지만 그래도 안타까운 일이다.
어쨌거나 확장(extension)에 관한 핵심은 모두 설명했으니 여기서 끝을 낸다.
[관련글] Swift - 구조체(Structure) 훑어보기
[관련글] Swift - 클래스(Class) 훑어보기
[관련글] Swift - 프로퍼티(Properties)
[관련글] Swift - 메소드(Method)
[돌아가기] 스위프트(Swift) 가이드
댓글