POP

나이든별 / Oldstar·2022년 6월 27일
0

Think about Keywords

목록 보기
32/37

공부한 것

  • POP
    • 수평적 확장

고민한 점 및 생각해본 점

  • POP와 OOP의 차이가 뭔가요? 라는 질문에 대한 답을 알아보았다.
    • OOP는 상속을 통해 수직적으로 타입을 확장하고, POP는 프로토콜 확장을 통해 수평적으로 타입을 확장한다고 한다.
  • POP는 Protocol Oriented Programming. 프로토콜 지향 프로그래밍이다.
  • 의외로 역사가 깊다면 깊은데, 2015년 WWDC에서 Swift 2를 소개하면서, 세계 최초의 프로토콜 지향 프로그래밍 언어라고 했다고 한다.
    • Swift 자체가 2014년에 발표된 언어니까, Swift 차원에서 보면 아무튼 역사가 깊다고~
  • 지금부터 나올 몇 가지 사실에 주목해보자 - 이 사실들은, Swift가 POP 방법론을 사용한 것과 관련이 있다.
    • 잘 알다시피, 프로토콜이란 일종의 '기능 청사진' 같은 역할을 한다. 이 프로토콜을 준수하는 구조체 열거형 클래스 등이 최소한 이건 갖춰라! 하는 것을 정의해둔 것.
    • Swift는 여러 개의 클래스를 상속받을 수 없다.
    • Swift는 구조체로 이루어진 기본 타입들을 통해 공통 기능을 위시한 다양한 기능을 구현했다.
  • 먼저, 프로토콜은 정의만 할 뿐 구현하지 않는다.
  • 하지만 extension과 함께라면? 프로토콜 안에 있는 변수나 메서드를, 미리 구현해둘 수 있다.
  • 이렇게 구현하고 나면, 해당 프로토콜을 채택하는 것만으로 해당 객체는 그 기능을 누릴 수 있다! 기능을 요구하되 구현할 것을 요구하지 않음으로써(기본적으로 제공함으로써), 일종의 기능 추가를 할 수 있는 셈이다.
  • POP의 장점으로는 무엇이 있을까?
    • 무엇보다도 객체 지향 방식에서 골치가 아팠던, 기나긴 상속에 관련된 문제로부터 자유롭다.
    • 그러면서도 다른 여러 개의 클래스나 구조체에서 중복된 코드가 등장하는 것을 막을 수 있다.
    • 다중 상속을 시키는 것처럼 다중 프로토콜 준수를 시킴으로써 원하는 확장을 할 수 있다.
  • extension은 수평적 확장이라고 하는 것이 재미있었다. extension 안에서는 메서드를 오버라이딩할 수 없다고 한다!
    • 이 이유가, 메서드 오버라이딩은 상속과 관련이 있기 때문이다.
    • extension은 상속을 통한 수직적 확장이 아닌 수평적 확장이기 때문에, 기능의 추가만 가능하다고 한다.

참조

https://www.raywenderlich.com/6742901-protocol-oriented-programming-tutorial-in-swift-5-1-getting-started

profile
함께 나아가고자 하는 사람

0개의 댓글