Protocol과 Extension (3)
Protocol and Extension(3)
참고자료
이 포스트는 야곰님의 블로그 글 중 Swift - 프로토콜, 익스텐션
을 참고하여 쓴 포스트임을 미리 밝힙니다
아래의 링크를 클릭하시면 야곰님의 블로그
로 이동 할 수 있습니다
아래의 링크를 클릭하시면 Protocol과 Extension (1),(2)을 볼 수 있습니다.
Extension
-
Extension
은 스위프트의 강력한 기능 중 하나 -
Extension
은 구조체(Struct), 클래스(Class), 열거형(Enumeration), 프로토콜(Protocol) 타입에 새로은 기능을 추가 할 수 잇는 기능 -
Extension
은 기능을 추가하려는 타입의 구현된 소그 코드를 알지 못하거나 볼 수 없어도, 타입만 알고 잇으면 그 타입의 기능을 확장 할 수 있다
스위프트의 익스텐션이 타입에 추가할 수 있는 기능
-
연산 타입 프로퍼티 / 연산 인스턴스 프로퍼티
-
타입 메서드 / 인스턴스 메서드
-
이니셜라이저
-
서브스크립트
-
중첩 타입
-
특정 프로토콜을 준수할 수 있도록 기능 추가
익스텐션은 타입에 새로운 기능을 추가할 수는 있지만, 기존에 존재하는 기능을 재정의 할 수는 없다
상속과 익스텐션의 비교
-
클래스의 상속은 클래스 타입에서만 가능, 익스텐션은 구조체, 클래스, 프로토콜 등에 적용이 가능
-
클래스의 상속은 특정 타입을 물려받아 하나의 새로운 타입을 정의하고 추가 기능을 구현하는 수직 확장
-
익스텐션은 기존의 타입에 기능을 추가하는 수평 확장
-
상속을 받으면 기존 기능을 재정의 할 수 있다
-
익스텐션은 기존 기능을 재정의 할 수 없다
상황과 용도에 맞게 상속과 익스텐션을 선택하여 사용하면 된다
-
익스텐션을 사용하는 대신 원래 타입을 정의한 소스에 기능을 추가하는 방법도 있지만, 외부 라이브러리나 프레임워크를 가져다 썻다면 원본 소스를 수정하지 못한다
-
외부에서 가져온 타입에 내가 원하는 기능을 추가하고자 할 때 익스텐션을 사용한다
-
따로 상속을 받지 않아도 되며, 구조체와 열거형에도 기능을 추가할 수 있으므로 익스텐션은 매우 편리한 기능
-
익스텐션은 모든 타입에 적용할 수 있다(구조체, 열거형, 클래스, 프로토콜, 제네릭 타입 등)
-
익스텐션을 통해 모든 타입에 연산 프로퍼티, 메서드, 이니셜라이저, 서브스크립트, 중첩 데이터 타입 등을 추가할 수 있다