일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- 애플 디벨로퍼 아카데미 21주차 회고
- Swift 문법
- ObservableObject
- 앱 비교 프로젝트
- 애플 아카데미 후기
- 네이버 부스트캠프
- 데이터베이스
- 애플 디벨로퍼 아카데미 후기
- StateObject
- apple developer academy 후기
- ObservedObject
- sqoop
- 데이터베이스 공부
- 소프트웨어분석및설계
- useReducer
- OS
- 제앱소
- 운영체제
- Swift 디자인패턴
- 치지직
- 애플 디벨로퍼 아카데미
- Swift 기능
- 네이버 치지직
- Apple Developer Academy @ POSTECH
- global soop
- swift문법
- 숭실대
- SWIFT
- react
- iOS 개발 오류
- Today
- Total
사과하는 제라스
[CS 지식 공부] POP와 OOP의 차이에 관하여 본문
목차
서론
안녕하세요~! 개발자 제라스입니다!👋🏻🤖👋🏻
이번주에 제가 P.O.P를 학습하겠다고 무지무지 다짐했거든요?
그래서 열심히 포스팅을 쓰다가...
갑자기 또 '포스팅 ADHD'에 걸려버렸습니다...껄껄
https://xerathcoder.tistory.com/271
요런 글을 써버렸죠 ㅎㅎㅎ
꽤나 짧은 시간에 딥다이브를 해보았는데 나름 재밌고 Swift 언어의 발전 과정을 살짝 핥아볼 수 있어서 좋았습니다.
무튼무튼!! 이제 다시 돌아와서 블로그를 쓰려고 하는 순간...!
글이 날아갔습니다...
그래서 눈물을 닦으며 쓰고 있는 지금입니다 😭
이번주에 POP를 학습하려 했던 건 사실 '네이버 부스트캠프' 당시 처음 들었던 용어였고 그때 공부해두지 못하고 어설프게 알고 있던 점에서였습니다.
또 특히 Swift가 POP를 위한 언어라는 이유에서 반드시 알아두어야겠다고 생각이 들었어요.
그럼 오늘도 한번 포스팅 시작해보겠습니다!
POP가 뭔데??
일단 POP는 Protocol Oriented Programming(프로토콜 지향 언어)입니다.
우리가 흔히 아는 OOP와 마찬가지로 프로그래밍 패러다임 중 하나로 다형성이란 특징을 가지고 코드의 재사용성을 높이고, 좀 더 클린한 구조로 설계할 수 있도록 하는 방식이죠.
예전에 Apple은 WWDC2015에서 Swift2.0을 발표하면서 Swift는 프로토콜 지향언어(POP)라고 했습니다.
(오...Apple의 공식 발언...소중해..!!)
그럼 이 POP가 과연 어떤 점에서 OOP와 차이가 있는지 살펴보겠습니다.
OOP와 POP의 차이는?
둘은 여러 부분에서 차이가 있지만 가장 크게는 구조적인 면에서 차이가 존재합니다.
OOP(객체 지향 프로그래밍)
OOP는 수직 구조입니다. 쉽게 부모-자식 클래스의 상속 관계를 생각해보면 됩니다.
자식 클래스는 항상 부모 클래스의 것을 받아오도록 구현되어 있고 이 과정이 상향식 접근 구조인 것입니다.
또 이렇게 만들어진 객체들은 접근 지정자들을 통해 은닉화가 가능합니다.
POP(프로토콜 지향 프로그래밍)
POP는 수평구조입니다.
엥?? 그게 뭔디요??
위와 같은 형태를 의미해요. 즉, 서로 어디에 속하는 관계가 아닌 각자 기능들을 가지고 있고 필요한 것들만 가져다가 쓰는 방식이라고 생각하면 됩니다.
저는 이걸 마치 2013년도에 상당히 주목받았던 폰블럭과 개념이 비슷하다고 생각합니다.
그럼 POP가 OOP의 단점을 해결했다고 할 수 있나?
일단 저도 공부를 하면서 POP가 OOP의 발전형이란 얘기도 많이 들었습니다.
사실 이건 팩트는 아니고 패러다임이 OOP의 D.D.D(the Deadly Diamond of Death, 죽음의 다이아몬드) 문제점을 해결하는 과정에서 나온게 POP 개념이기 때문이라고 봅니다.
모든 패러다임은 각자의 장단점이 있으니까요!
일단 D.D.D는 다중 상속을 지원하는 프로그래밍 언어에서 어떤 자식클래스가 2개 이상의 부모로부터 같은 값을 물려받을 때 어떤 걸 선택해야 하는지에서 생기는 상속 계층 구조 문제입니다.
즉, 엄마가 좋아? 아빠가 좋아?를 물어보는 어른들의 악랄함과 같은 것이죠.
그런데 Swift에서는 일단 다중 구현이 가능한 프로토콜을 이용하고 상속과 달리 물려받는 게 아니라 가져다가 구현하는 방식이기도 하면서 각 프로토콜에 정의되어 있는 인터페이스들끼리 서로 독립적이라서 이런 D.D.D 문제를 해결할 수 있게 됩니다.
또한 단순 청사진으로서의 역할을 하는 것이 아닌 extension을 활용해서 프로토콜 초기구현(Protocol Default Implementation)을 통해 미리 값을 넣어두거나 함수를 구현해둘 수도 있기에 상당히 좋죠 ㅎㅎ
또한 제가 포스팅 ADHD에 걸리게 한 하나의 트리거!
값 타입에 대한 상속을 해결해줍니다.
구조체는 상속이 불가능한데, Swift의 기본 타입들은 대부분 구조체로 되어 있어요.
이런 아이들에 기능들을 추가해주려고 하면 프로토콜과 Extension을 활용하면 해결을 할 수 있습니다...!
마무리
오늘은 POP에 대해서 알아보았습니다!
POP공부를 정말 많이 했는데 뭔가 용두사미로 끝나는 기분이네요...🤦🏻♂️🤦🏻♂️
이렇게 각잡고 공부하다가 맥이 끊기니 머리 속에는 정리되지만 글로 쓰긴 참 어려운 것 같습니다.
사실 작년에 네부캠을 하면서 다들 ~able, 이런 식으로 프로토콜들을 죄다 만들고 갖다 쓰길래 이해가 안되었거든요?
근데 이제는 아주아주 이해가 잘 가면서 '단순 청사진 아님?'하고 생각하고 있던 제가 부끄러워지더라구요 ㅋㅋㅋㅋㅋㅋㅋ
아무튼 앞으로는 프로토콜을 적극적으로 사용하고 이를 기반으로 코드를 짜는 방식에 조금 더 노력해봐야겠습니다!
그럼 오늘도 포스팅 읽어주셔서 감사드리고 좋은 글로 돌아오겠습니다!
참고
https://velog.io/@wnsxor1993/POP%EC%99%80-OOP%EC%9D%98-%EC%B0%A8%EC%9D%B4%EB%8A%94
https://velog.io/@haanwave/iOS-Swift-Protocol-Oriented-Programming-POP
https://nslog.net/wordpress/?p=1503
https://velog.io/@jee/OOP%EC%99%80-POP
아직 꼬꼬마 개발자입니다.
더 나은 설명이나 코드가 있다면 언제든 환영입니다.
적극적인 조언과 피드백 부탁드립니다!
그럼 오늘도 개발 가득한 하루되세요!
- Xerath -
🤖🤖🤖🤖🤖🤖🤖
'CS 지식 공부' 카테고리의 다른 글
[CS 지식 공부] 공유기의 원리(feat. NAT(Network Address Translation)) (0) | 2024.02.20 |
---|---|
[CS 지식 공부] Virtual Memory란? (1) | 2024.02.09 |
[CS 지식 공부] PNG와 JPG의 차이는 무엇일까?(feat. JPEG) (0) | 2024.01.18 |
[CS 지식 공부] 그쪽도 라이브러리와 프레임워크의 차이를 아세요?(feat. API) (1) | 2023.12.26 |