내일배움캠프 iOS

iOS) TIL #10 확장 (extension)

yjuni22 2024. 11. 1. 21:04

확장 extension

기존의 class, struct, enum, protocol 타입에 새로운 기능을 추가할 수 있는 키워드입니다.

타입의 원본 코드를 수정하지 않고도 수평적인 기능을 확장 할 수 있어 코드의 유지 보수와 가독성이 향상됩니다.

 

  • extension 키워드를 사용하여 기존 타입을 확장할 수 있습니다.
  • 하나 이상의 프로토콜을 extension으로 추가해 적용할 수 있습니다. 이를 통해 기존 타입을 수정하지 않고 프로토콜 요구사항을 구현할 수 있어 코드 유지보수가 편리해집니다.
  • 하나의 타입에 extension 여러 번 가능합니다.
  • 확장할 수 있는 것들은 아래와 같습니다.
    • 연산 프로퍼티
      • 확장된 곳에서 저장 프로퍼티는 사용할 수 없습니다.
    • 메소드
    • 새로운 초기화 init (클래스의 경우 편의생성자 convenience init만 추가 가능)
    • 중첩된 타입(Nested Type)

공식문서

확장 (Extensions) 은 기존의 클래스, 구조체, 열거형, 또는 프로토콜 타입에 새로운 기능을 추가합니다. 이것은 기존 소스 코드에 접근 권한이 없는 타입을 확장하는 기능이 포함됩니다 (소급 모델링 (retroactive modeling) 이라고 함). 확장은 Objective-C의 카테고리와 유사합니다 (Objective-C 카테고리와 달리 Swift 확장은 이름이 없습니다).

 

Swift에서 확장은 다음을 수행할 수 있습니다:

  •  
  • 계산된 인스턴스 프로퍼티와 계산된 타입 프로퍼티 추가
  • 인스턴스 메서드와 타입 메서드 정의
  • 새로운 초기화 구문 제공
  • 서브 스크립트 정의
  • 새로운 중첩된 타입 정의와 사용
  • 기존 타입이 프로토콜을 준수하도록 함
extension SomeType {
    // new functionality to add to SomeType goes here
}
extension SomeType: SomeProtocol, AnotherProtocol {
    // implementation of protocol requirements goes here
}

 

소급 모델링의 예시

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