[Swift 정면돌파] 18. POP 패러다임의 이점

H43RO·2021년 8월 10일
0

Swift 정면돌파

목록 보기
18/19
post-thumbnail

오늘은 OOP 패러다임에 빗대어 본 POP 패러다임의 특징, 장점들에 대하여 간단히 알아보았다.

다형성 (Polymorphism)

같은 인터페이스로 여러 타입과 상호작용할 수 있는 개념
→ 보다 생산적이고 클린한 구조의 설계를 돕는 철학
→ OOP 에서 Subclassing, Overloading, Overridnig 등을 통해 다형성 구현 가능

그런데, OOP 에서 다형성을 위해 사용하는 Subclassing 방식에는 여럿 불편점 존재
→ 애플에서 이러한 불편함을 해결하기 위해 Swift 를 통해 POP 내세움 (세계 최초)

그렇다고 POP 가 OOP 보다 월등하다는 이야기는 아니고, 특정 케이스마다 어떤 방식을 적용하는 것이 좋을까 라고 생각을 해보고 적절한 패러다임을 접목하는 것이 좋다는 이야기다.

OOP 의 Subclassing 이 가지는 불편한 점들

1. 슈퍼클래스에 너무 종속적이다

서브 클래스를 생성하기 위해서는 슈퍼 클래스의 코드를 제대로 파악하고 있어야 하며,
생성자와 퍼블릭 함수가 어떻게 돌아가는 지 알아야 실수를 방지할 수 있다.

슈퍼 클래스를 그대로 상속받는 구조이기 때문에, 서브 클래스는 자신에게 필요없는 변수가 함수까지 무조건 물려받을 수 밖에 없다. 괴로운 것은 슈퍼 클래스 입장도 마찬가지이다. 몇몇 서브 클래스에만 필요한 코드들이 슈퍼 클래스에 무한 추가되어, 점점 몸집이 크고 코드는 더러운 클래스가 될 가능성이 있다.

2. Value Type 을 사용할 수 없다

Swift 에서 Class 는 Reference Type 이다. 상속 구조를 사용하기 위해서는
Value Type 으로 정의해도 무방한 모델들을 굳이 참조 타입으로 정의해야 하는 불편함이 있다.

Swift 에서는 참조 타입이 반드시 필요한 상황이 아니라면,
가급적 값 타입을 사용하라고 공식적으로 가이드
하고 있다.

POP 의 편리한 점들

1. 위에서 언급한 OOP 의 불편한 점들을 해결해준다

구현체 입장에서 알아야 할 것은 프로토콜이 요구하는 변수, 함수 뿐이다.
슈퍼 클래스와 서브 클래스의 의존적인 관계와 다르게, 프로토콜 기반의 구조에서는
프로토콜에 정의된 인터페이스가 무엇인지 슥 보고 그것만 구현하면 된다.

따라서 상속의 경우 수직적인 성질이 강하고, 프로토콜 준수의 경우 수평적인 성질이 강하다.

슈퍼 클래스를 상속받는 서브 클래스들과 달리, 같은 프로토콜을 따르는 사이에도
끈끈하게 엮여있는 부분이 전혀 없으므로 각각이 독립적
이며, 그래서 안전하다.

프로토콜은 참조 타입, 값 타입 모두 지원하여 입맛대로 사용할 수 있다.

2. 프로토콜 다중 준수가 가능하다

상속 구조에서는 오직 하나의 슈퍼 클래스만 가질 수 있다. 그러나 프로토콜의 경우 다수의 프로토콜을 따르는 것이 가능하다. 또한 물려받아 재사용하는 개념이 아니기 때문에, 다중 상속의 문제점으로 언급되는 죽음의 다이아몬트 이슈에서도 탈피하여 자유롭게 사용할 수 있다.

profile
어려울수록 기본에 미치고 열광하라

0개의 댓글