본문 바로가기
⌨️ Language/swift

[Swift] 익스텐션 (Extensions)

by hyebin (Helia) 2023. 2. 6.

익스텐션 (Extensions)

  • 익스텐션을 이용해 클래스, 구조체, 열거형 혹은 프로토콜 타입에 기능을 추가 가능
  •  익스텐션은 타입에 새로운 기능을 추가할 수 있지만, 오버라이드는 할 수 없음
  • 계산된 인스턴스 속성 및 계산 유형 속성 추가
  • 인스턴스 메서드 및 타입 메서드 정의
  • 새 이니셜라이저 제공
  • Subscript 정의
  • 새 중첩 타입 정의 및 사용
  • 기존 타입을 프로토콜에 맞게 설정
extension Int {
     var add: Int { return self + 100 }
     var sub: Int { return self - 10 }
     var mul: Int { return self * 10 }
     var div: Int { return self / 5 }
}

let addition = 3.add
print("Addition is \(addition)") // Addition is 103

let subtraction = 120.sub
print("Subtraction is \(subtraction)") // Subtraction is 110

let multiplication = 39.mul
print("Multiplication is \(multiplication)") // Multiplication is 390

let division = 55.div
print("Division is \(division)") // Division is 11

let mix = 30.add + 34.sub
print("Mixed Type is \(mix)") // Mixed Type is 154

 

프로토콜 익스텐션

  • 이미 존재하는 타입에 새 프로토콜을 따르게 하기 위해서 확장(extension)을 사용 가능
  • 기본 메서드 구현을 위해 프로토콜 익스텐션을 사용할 수 있음
  • 익스텐션을 사용해 클래스를 나누게 되면 가독성이 높아짐
//기존 코드
class ViewController: UIViewController, UIPickerViewDelegate, UIPickerViewDataSource {

}

//익스텐션 사용
class ViewController: UIViewController{}
extension ViewController: UIPickerViewDelegate{}
extension ViewController: UIPickerViewDataSource{}
반응형

'⌨️ Language > swift' 카테고리의 다른 글

[Swift] 고차함수  (0) 2023.02.06
[Swift] 클로저 (Closure)  (0) 2023.02.06
[Swift] 프로토콜 (Protocol)  (0) 2023.02.06
[Swift] assert와 guard  (0) 2023.02.06
[Swift] 타입 캐스팅  (0) 2023.02.06

댓글