[swift 기초문법] - 프로토콜 지향 프로그래밍(Protocol Oriented Language, POP)
스위프트(swift)니 코틀린(Kotlin)이니 요즘 프로토콜 지향 프로그램이란 말이 참 여기저기서 많이 들리고 있습니다.
그럼 프로토콜 지향 프로그래밍이란(POP란) 뭘까요?
저는 프로토콜 지향 프로그래밍 안에 객체 지향 프로그래밍이 있고 객체 지향 프로그래밍 안에 절차 지향 프로그래밍이 있다고 생각합니다.
이 말을 풀어보겠습니다.
절차 지향이란(Procedural programming)
대표적으로 C언어가 있지요
프로시저의 호출을 바탕으로 하며 실행되어야 하는 기능들이 함수의 흐름이 주가 되어 상호작용을 합니다.
그러다 보니 모듈화가 어렵기 때문에 유지 보수가 힘든 반면 객체지향은 유지 보수가 더 용이합니다.
그럼 객체지향이란(Object-Oriented Programming, OOP) 뭘까요
절차 지향이 함수의 흐름이 주라고 하면 객체지향은 객체의 흐름이 주가 되어 상호작용합니다.
객체 표현에는 주로 클래스(Class)를 사용하고 상속을 사용하여 공통기능 구현을 많이 하게 되지요
절차 지향보다 모듈화는 용이하지만 상속의 상속 이런 식으로 상속의 복잡도가 늘어나게 되면 자식 클래스에서 받는 부모 클래스의 기능이 무의미해질 수도 있고 철저하게 일관성을 유지하지 못하면 기능을 확장할 때 사이드 이팩드가 생길 위험이 높아집니다.
이러한 많은 상속의 중첩으로 불편해지는 기능 확장의 문제를 저는 프로토콜 지향 프로그래밍으로 해결할 수 있다고 봅니다!!
그럼 프로토콜 지향 프로그래밍(Protocol-Oriented Language, POP)에서 어떻게 해결할 수 있다는것이냐 하면! 아래와 같습니다.
앞서 배운 프로토콜과 익스텐션을 활용해 상속을 받지 않고 공통 기능을 구현해 낼 수 있어 수평적으로 기능을 확장할 수 있고 제네릭을 사용하여 타입의 장벽을 무너뜨릴 수 있게 되면 코드의 재사용성도 올라가고 POP는 정말 강력한 패러다임이 됩니다.
이렇게 프로토콜 지향에 객체가 없는 것이 아니고 객체지향에 함수의 흐름이 없는 것이 아니라
유행하는 패러다임이 절차지향 -> 객체지향 -> 프로토콜 지향 순으로 발전해온것이라고 생각합니다.
결과적으로 프로토콜 지향 프로그래밍이란
기능의 모듈화가 명확해집니다.
클래스가 상속할 수 있도록 설계되어 있다고 하더라도, 다중상속을 지원하는 언어는 많지 않습니다.
지원하지 않는다는 뜻은 하나의 상속체계에서 다른 상속체계에 속해있는 기능을 끌어다 쓸수 없다는 뜻이됩니다.
그런데 POP는 기능을 Protocol이라는 단위로 묶어 표현하고 초기 구현을 해둘 수 있으니 상속이라는 한계점을 탈피할 수 있게 만들어줍니다.
프로토콜, 익스텐션, 제네릭에 관한 내용은 요기 아래 링크에 있습니다.
2019/08/21 - [Swift] - [swift] 기초문법 - 12. 프로토콜(Protocol)
2019/09/28 - [Swift] - [swift] 기초문법 - 24. 프로토콜 초기구현(Protocol Default Implementations)
2019/09/25 - [Swift] - [swift] 기초문법 - 21. 익스텐션(Extension)
2019/09/27 - [Swift] - [swift] 기초문법 - 22. 제네릭(Generic)
#swift 기초
#swift 강의
#ios programming
'IT > Swift' 카테고리의 다른 글
[swift] Binding, Tuple, Where (0) | 2019.10.06 |
---|---|
[swift] Wildcard, Nested Types (0) | 2019.10.05 |
[swift] Protocol Default Implementations, Associated Type (0) | 2019.09.28 |
[swift] Extension, Generic (0) | 2019.09.25 |
[swift] Type Casting (0) | 2019.09.23 |