Swift 입문 | 프로토콜 및 확장 | 프로토콜과 확장을 결합


이 프로토콜과 확장을 결합하면, 재미있는 것을 할 수 있다.

확장은 메소드와 속성뿐만 아니라 프로토콜을 추가하는 것도 가능하다. 이는 이미 있는 여러 클래스에 공통된 기능을 구현하여 함께 처리할 수도 있다.

이것도 실제 사용 예제를 살펴 보자.

protocol MyDataPrintable {
    func printData ()
}

extension String: MyDataPrintable {
    func printData() {
        print("문자열:\(self).")
    }
}

extension Int: MyDataPrintable {
    func printData() {
        print("숫자:\(self).")
    }
}

var str = "Hello"
var num = 12345
str.printData()
num.printData()

위에 예제는 MyDataPrintable라는 프로토콜을 작성하고, 거기에 printData 메소드가 작성되어 있다. 그리고 확장을 사용하여 이와 같이 String과 Int에 MyDataPrintable 프로토콜을 추가한다.

extension String: MyDataPrintable {...}
extension Int: MyDataPrintable {...}

이렇게 하면 모든 String 값이나 Int 값이 MyDataPrintable로 취급할 수 있게 된다. 즉, String과 Int를 같은 프로토콜 클래스로 동일하게 모와서 처리할 수 있게 되는 것이다.

이와 같이, 확장 및 프로토콜은 단순히 자신의 클래스를 강화할 뿐만 아니라 Swift에 포함되어 있는 모든 클래스에 자신의 확장을 실행 시킬 수 있고, 나름대로 커스텀마이징 하는 것을 허용한다. 꽤 강력한 기능이므로 꼭 기억해 두도록 하자.