Open Do-hyun-Kim opened 1 year ago
개발하려는 것을 기능별로 묶어 모듈화, 하드웨어가 같은 기능을 중복으로 연산하지 않도록 하고, 모듈을 재활용 함으로써 하드웨어의 처리양을 줄임
프로토콜이란 특정 기능 수행에 적합한 메소드, 프로퍼티 등을 정의한 것. 작성된 프로토콜은 class나 struct, enum을 통해 구현됨. 프로토콜을 구현한다는 것은 프로토콜에 선언된 명세에 따라 실질적으로 프로퍼티에 값을 할당하여 선언하거나 메소드의 내용을 작성하는 것을 말함. 즉 POP는 프로토콜의 확장과 프로토콜 상속, 그리고 프로토콜 합성이라는 개념을 사용하여 프로토콜의 정의를 통하여 시스템을 설계함
프로토콜지향 프로그래밍 | 객체지향 프로그래밍 | |
---|---|---|
영문명 | Protocol Oriented Programming | Object Oriented Programming |
장점 | Super Class에 독립적이고 기능의 모듈화 가능. 값 타입 사용이 가능함. 불필요한 API를 제외하고 정의한 API만 가져올 수 있음. | 상속을 이용한 코드의 재사용성 |
단점 | 다중상속 불가능하고 상위클래스의 메모리 구조를 따라갈 수 밖에 없음. 클래스(참조타입)에서만 사용 가능 |
객체지향 프로그래밍이라고 하며, 특정 사물과 관련된 데이터와 그에 따른 행동을 있는 그대로 실체화 시키는 형태의 프로그래밍이다. 객체는 하나 이상의 정보(데이터, 프로퍼티)와 하나 이상의 행동(메서드)으로 구성된다. 상속, 캡슐화, 다형성등의 기능을 구현할 수 있다.
캡슐화: 외부에서 특정 프로퍼티나 메서드를 사용할 수 없도록 정보를 은닉하는 것을 말한다. 객체 내부에 private 접근 제한자 선언을 통해 구현할 수 있다.
추상화: 개별적인 특성을 배제하고 공통적인 특성의 타입으로 나타낼 수 있는 객체지향의 특성이다. 하나의 객체가 여러 가지 타입을 가질 수 있다.
다형성: 객체를 다양한 형태로 나타낼 수 있는 객체지향의 특성이라고 할 수 있다. 상속관계에 있는 자식 클래스가 부모 클래스의 메서드를 오버라이딩하거나 오버로딩 하여 다형성을 구현한다.
객체지향이 제공하는 기능을 어떻게 잘 사용할 것인지에 대한 척도는 응집도와 결합도로 나타낼 수 있다. 높은 응집도와 낮은 결합도가 좋은 객체지향의 설계이며, 이를 위해 위해 SOLID 원칙을 준수하는 것이 중요하다.
응집도: 모듈에 포함된 내부 요소들이 연관돼 있는 정도를 나타낸다. 모듈 내의 요소들이 하나의 목적을 위해 긴밀하게 협력한다면 그 모듈은 높은 응집도를 갖는다고 할 수 있다. 객체지향 관점에서는 얼마나 관련 있는 책임들을 할당했는지를 나타낸다. 모든 메서드들에 대하여 프로퍼티 사용 비율이 높다면 응집도가 높다고 할 수 있으며, 메서드와 변수가 서로 의존하며 논리적인 단위로 묶인다는 의미이다.
결합도: 의존성의 정도를 나타내며 다른 모듈에 대해 얼마나 많은 정보를 가지고 있는지를 나타내는 척도이다. 어떤 모듈이 다른 모듈에 대해 자세히 알고 있다면 두 모듈은 높은 결합도를 가지고, 반대로 꼭 필요한 정보에 대해서만 알고 있다면 낮은 결합도를 가진다. 객체지향 관점에서 결합도는 객체 또는 클래스가 협력에 필요한 적절한 수준의 관계만을 유지하고 있는지를 나타낸다.
SOLID (자세한 각 원칙에 대한 설명은 생략합니다)
POP는 위에서 언급한 OOP의 추상화, 다형성등의 기능 구현과, 이를 잘 설계하기 위한 SOLID 원칙을 준수하는 등 전반적으로 OOP의 개념을 따르지만, 참조 타입인 class
보다 값 타입인 struct
나 enum
을 더 효율적으로 사용해서 오류의 최소화와 참조로부터의 자요로움을 추구하는 프로그래밍 패러다임이다.
OOP와 POP는 추상화와 다형성을 구현하는 것이 중요한데, OOP는 상속과 인터페이스를 통해서, POP는 프로토콜(protocol)을 통해서 이들을 구현하는 것이 핵심이다. 특징은 아래와 같다.
--
Protocol Oriented Programming과 Object Oriented Programming의 차이점을 설명하시오.
Polymorphism 다형성
Object
)가 여러 가지 타입(type
)을 가질 수 있는 것을 의미한다.Object Oriented Programming
의 다형성의 대표적으로 오버로딩(Overloading), 오버라이딩(Overriding)이 있다.Protocol Oriented Programming
은 확장(extension
)을 통해 공통 코드(Method
)를 제공해 줄수 있다.Protocol Oriented Programming
Protocol Oriented Programming
은 프로토콜 지향 프로그래밍으로 확장을 통한 수평 구조로 타입(Type)을 확장하는 방식으로 다형성을 구현한다.protcol
은 필요한 부분만 분리하여 만들수 있으며(Interface Segregation Principle
), 다중 프로토콜을 구현하여 채택할 수 있다.protocol
은extenion
을 활용하여 Method를 정의하여 채택 받은 객체(object
) 에 로직을 구현하지 않도록 할 수 있다.protocol
은 class만 지원하는 것이 아닌 value Type 도 함께 지원한다.Protocol Oriented Programming
은 Value Type인 struct, enum타입을 사용하도록 권장 하고 있다.Object Oriented Programming
Object Oriented Programming
은 객체 지향 프로그래밍으로 상속을 통해 수직 구조로 확장하는 방식으로 다형성을 구현하는 방식을 의미한다.Object Oriented Programming
은Overloading
,Overriding
을 통해 다형성을 제공해준다.Object Oriented Programming
은SuperClass
와SubClass
에 의존적이며class
에게만 지원되기에 독립적이지 못하다.SuperClass
에 상속받은 모든property
와Method
를 물려 받아야 하며, 상속에 제한이 있다.📝 참고 사이트