본문 바로가기

면접질문정리

[Architecture] Protocol Oriented Programming과 Object Oriented Programming의 차이점을 설명하시오.

Protocol Oriented Programming과 Object Oriented Programming의 차이점을 설명하시오.

 

🔑 핵심키워드: Object, Protocol, 다형성(Polymorphosm), 상속, 채택, 참조타입, 값타입

📋 스크립트:
1️⃣ OOP(Object Oriented Programming)은 객체지향 프로그래밍입니다.

  • OOP은 다형성을 위해 상속을 통한 overloading, overiding 사용합니다.
  • OOP는 상속을 통해 수직적인 확장할 수 있고,
  • subclass는 superclass를 그대로 상속받아 필요없는 프로퍼티와 메소드를 모두 물려받는다는 단점이 있습니다.
  • 또한 상속을 활용하기 위해선 참조타입인 class를 사용해야만 하고, 다중 상속이 불가능합니다.
  • 이러한 단점을 보안하기 위해 나온 패러다임이 POP입니다.

2️⃣ POP(Protocol Oriented Programming)은 프로토콜 지향 프로그래밍입니다.

  • POP은 다형성을 위해 protocol을 사용합니다.
  • POP는 protocol extension을 통해 수평적인 확장을 할 수 있고,
  • 상속과 달리 다중 채택이 가능합니다.
  • 또한, OOP와 달리 참조타입과 값타입을 모두 지원합니다.

꼬꼬무

OOP가 좋은가 POP가 좋은가

💡 꼬리 질문으로 함정 질문이 될 수 있다고 생각함.
100점 짜리 답변은 아니지만 이런 식으로 넘어가면 좋아보임.

📋 스크립트:
2015년 WWDC Protocol-Oriented Programming in Swift을 보면 Apple은 POP의 강점을 설명하며, Swift 언어는 내부적으로 POP 구조를 따르도록 설계되어있다고 말합니다.
OOP는 데이터를 숨길 수 있는 반면 POP에는 그런 기능이 없어 OOP가 상대적으로 안전합니다.
또한, OOP에서는 코드재사용이 가능하지만 POP는 불가능합니다.
반대로 POP는 OOP와 달리 객체보다 구조지향적입니다.
이처럼 각각의 적용 가능성과 시나리오에 따라 현제 프로젝트에 어느 것을 적용하는게 적합한지 구별하고 사용하는 것이 중요하다 판단합니다.

https://www.upgrad.com/blog/oop-vs-pop/

# Overloading, Overriding은 무엇인가

Overloading

  • 같은 메소드 이름이지만 매개 변수의 변화만으로 새로운 메소드를 만들어 적재할 수 있도록 지원하는 문법입니다.
  • 오버로딩된 메소드나 프로퍼티는 해당 클래스를 상속받는 모든 자식 클래스에 적용됩니다.

Overriding

  • 자식 클래스에서 재정의 된 메소드나 프로퍼티는 부모 클래스로부터 물려받은 내용을 덮어쓰게되는 과정, 즉, 재정의 되는 과정을 말합니다.
  • 오버라이딩한 내용은 자기 자신 또는 자신을 서브클래싱한 하위 클래스에만 적용됩니다.

https://coding-sojin2.tistory.com/87

# OOP에대한 비판도 있는데 이를 대체할 수 있는 방법이 있나요 ?

🔑 핵심키워드: 함수형프로그래밍, 명령형 프로그래밍, 선언적 프로그래밍, 논리 프로그래밍

📋 스크립트:

  • OOP가 소프트웨어 개발의 데이터 구성 요소를 지나치게 강조하고 계산이나 알고리즘에 충분히 집중하지 않는다는 비판이있습니다.
  • 또한 OOP코드는 작성하기가 더 복잡하고 컴파일하는데 더 오래걸릴 수 있습니다. 이에 대한 대체방법으로는 크게 5가지가 존재하는 것 같습니다.

함수형프로그래밍
명령형 프로그래밍
선언적프로그래밍
논리 프로그래밍

대부분의 고급프로그래밍 언어를 사용할 경우 다양한 프로그래밍 방법에 사용할 수 있기에 개발자가 모델을 결합할 수 도 있습니다.

https://www.techtarget.com/searchapparchitecture/definition/object-oriented-programming-OOP#:~:text=통과할 수 있습니다.-,OOP에 대한 비판,-객체 지향 프로그래밍

https://wlaxhrl.tistory.com/77