iOS Swift 문법 - Extension
포스트
취소

iOS Swift 문법 - Extension

안녕하세요. narvis2 입니다.
이번시간에는 Swift 문법에 중에서도 Extension에 대하여 알아보는 시간을 가지도록 하겠습니다.

🍀 Extension


  • Kotlin의 확장 함수와 유사
  • 기존 Class, Struct, Enum, Protocol에 새 기능을 추가
  • 하위 Class생성하거나 참조하지 않고 그저 기능을 추가하기 위해 사용
  • ✅ 특징

    • 계산된 instance property 및 계산 유형 속성 추가
    • instance methodtype method 정의
    • initializer 제공
    • Subscript 정의
    • 새 중첩 타입 정의 및 사용
    • 기존 타입을 Protocol에 맞게 설정
  • ✅ Extention 선언 👇

    1
    2
    3
    4
    5
    6
    7
    8
    
    extension 기존 타입이름 {
        //새로운 기능
    }
    
    // 익스텐션은 기존에 존재하는 타입이 추가적으로 다른 프로토콜을 채택할 수 있도록 확장할 수도 있음
    extension 확장 타입이름: 프로토콜1, 프로토콜2, 프로토콜3 {
        //새로운 기능
    }
    

Double Type에 Extension 적용 예제 👇

1
2
3
4
5
6
7
8
9
extension Double {
    var squared: Double {
        return self * self
    }
}

let myValue:Double = 3.5
print(myValue.squared)
print(3.5.squared)

설명 👇

  • Double 타입의 변수나 상수를 생성하면 squared라는 property의 기능을 사용할 수 있게 됨
  • ⚠️ 기존 타입에 새로운 기능을 추가하기 위해 확장을 정의한다면, 새로운 기능은 기존 타입의 instnace에서만 가능

☘️ Protocol을 채택할 때 사용하는 Extenstion

  • ExtenstionProtocol 채택할 때 많이 사용됨

하나의 ViewController 클래스를 만들고 이 클래스는 UIViewController, UIPickerViewDelegate, UIPickerViewDataSource Protocol을 채택 받는 예제 👇

1
2
3
class ViewController: UIViewController, UIPickerViewDelegate, UIPickerViewDataSource {

}

설명 👇

  • 위의 코드와 같이 소스를 작성하게 된다면 Class가 너무 비대해진다는 단점 이 생김.
  • 이때 Extention을 이용하여 Class를 나누게 되면 소스가 깔끔하고 이해하기 쉬워짐

✅ 위 코드 개선 예제 👇

1
2
3
class ViewController: UIViewController{}
extension ViewController: UIPickerViewDelegate{}
extension ViewController: UIPickerViewDataSource{}
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.