본문 바로가기

Swift

스위프트에서 Extension은 어떻게 사용되나요?

Extension은 기존 클래스, 구조체, 열거형, 프로토콜에 새로운 기능을 추가할 수 있는 Swift의 강력한 기능입니다.
기존 소스 코드를 수정하지 않고도 타입에 기능을 확장할 수 있어, 재사용성과 가독성을 높이는 데 유용합니다.

 

1. Extension의 주요 특징

  1. 기능 추가: 메서드, 계산 속성, 서브스크립트, 초기화 메서드 등 추가 가능.
  2. 기존 소스 코드 수정 불필요: 외부 라이브러리나 기본 타입도 확장 가능.
  3. 프로토콜 준수: 기존 타입에 프로토콜을 채택하고 구현 추가 가능.
  4. 저장 속성 불가: 계산 속성만 추가 가능.
  5. 오버라이드 불가: 기존 메서드의 동작은 변경할 수 없음.

 

2. Extension 활용 예시

1) 기존 타입 확장

extension String {
    func reversedString() -> String {
        return String(self.reversed())
    }
}

// 사용
let original = "hello"
print(original.reversedString())  // "olleh"

 

2) 계산 속성 추가

extension Int {
    var squared: Int {
        return self * self
    }
}

// 사용
let number = 5
print(number.squared)  // 25

 

 

3) 프로토콜 채택

protocol Describable {
    func describe() -> String
}

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

// 사용
print(42.describe())  // "This is an integer: 42"

 

 

4) UIButton에 편리한 메서드 추가

extension UIButton {
    func setRoundedCorners(radius: CGFloat) {
        self.layer.cornerRadius = radius
        self.clipsToBounds = true
    }
}

// 사용
let button = UIButton()
button.setRoundedCorners(radius: 10)

 

 

3. Extension의 장점과 제한

장점

  • 재사용성 증가: 기존 타입에 새 기능을 추가하여 반복 작업 감소.
  • 가독성 향상: 관련 있는 기능을 타입별로 확장해 코드 관리 용이.
  • 외부 코드 수정 불필요: 외부 라이브러리나 기본 타입도 확장 가능.

제한

  • 저장 속성 추가 불가: 계산 속성만 가능.
  • 오버라이드 불가: 기존 메서드 동작을 변경할 수 없음.
  • 코드 분산: Extension이 많아지면 관리가 어려워질 수 있음.