Swift 입문 | 프로토콜 및 확장 | 확장(Extension)


프로토콜은 클래스 메소드의 구현을 의무화하는 것이었지만, 확장 (Extension)는 클래스에 직접 메소드를 덧붙이는 기능이다. 이는 사용법도 매우 간단하고, 아래와 같이 작성한다.

extention 클래스 이름 {
    ...... 추가 내용 ......
}

“클래스명"에는 기능을 추가하는 클래스명을 지정한다. 정말 간단하다.

추가할 수 있는 것은 메소드뿐만 아니라, 속성도 가능하다. 단, 속성의 경우 “Computed 속성"만 추가할 수 있다. 메소드처럼 get/set 처리를 준비하는 유형(타입)의 속성이다.

이 확장은 자작 클래스뿐만 아니라 Swift 시스템 라이브러리로 제공되는 클래스와 iOS 프레임워크의 클래스 등도 확장할 수 있다.

예를 들어, Int 클래스를 확장하여 1부터 주어진 숫자의 합계를 얻는 메소드 getTotal을 추가해 보도록 하자.

extension Int {
    func getTotal()->Int {
        var total:Int = 0
        for i in 1...self {
            total += i
        }
        return total
    }
}

var num = 1234
print(num.getTotal())

여기에서는 extension Int와 같이 하여 Int 클래스를 확장하고 있다. 이렇게 함으로써, Int 형의 값 모두에 getTotal 메소드가 추가 되었다. var num = 1234와 같이 일반적으로 작성된 Int 변수도 getTotal를 사용할 수 있게 된 것이다. 예를 들어, “100까지의 합을 알고 싶다"고 한다면 단지 “100.getTotal()“실행하면 된다.

Int와 String 같이, Swift의 가장 기본적인 것에 대해서도 이렇게 확장에서 쉽게 기능을 추가 할 수 있다.