프로토콜 지향 프로그래밍이란 (1)
프로토콜 지향 프로그래밍
Protocol Oriented Language
참고자료
이 포스트는 야곰님의 블로그 글 중 Swift - 프로토콜 지향 프로그래밍
을 참고하여 쓴 포스트임을 미리 밝힙니다
아래의 링크를 클릭하시면 야곰님의 블로그
로 이동 할 수 있습니다
프로토콜 지향 프로그래밍 (Protocol - Oriented - Language)
- 스위프트의 표준 라이브러리에서 타입과 관련된 것을 살펴보면 대부분이 구조체로 구현되어 있다
- 스위프트는 클래스로 구현된 타입은 별로없고, 대부분 구조체로 기본 타입이 구현되어 있다
상속 되지 않는 구조체로 다양한 공통 기능을 가질 수 있는 이유
해답은 바로 프로토콜과 익스텐션
-
프로토콜 =
특정 역활을 수행하기 위한 메서드, 프로퍼티, 기타 요구사항 등의 청사진
-
프로토콜을 채택(Adopted) 한 타입은
프로토콜이 요구하는 기능을 구현하여
프로토콜을 준수(Conform) 해야 한다. -
익스텐션 =
기존의 타입의 기능을 확장
-
익스텐션은 기존 타입의 기능을 확장하며, 프로토콜은 프로토콜을 채택한 타입이 원하는 기능을 강제로 구현해야 한다
그런데 특정 프로토콜을 정의하고 여러 타입에서 이 프로토콜을 준수하게 만들어
타입마다 똑같은 메서드, 똑같은 프로퍼티, 똑같은 서브스크립트 등을 구현해야 한다면??
상당히 많은 코드를 중복 사용해야 하며 유지보수도 굉장히 어려워 질 것이다.
이때 필요한 것이 바로 익스텐션과 프로토콜의 결합
프로토콜을 채택한 타입의 정의부에 프로토콜의 요구사항을 구현하지 않더라도 프로토콜의 익스텐션에 미리 프로토콜의 요구사항을 구현해 둘 수 있다 이를 프로토콜 초기구현이라고 한다