객체지향 프로그래밍과 프로토콜지향 프로그래밍 (feat. Swift)

OOP

Object Oriented Programming은 객체중심 프로그래밍으로, 상속을 통해 타입을 확장하는 수직적인 구조를 가지고 있다.

단점

POP

Polymorphosm

Polymorphosm이란, 같은 인터페이스로 여러 타입과 상호작용할 수 있는 개념이다.

<aside> 💡 ex) 콜라(캔)와 오렌지 주스(플라스틱 병) 객체가 있다고 할 때

  1. **Polymorphosm 적용 X : if cola { print(”캔을 손으로 따서 열기) } else if orangeJuice { print(”뚜껑을 오른쪽 방향으로 돌려서 열기”) }

  2. Polymorphosm 적용 O :** 콜라와 오렌지쥬스를 둘 다 음료수 객체로 정의한다. Open 동작 구현을 각각 해준다. if문 대신 Beverage.open()을 실행

</aside>

위 예제에서 알 수 있듯이 Polymorphism은 코드의 재사용성을 올려주며, 보다 생산적이고 클린한 구조의 설계를 돕는 철학이다. 이런 Polymorphism은 OOP의 특징 중 하나로 불리기도 하고, OOP에서는 Subclass, Overloading, Override등을 통해 Polymorphism을 구현한다.

이전의 절차지향 프로그래밍(Procedural Programming)에 비하면 OOP는 뚜렷한 장점이 있다.

OOP에서 Polymorphism을 위해 사용하는 Subclass 방식에는 불편한 점들도 존재한다.

→ Apple에서는 POP 프로그래밍으로 OOP의 불편함을 해결했다.

BUT!