Apple-CS-interview / iOS-CS-interview

7 stars 0 forks source link

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

Open Do-hyun-Kim opened 1 year ago

Do-hyun-Kim commented 1 year ago

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

Polymorphism 다형성

Protocol Oriented Programming

Object Oriented Programming

📝 참고 사이트

vichye-1 commented 1 year ago

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

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

POP가 유용한 경우

참고

Hminchae commented 1 year ago

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

개발하려는 것을 기능별로 묶어 모듈화, 하드웨어가 같은 기능을 중복으로 연산하지 않도록 하고, 모듈을 재활용 함으로써 하드웨어의 처리양을 줄임

특성

프로토콜이란 특정 기능 수행에 적합한 메소드, 프로퍼티 등을 정의한 것. 작성된 프로토콜은 class나 struct, enum을 통해 구현됨. 프로토콜을 구현한다는 것은 프로토콜에 선언된 명세에 따라 실질적으로 프로퍼티에 값을 할당하여 선언하거나 메소드의 내용을 작성하는 것을 말함. 즉 POP는 프로토콜의 확장과 프로토콜 상속, 그리고 프로토콜 합성이라는 개념을 사용하여 프로토콜의 정의를 통하여 시스템을 설계함

특성

POP 장점

  1. OOP 단점 위 1,2번의 불편함을 해결함. 구현체 입장에서 알아야할 것은 "프로토콜이 요구하는 변수와 함수" 뿐이다. 슈퍼클래스와 서브클래스의 의존적인 관계와 달리, 프로토콜 기반의 구조에서는 프로토콜에 정의된 인터페이스가 무엇인지 알고, 그것만 구현하면 된다. 같은 프로토콜을 따르는(conforms to) 사이는 각각이 독립적이고 안전함
  2. 다수의 프로토콜을 따르는 것이 가능하다. 상속 구조에서는 오직 하나의 슈퍼클래스만 가질 수 있다. 그러나 프로토콜의 경우엔 다수의 프로토콜을 따를 수 있고 물려받는 구조가 아니기때문에 다중 상속으로 문제되는 죽음의 다이아몬드 이슈에도 자유로움

POP 단점

요약

프로토콜지향 프로그래밍 객체지향 프로그래밍
영문명 Protocol Oriented Programming Object Oriented Programming
장점 Super Class에 독립적이고 기능의 모듈화 가능. 값 타입 사용이 가능함. 불필요한 API를 제외하고 정의한 API만 가져올 수 있음. 상속을 이용한 코드의 재사용성
단점 다중상속 불가능하고 상위클래스의 메모리 구조를 따라갈 수 밖에 없음. 클래스(참조타입)에서만 사용 가능

참조

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

ronick-grammer commented 1 year ago

Protocol Oriented Programming과 Object Oriented Programming

Object Oriented Programming(OOP)

객체지향 프로그래밍이라고 하며, 특정 사물과 관련된 데이터와 그에 따른 행동을 있는 그대로 실체화 시키는 형태의 프로그래밍이다. 객체는 하나 이상의 정보(데이터, 프로퍼티)와 하나 이상의 행동(메서드)으로 구성된다. 상속, 캡슐화, 다형성등의 기능을 구현할 수 있다.

OOP 설계에 있어 중요한 점

객체지향이 제공하는 기능을 어떻게 잘 사용할 것인지에 대한 척도는 응집도와 결합도로 나타낼 수 있다. 높은 응집도와 낮은 결합도가 좋은 객체지향의 설계이며, 이를 위해 위해 SOLID 원칙을 준수하는 것이 중요하다.

Protocol Oriented Programming(POP)

POP는 위에서 언급한 OOP의 추상화, 다형성등의 기능 구현과, 이를 잘 설계하기 위한 SOLID 원칙을 준수하는 등 전반적으로 OOP의 개념을 따르지만, 참조 타입인 class보다 값 타입인 structenum을 더 효율적으로 사용해서 오류의 최소화와 참조로부터의 자요로움을 추구하는 프로그래밍 패러다임이다.

OOP와 POP는 추상화와 다형성을 구현하는 것이 중요한데, OOP는 상속과 인터페이스를 통해서, POP는 프로토콜(protocol)을 통해서 이들을 구현하는 것이 핵심이다. 특징은 아래와 같다.

📝 참고 사이트

--