ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Swift] Protocol Oriented Programming
    야매 iOS 2023. 8. 7. 06:53

    OOP

    • 클래스 상속을 사용해 해당 타입이 가진 공통적인 기능들을 모듈화해 구현
    • 다중 스레드 환경에서 사용에 유의해야 한다 (race condition)이 발생할 수 있기 때문에
    • 구조체/열겨헝은 클래스와 달리 상속이 불가하다.

    → 하지만 구조체/열거형과 같은 타입에 대해 공통적인 기능 구현을 위해서 다른 방법을 사용해야 한다.

    Protocol & Extension

    프로토콜 : 특정 역할을 수행하기 위한 메서드, 프로퍼티 등 사항들을 한 데 모아놓은 청사진

    익스텐션 : 기존 타입의 기능을 확장하도록 도와주는 기능

    만일 특정 프로토콜을 정의하고 여러 타입에서 해당 프로토콜을 채택해 각 타입마다 똑같은 내용들을 구현해야 한다면 얼마나 많은 코드들이 중복되는가?

    • 추후 이를 유지보수한다면 정의한 모든 데이터 타입의 코드를 일일이 변경시켜줘야 한다.

    → 프로토콜과 익스텐션을 결합한 프로토콜 초기 구현

    프로토콜 초기 구현

    구현해야 할 내용이 담겨있는 프로토콜과 타입의 기능을 확장시켜주는 익스텐션의 결합으로 만들어진다.

    프로토콜을 채택한 타입의 정의부에서 일일이 모든 프로토콜 내 요구사항을 구현할 필요 없이 익스텐션을 통해 미리 프로토콜의 요구사항을 구현해 놓을 수 있다.

    • 변형하고 싶다면 재정의해서 사용할 수 있다.

    Protocol 적용 방법

    Protocol extension

    Protocol inheritance

    Protocol Composition

    POP 장점

    가볍고 안전하다

    • 상속의 경우, 참조 타입이므로 참조 추적을 위한 비용이 많은 발생하기 때문에 속도 측면에서 다소 느리다.

    값 타입의 상속 효과

    • Value 타입임에도 불구하고 클래스처럼 공통된 기능들을 쉽게 구현할 수 있다.

    수직 구조 확장이 아닌 수평 구조의 기능 확장

    • Class의 경우 자식 클래스는 하나의 부모클래스만 상속할 수 있으며 수직적인 구조를 갖는다.
    • 하지만 프로토콜을 수평구조로 기능을 확장시킬 수 있다.

    제네릭과 연관값

    • Associated Type을 제공해 데이터 타입 관계없이 기능을 제공할 수 있다.

    '야매 iOS' 카테고리의 다른 글

    [iOS] Certificate & Provisioning  (0) 2023.08.07
    [Swift] some & any  (0) 2023.08.07
    [iOS/Swift] @StateObject vs @ObservedObject  (0) 2023.08.07
    [iOS/Swift] Operation  (0) 2023.08.06
    [iOS/Swift] 동시성 문제  (0) 2023.08.06
Designed by Tistory.