익스텐션은 아래와 같은 문법으로 정의 할 수 있다.
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) 가이드
0 comments:
댓글 쓰기