익스텐션

  • 익스텐션이란? 이미 존재하는 클래스, 구조체, 열거형 등의 객체를 직접 수정하지 않고 새로운 기능을 추가할 수 있게 한다.
  • 익스텐션으로 프로퍼티를 추가할 때에는 연산 프로퍼티로만 가능하다.
  • 익스텐션으로 메소드를 추가할 때 기존에 정의되어있던 메소드를 재정의 하는 것은 불가능하다.
  • 익스텐션을 남발하게 되면 객체의 의미가 파편화되기 때문에 꼭 필요한 위치에서만 사용하며 분산하여 작성하지 않는 것이 좋다.
class A {
}

extension A { //클래스 A를 확장
    var name: String {
        return "이름"
    }
}

extension A { //클래스 A를 확장
    func sleep() {
        print("zZZ")
    }
}

var a: A = A()
a.name //이름
a.sleep() //zZZ
  • 이처럼 익스텐션을 이용하면 기존의 객체의 기능을 확장할 수 있다.
  • 구조체나 열거형에서 메소드가 자기 자신의 인스턴스를 수정하거나 프로퍼티를 변경하려 할 때에는 mutating 키워드를 써야한다.
extension Int {
    mutating func square() {
        self = self * self
    }
}

var squareTest: Int = 4
squareTest.square() //16
  • 이처럼 익스텐션을 통해 직접 수정이 불가능한 객체에도 기능을 추가할 수 있다.