Extension은 기존 클래스, 구조체, 열거형, 프로토콜에 새로운 기능을 추가할 수 있는 Swift의 강력한 기능입니다.
기존 소스 코드를 수정하지 않고도 타입에 기능을 확장할 수 있어, 재사용성과 가독성을 높이는 데 유용합니다.
1. Extension의 주요 특징
- 기능 추가: 메서드, 계산 속성, 서브스크립트, 초기화 메서드 등 추가 가능.
- 기존 소스 코드 수정 불필요: 외부 라이브러리나 기본 타입도 확장 가능.
- 프로토콜 준수: 기존 타입에 프로토콜을 채택하고 구현 추가 가능.
- 저장 속성 불가: 계산 속성만 추가 가능.
- 오버라이드 불가: 기존 메서드의 동작은 변경할 수 없음.
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이 많아지면 관리가 어려워질 수 있음.
'Swift' 카테고리의 다른 글
데이터 모델 형식이 따른 장, 단점 (Feed VS [Feed]) (0) | 2024.11.26 |
---|---|
ArraySlice와 Array (0) | 2024.11.25 |
Core Data의 Bool? 이거는 왜 안되나? (0) | 2024.11.19 |
오류 처리 함수 구현 (1) | 2024.11.14 |
함수를 구현하는 순서, 방식 (데이터 더보기) (0) | 2024.11.01 |