익스텐션이란? #3
hyun99999
started this conversation in
Show and tell
Replies: 0 comments
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
-
익스텐션이란?
익스텐션(Extension)은 스위프트의 강력한 기능 중 하나로 구조체, 클래스, 열거형, 프로토콜 타입에 새로운 기능을 추가할 수 있습니다.
익스텐션 VS 상속
상속은 클래스 타입에서만 가능.
익스텐션은 구조체, 클래스, 열거형, 프로토콜 타입에서 가능.
상속은 특정 타입을 물려받아 새로운 타입을 정의하고 추가기능을 구현하는 수직 확장
익스텐션은 기존의 타입에 기능을 추가하는 수평 확장
원래 타입을 정의한 소스코드에 기능을 추가하는 방법도 있겠지만, 외부 라이브러리나 프레임워크를 가져다 사용했다면 원본 코드를 수정하지 못한다. 이때 사용 가능.
익스텐션이 타입에 추가할 수 있는 기능은 다음과 같습니다.
연산 프로퍼티
익스텐션으로 연산프로퍼티를 추가할 수 있습니다.
타입에 정의되어 있는 기존의 프로퍼티에 프로퍼티 감시자를 추가할 수도 없습니다.(재정의 불가)
이와 같은 경우 상속을 통해서 프로퍼티 감시자를 추가할 수 있습니다.
메서드
익스텐션을 통해 타입에 메서드를 추가할 수 있습니다.
여러 기능을 여러 익스텐션 블록으로 나눠서 구현해도 전혀 문제가 없습니다.
이니셜라이저
타입의 정의 부분에 이니셜라이저를 추가하지 않더라도 익스텐션을 통해 이니셜라이저를 추가할 수 있습니다.
클래스만 지정/편의 이니셜라이저를 나눈다.(상속과 관련이 있다.)
즉, 클래스의 경우는 익스텐션에서 편의 이니셜라이저만 선언이 가능하다.
서브스크립트
익스텐션을 통해 타입에 서브스크립트를 추가할 수 있습니다.
중첩 타입
익스텐션을 통해 타입에 중첩 데이터 타입(Nested Types)를 추가할 수 있습니다.
익스텐션을 통한 프로토콜의 실제 구현
익스텐션은 프로토콜과 함께 사용하면 강력한 기능을 합니다.
프로토콜을 정의할 때는 프로토콜의 요구사항을 구현할 수 없습니다.
변경해서 구현하고 싶다면 주석처리를 해제해서 사용해주시면 됩니다.
Beta Was this translation helpful? Give feedback.
All reactions