프로토콜 지향 프로그래밍

Protocol Oriented Language


참고자료

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

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

야곰님의 블로그


프로토콜 지향 프로그래밍 (Protocol - Oriented - Language)

  • 스위프트의 표준 라이브러리에서 타입과 관련된 것을 살펴보면 대부분이 구조체로 구현되어 있다
    • 스위프트는 클래스로 구현된 타입은 별로없고, 대부분 구조체로 기본 타입이 구현되어 있다

상속 되지 않는 구조체로 다양한 공통 기능을 가질 수 있는 이유

해답은 바로 프로토콜과 익스텐션

  • 프로토콜 = 특정 역활을 수행하기 위한 메서드, 프로퍼티, 기타 요구사항 등의 청사진

  • 프로토콜을 채택(Adopted) 한 타입은 프로토콜이 요구하는 기능을 구현하여 프로토콜을 준수(Conform) 해야 한다.

  • 익스텐션 = 기존의 타입의 기능을 확장

  • 익스텐션은 기존 타입의 기능을 확장하며, 프로토콜은 프로토콜을 채택한 타입이 원하는 기능을 강제로 구현해야 한다

그런데 특정 프로토콜을 정의하고 여러 타입에서 이 프로토콜을 준수하게 만들어 

타입마다 똑같은 메서드, 똑같은 프로퍼티, 똑같은 서브스크립트 등을 구현해야 한다면??

상당히 많은 코드를 중복 사용해야 하며 유지보수도 굉장히 어려워 질 것이다.

이때 필요한 것이 바로 익스텐션과 프로토콜의 결합

프로토콜을 채택한 타입의 정의부에 프로토콜의 요구사항을 구현하지 않더라도 프로토콜의 익스텐션에 미리 프로토콜의 요구사항을 구현해 둘 수 있다 이를 프로토콜 초기구현이라고 한다