POP와 OOP의 차이는?

Zeto·2022년 3월 28일
0

Swift_Study

목록 보기
9/18
post-thumbnail

프로그래밍 패러다임

패러다임이란 한 시대의 사회 전체가 공유하는 이론이나 방법, 문제의식 등의 체계이다. 즉, 프로그래밍 패러다임은 프로그래밍이라는 기술을 이용하는 구성체가 가지고 있는 현 시대의 체계로 볼 수 있는데, 이 말인 즉슨 시대의 흐름에 따라 프로그래밍 패러다임도 변화하고 여러 갈래로 나눠질 수 있다.

프로토콜지향 프로그래밍(POP)과 객체지향 프로그래밍(OOP) 둘 모두 프로그래밍 패러다임으로서 "다형성"을 통해 각 코드들의 재사용성을 비약적으로 높이고, 이를 통해 기존보다 더욱 생산적이고 클린한 구조의 설계를 이끌어내도록 도와준다.

1) 프로토콜지향 프로그래밍(Protocol Oriented Programming)

  • 프로토콜 중심의 프로그래밍으로서 확장을 통한 수평 구조로 타입을 확장하는 방식으로 다형성을 구현.
  • 프로토콜에 정의된 인터페이스를 직접 구현하기 때문에 필요치 않은 프로퍼티나 메서드를 구현하지 않을 수 있다.
  • 각각의 사이가 독립적이고 참조나 값 타입 모두를 지원해주며, 합성을 통해 다수의 프로토콜을 가질 수 있다.

2) 객체지향 프로그래밍(Object Oriented Programming)

  • 객체 중심 프로그래밍으로서 슈퍼클래스의 상속을 통하여 수직 구조로 타입을 확장하는 방식으로 다형성 구현.
  • 객체 지향적으로 아래에서부터 위로 접근하는 상향식 접근 구조이다.
  • 프로그램은 '객체'라는 단위로 분할되며, 'public / private / protected'와 같은 액세스 지정자가 존재한다.
  • 함수나 생성자, 연산자를 오버로드할 수 있으며, 상속이 제공된다.
  • 데이터는 공개나 비공개, 보호와 같은 모드를 통해서 숨길 수 있어 데이터 보안이 좋습니다.

3) OOP보다 POP가 쪼~금 더 편리한 부분

  • 기존 OOP의 슈퍼클래스와 서브클래스의 의존적인 관계와 달리, 프로토콜에 정의된 인터페이스만 구현하면 되고 이를 따르는 사이들끼리도 깊게 연관되어 있지 않아 서로 독립적이며 안전하다.
    (해당 프로토콜을 채택했다는 점만 공통 요소)

  • 상속과 달리 다수의 프로토콜을 따를 수 있고, 물려받는 개념이 아니므로 다중 상속 시의 문제점(죽음의 다이아몬드 이슈)에서 자유롭다.

OOP보다 POP가 유용한 경우는?


OOP에서는 상속 구조로 설계해야 되는데, 이 경우 아마추어 축구선수와 프로 축구선수 간에 축구 관련 요소들이 겹치게 되는데 이를 상속 구조로 해결하기 위해서는 상위 클래스에 우겨넣는 형식이 되기 십상이다.


반면에 POP의 경우에는 각각의 필요한 프로토콜만 채택하여 다양한 구조로 구현이 가능하다. 따라서 이러한 경우가 OOP를 사용하는 것보다 POP를 사용하는 것이 유용하다고 할 수 있다.

profile
중2병도 iOS가 하고싶어

0개의 댓글