관리 메뉴

사과하는 제라스

[CS 지식 공부] POP와 OOP의 차이에 관하여 본문

CS 지식 공부

[CS 지식 공부] POP와 OOP의 차이에 관하여

Xerath(제라스) 2024. 4. 1. 02:31

목차

    728x90
    반응형

    서론

    안녕하세요~! 개발자 제라스입니다!👋🏻🤖👋🏻

    이번주에 제가 P.O.P를 학습하겠다고 무지무지 다짐했거든요?

     

    그래서 열심히 포스팅을 쓰다가...

    갑자기 또 '포스팅 ADHD'에 걸려버렸습니다...껄껄

     

    https://xerathcoder.tistory.com/271

     

    [Swift 지식] Swift에서 프로토콜이 클래스를 상속한다고?

    서론 안녕하세요! 라스입니다~!👋🏻🤖👋🏻 (라디오 스타 아닙니다.) 제가 이번주에 P.O.P(Protocol Oriented Programming)에 대한 포스팅을 쓰고 있었는데요... D.D.D(the Deadly Diamond of Death)를 공부하면서

    xerathcoder.tistory.com

     

    요런 글을 써버렸죠 ㅎㅎㅎ

    꽤나 짧은 시간에 딥다이브를 해보았는데 나름 재밌고 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는 수평구조입니다.

    엥?? 그게 뭔디요??

     

    출처: https://velog.io/@wnsxor1993/POP%EC%99%80-OOP%EC%9D%98-%EC%B0%A8%EC%9D%B4%EB%8A%94

    위와 같은 형태를 의미해요. 즉, 서로 어디에 속하는 관계가 아닌 각자 기능들을 가지고 있고 필요한 것들만 가져다가 쓰는 방식이라고 생각하면 됩니다.

    저는 이걸 마치 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

     

    POP와 OOP의 차이는?

    패러다임이란 한 시대의 사회 전체가 공유하는 이론이나 방법, 문제의식 등의 체계이다. 즉, 프로그래밍 패러다임은 프로그래밍이라는 기술을 이용하는 구성체가 가지고 있는 현 시대의 체계로

    velog.io

    https://velog.io/@jincode93/Swift%EC%9D%98-%ED%94%84%EB%A1%9C%ED%86%A0%EC%BD%9C-%EC%A7%80%ED%96%A5-%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D%EC%9D%98-%EC%9E%A5%EC%A0%90%EC%9D%80-%EB%AC%B4%EC%97%87%EC%9D%B4%EB%A9%B0-%EC%9D%B4%EB%A5%BC-%ED%81%B4%EB%9E%98%EC%8A%A4-%EA%B8%B0%EB%B0%98-%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D%EA%B3%BC-%EB%B9%84%EA%B5%90%ED%96%88%EC%9D%84-%EB%95%8C-%EC%96%B4%EB%96%A4-%EC%B0%A8%EC%9D%B4%EC%A0%90%EC%9D%B4-%EC%9E%88%EB%82%98%EC%9A%94

     

    [iOS] Swift의 프로토콜 지향 프로그래밍의 장점은 무엇이며, 이를 클래스 기반 프로그래밍과 비교

    프로토콜 지향 프로그래밍

    velog.io

    https://velog.io/@haanwave/iOS-Swift-Protocol-Oriented-Programming-POP

     

    Protocol Oriented Programming, POP

    Apple은 2015년 9월, WWDC에서 Swift 2.0을 발표하면서 Swift는 프로토콜 지향 언어(Protocol-Oriented Language)라고 발표했다.

    velog.io

    https://nslog.net/wordpress/?p=1503

     

    OOP 와 POP – NSLog

    OOP – Object Oriented Programming 객체 지향 프로그래밍 어플리케이션을 구성하는 요소들을 객체로 바라보고, 객체들을 유기적으로 연결하여 프로그래밍 하는 것을 말합니다. 코드의 재사용성과 중복

    nslog.net

    https://velog.io/@jee/OOP%EC%99%80-POP

     

    OOP와 POP

    OOP Object Oriented Programming / 객체지향 프로그래밍 > 독립된 객체를 만들고, 서로 협력을 통해 다른 객체와 Message를 주고 받으며 소프트웨어를 구성하는 것 ✅ Alan Kay가 말하는 OOP의 본질 | - | 설명 |

    velog.io


    아직 꼬꼬마 개발자입니다.

    더 나은 설명이나 코드가 있다면 언제든 환영입니다.

    적극적인 조언과 피드백 부탁드립니다!

     

    그럼 오늘도 개발 가득한 하루되세요!

    - Xerath -

    🤖🤖🤖🤖🤖🤖🤖

     

    728x90
    반응형