Swift '문법'

Extension

김동준. 2024. 8. 8. 22:34

스위프트(Swift)에서 Extension은 기존 클래스, 구조체, 열거형, 프로토콜에 새로운 기능을 추가하는 강력한 방법을 제공합니다. 이는 원래의 소스 코드에 접근할 수 없거나 원본 코드를 수정할 수 없는 경우에도 해당 타입에 새로운 메서드, 서브스크립트, 계산 속성 등을 추가할 수 있게 해줍니다.

Swift에서의 Extension의 주요 기능

새로운 메서드 추가:

Extension을 통해 기존 클래스나 구조체에 새로운 인스턴스 메서드 또는 타입 메서드를 추가할 수 있습니다.

계산 속성 추가:

저장 속성은 추가할 수 없지만, 계산 속성(computed property)을 추가할 수 있습니다.

서브스크립트 추가:

타입에 서브스크립트를 추가할 수 있습니다.

새로운 초기화 메서드 추가:

새로운 이니셜라이저(initializer)를 추가할 수 있습니다. 하지만 클래스의 경우 상속을 위해 필요한 지정 이니셜라이저는 추가할 수 없습니다.

프로토콜 준수:

'Extension' 을 사용하여 특정 타입이 프로토콜을 준수하도록 만들 수 있습니다.

중첩된 타입 추가:

새로운 충첩된 타입(예: 클래스,구조체,열거형)을 추가할 수 있습니다.

Swift Extension 예시

// 기존의 Double 타입에 Extension을 추가하여 새로운 기능을 확장
extension Double {
    // 새로운 계산 속성 추가: km로 변환
    var km: Double { return self * 1_000.0 }
    var m: Double { return self }
    var cm: Double { return self / 100.0 }
    var mm: Double { return self / 1_000.0 }
    
    // 새로운 메서드 추가: 제곱
    func squared() -> Double {
        return self * self
    }
}

// 사용 예시
let distance = 5.0.km // 5000.0
let squareValue = 3.0.squared() // 9.0

 

프로토콜을 준수하는 Extension

'Extension' 을 통해 기존 타입에 새로운 기능을 추가하면서 프로토콜을 준수하도록 만들 수도 있습니다.

protocol Describable {
    func describe() -> String
}

extension Int: Describable {
    func describe() -> String {
        return "This is the number \(self)"
    }
}

// 사용 예시
let number = 42
print(number.describe()) // "This is the number 42"

이처럼 스위프트의 Extension은 기존 코드의 수정 없이도 타입에 새로운 기능을 추가할 수 있는 강력한 도구입니다. Extension을 적절히 활용하면 코드의 가독성, 유지보수성, 재사용성을 크게 향상시킬 수 있습니다.