iOS/Study
프로그래밍 패러다임 (OOP, POP)
HarryJeonn
2023. 1. 7. 19:04
프로그래밍 패러다임
간단하게 설명하면 프로그래밍 스타일을 의미하며 전체적인 프로그래밍 방식을 말한다.
프로그래머에게 프로그래밍의 관점을 갖게 해주고 결정하는 역할을 한다.
객체지향 프로그래밍(OOP)과 프로토콜지향 프로그래밍(POP)에 대해서 알아보자.
객체지향 프로그래밍(OOP)
필요한 데이터를 추상화시켜 상태와 행위를 가진 객체를 만들고 객체들 간의 유기적인 상호작용을 통해 로직을 구성하는 프로그래밍 패러다임이다.
객체 중심의 프로그래밍으로서 부모 클래스의 상속을 통하여 수직 구조로 타입을 확장하는 방식으로 다형성을 구현한다.
특징
캡슐화
- 데이터와 코드의 형태를 외부로부터 알 수 없게하고, 데이터의 구조와 역할, 기능을 하나의 캡슐형태로 만드는 방법
추상화
- 클래스들의 공통적인 특성(변수, 메소드)들을 묶어 표현하는 것
상속
- 부모 클래스에 정의된 변수 및 메소드를 자식 클래스에서 상속받아 사용하는 것
다형성
- 다양한 형태로 표현이 가능한 구조를 말함
장점 | 단점 | POP에서 꼽는 단점 |
코드의 재사용 용이 - 상속을 통해 코드의 재사용을 높일 수 있다. |
개발속도가 느림 - 객체가 처리하려는 것에 대한 정확한 이해가 필요 |
자동화된 공유 - 의도하지 않았는데 상속했다는 이유로 모든 속성과 행위를 공유한다. |
유지보수 우수 - 캡슐화를 통해 유지보수가 쉽다. |
실행속도가 느림 - 객체지향 언어가 대체로 실행속도가 느리다. |
상속은 너무 참견한다. - 하나의 클래스는 하나의 부모만 가진다. 자식 클래스도 하나만 가진다. 무엇을 어떻게 언제 오버라이드 할 지 알아야한다. |
대형 프로젝트 적합 - 클래스 단위의 모듈화 개발로 업무 분담 |
코딩 난이도 상승 - 다중 상속과 같은 이유로 복잡도 상승 |
클래스 타입 관계 - 복잡한 상속 구조를 지닌 클래스 참조 또는 연산할 때 올바른 타입을 위해 down-cast 해야한다. |
프로토콜지향 프로그래밍(POP)
프로토콜 중심의 프로그래밍으로서 extension을 통한 수평 구조로 타입을 확장하는 방식으로 다형성을 구현한다.
struct, enum과 같은 값 타입은 상속을 사용하지 못하는데 이런 값 타입에 프로토콜을 사용하면 상속을 사용하는 것과 같은 효과를 누릴 수 있다.
특징
독립적이며 안전하다.
- 기존 OOP의 부모 클래스와 자식 클래스의 의존적인 관계와 달리 프로토콜에 정의된 인터페이스만 구현하면 되고 이를 따르는 사이들끼리도 깊게 연관되어 있지않아 서로 독립적이며 안전하다.
다중 상속? 다중 채택!
- 상속과 달리 다수의 프로토콜을 따를 수 있고, 물려받는 개념이 아니므로 다중 상속 시 문제점(Diamond of Death)에서 자유롭다.
- Diamond of Death 현상은 다재다능한 하나의 클래스를 여러 클래스가 상속을 받았는데, 그 여러 클래스를 동시에 상속 받은 서브 클래스가 생길 때 발생