Protocol and Extension(3)


참고자료

이 포스트는 야곰님의 블로그 글 중 Swift - 프로토콜, 익스텐션 을 참고하여 쓴 포스트임을 미리 밝힙니다

아래의 링크를 클릭하시면 야곰님의 블로그 로 이동 할 수 있습니다

야곰님의 블로그


아래의 링크를 클릭하시면 Protocol과 Extension (1),(2)을 볼 수 있습니다.

Protocol과 Extension (1)

Protocol과 Extension (2)


Extension

  • Extension은 스위프트의 강력한 기능 중 하나

  • Extension은 구조체(Struct), 클래스(Class), 열거형(Enumeration), 프로토콜(Protocol) 타입에 새로은 기능을 추가 할 수 잇는 기능

  • Extension은 기능을 추가하려는 타입의 구현된 소그 코드를 알지 못하거나 볼 수 없어도, 타입만 알고 잇으면 그 타입의 기능을 확장 할 수 있다

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

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

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

  • 이니셜라이저

  • 서브스크립트

  • 중첩 타입

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

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

상속과 익스텐션의 비교

  • 클래스의 상속은 클래스 타입에서만 가능, 익스텐션은 구조체, 클래스, 프로토콜 등에 적용이 가능

  • 클래스의 상속은 특정 타입을 물려받아 하나의 새로운 타입을 정의하고 추가 기능을 구현하는 수직 확장

  • 익스텐션은 기존의 타입에 기능을 추가하는 수평 확장

  • 상속을 받으면 기존 기능을 재정의 할 수 있다

  • 익스텐션은 기존 기능을 재정의 할 수 없다

상황과 용도에 맞게 상속과 익스텐션을 선택하여 사용하면 된다

  • 익스텐션을 사용하는 대신 원래 타입을 정의한 소스에 기능을 추가하는 방법도 있지만, 외부 라이브러리나 프레임워크를 가져다 썻다면 원본 소스를 수정하지 못한다

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

  • 따로 상속을 받지 않아도 되며, 구조체와 열거형에도 기능을 추가할 수 있으므로 익스텐션은 매우 편리한 기능

  • 익스텐션은 모든 타입에 적용할 수 있다(구조체, 열거형, 클래스, 프로토콜, 제네릭 타입 등)

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