본문 바로가기
Languages/Swift

사당 iOS 스터디 5주차 - 익스텐션

by 탄이. 2018. 8. 17.

CHAPTER 21 익스텐션

__21.1 익스텐션이란

익스텐션은 스위프트의 강력한 기능 중 하나로 구조체, 클래스, 열거형, 프로토콜 타입에 새로운 기능을 추가

기능을 추가하려는 타입을 구현한 소스 코드를 알지 못하거나 볼 수 없다 해도, 타입만 안다면 그 타입의 기능을 확장할 수도 있습니다.

스위프트의 익스텐션은 이름이 없습니다.

스위프트의 익스텐션이 타입에 추가할 수 있는 기능

  • 연산 타입 프로퍼티 / 연산 인스턴스 프로퍼티

  • 타입 메서드 / 인스턴스 메서드

  • 이니셜라이저

  • 서브스크립트

  • 중첩 타입

  • 특정 프로토콜을 준수할 수 있도록 기능 추가

익스텐션은 타입에 새로운 기능을 추가할 수는 있지만, 기존에 존재하는 기능을 재정의할 수는 없습니다.

상속과 익스텐션 비교

  • 상속

    • 확장

      • 수직 확장

    • 사용

      • 클래스 타입에서만 사용

    • 재정의

      • 재정의 가능

  • 익스텐션

    • 확장

      • 수평 확장

    • 사용

      • 클래스, 구조체, 프로토콜, 제너릭 등 모든 타입에서 사용

    • 재정의

      • 재정의 불가

외부에서 가져온 타입에 내가 원하는 기능을 추가하고자 할 때 익스텐션을 사용

모든 타입에 적용

모든 타입에 연산 프로퍼티, 메서드, 이니셜라이저, 서브스크립트, 중첩 데이터 타입 등을 추가할 수 있습니다.

__21.2 익스텐션 문법

extension확장할 타입 이름 {
   // 타입에 추가될 새로운 기능 구현  
}

기존에 존재하는 타입이 추가로 다른 프로토콜을 채택할 수 있도록 확장할 수도 있습니다.

__21.3 익스텐션으로 추가할 수 있는 기능

21.3.1 연산 프로퍼티

  • 익스텐션으로 연산 프로퍼티를 추가할 수는 있지만, 저장 프로퍼티는 추가할 수 없습니다.

  • 타입에 정의되어 있는 기존의 프로퍼티에 프로퍼티 감시자를 추가할 수도 없습니다.

21.3.2 메서드

21.3.3 이니셜라이저

  • 익스텐션으로 클래스 타입에 편의 이니셜라이저는 추가할 수 있지만, 지정 이니셜라이저는 추가할 수 없습니다.

  • 지정 이니셜라이저와 디이니셜라이저는 반드시 클래스 타입의 구현부에 위치해야 합니다. (값 타입은 상관없습니다.)

  • 익스텐션으로 값 타입(열거형, 구조체 등)에 이니셜라이저를 추가했을 때, 해당 값 타입이 다음 조건을 모두 성립한다면 익스텐션으로 사용자정의 이니셜라이저를 추가한 이후에도 해당 타입의 기본 이니셜라이저와 멤버와이즈 이니셜라이저를 호출할 수 있습니다.

    • 모든 저장 프로퍼티에 기본값이 있습니다.

    • 타입에 기본 이니셜라이저와 멤버와이즈 이니셜라이저 외에 추가 사용자정의 이니셜라이저가 없습니다.

  • 익스텐션을 통해 추가하는 이니셜라이저는 이니셜라이저 호출이 종료되는 시점까지 인스턴스가 정상적으로 완벽하게 초기화되는 것을 책임져야 합니다.

21.3.4 서브스크립트

21.3.5 중첩 데이터 타입




참고


야곰의 스위프트 프로그래밍 https://book.naver.com/bookdb/book_detail.nhn?bid=12571019

댓글