티스토리 뷰

iOS

POP - (1), OOP vs POP

iOS 개발자, 였던 것 2023. 4. 24. 23:50

일요일 하루는 여유롭게 보내고, 새로 시작하는 마음으로 들고온 금주의 첫 주제는 OOP와 POP 그리고 AP이다. 

iOS 개발자라고 했지만, 부끄럽게도 POP라는 단어를 안지 얼마 되지 않았다. 무려 WWDC2015에서 언급된 단어인데!

몰랐던 건 몰랐던 대로 앞으로 알아가면 되지 않을까? 하며 본격적으로 오늘의 글을 시작한다.


OOP?

많은 시간 동안 프로그래밍 패러다임이었던 객체 지향 프로그래밍을 의미한다.

C 중심의 절차지향 프로그래밍에서 유지보수성과 과도하게 늘어나는 명령어들을 효율적으로 처리하기 위해 등장한 방식인데,

처음 등장했을때는 하드웨어 성능 등의 이유로 주목받지는 못했었으나, GUI가 본격적으로 등장하면서 주목을 받았다고 한다.

 

객체를 중심으로 하는 프로그래밍인데, 

비슷한 것들을 모아 작은 객체를 만들고 이를 기반으로 하는 큰 객체들을 점점 만들며 문제를 해결하는 방식이라고 할 수 있겠다.

조금 더 풀어 이야기하자면, 최소한의 공통적인 기능과 요소들을 모아 객체를 만들고 그 객체들에 살을 덧대어 좀 더 넓은 범위의 일을 할 수 있도록 만들어가는 형태가 객체 지향 프로그래밍이다.

 

그래서 가지는 특징들이 있는데 위의 설명을 빗대어 표현하자면

최소한의 속성들을 추출해 사용하는, 추상화

만들어진 객체에 살을 덧대는, 상속

상속받아 비슷하지만 새로운 것을 만드는, 다형성

들이 대표적으로 있고 이 외에도 접근 제어, 은닉과 관련된 캡슐화가 또 다른 특징들이다.

 

그렇지만, 상속의 대표적인 단점이 부모 클래스의 영향을 많이 받는다는 점, 그 와중에 확장하는 과정에서 불가피하게 커져가는 상위 클래스들, 불필요한 요소들까지 반드시 같이 가지고 있어야 한다는 점들을 문제삼기 시작했고 이를 해결하고자 등장한게 바로 POP, Protocol Oriented Programming이다.

참고로 Swift에서 상속을 사용하는 대표적인 친구는 UIViewController와 하위 ViewController들 등이 있다.

 

POP?

오늘의 주인공, 팝! POP에 대해 알아보자.

풀어서 쓰면 Protocol Oriented Programming, 즉 프로토콜 지향 프로그래밍을 의미한다.

그렇다면, 프로토콜을 먼저 알아야 할 필요성이 있는데 간단하게 이야기하면 프로토콜은 규칙이라고 볼 수 있다.

 

규칙이라고 함은 지키도록 정해 놓은 질서나 원칙을 의미하는데, 실제로 프로토콜이 그렇다.

상속이라고 표현했던 OOP와 달리 프로토콜은 만들어두면 이를 '채택'한다고 표현한다.

즉, 객체를 만드는 데에 있어서 특정한 객체가 가질 규칙을 정해두는 것이라고 볼 수 있겠다.

 

규칙인 만큼 여러개를 가져다 쓸 수 있을 뿐더러, 각각에게 적용되는 규칙을 다르게 설정하는 것 또한 가능하고,

Swift에서는 property에 대한 규칙을 정하거나, method에 대한 규칙을 선언해 둘 수 있다. 

protocol HelloProtocol {
    var greet { get }
    var hello { get set }
    
    func sayHello()
}

 

위처럼, 읽기가 가능한 프로퍼티인 greet과 읽기 쓰기가 가능한 프로퍼티인 hello 그리고 메소드 sayHello 까지 구현해야해 라는 의미로 HelloProtocol이 만들어졌고, 이를 채택하는 다른 객체 혹은 프로토콜들은 greet과 hello, sayHello에 대한 구현을 해야한다.

 

사실 여기까지만 보면 OOP와 크게 다른점이 뭔가 싶을 수도 있다. 

그렇지만, 벌써 많은 걸 줄였다. 메소드의 몸체가 없어졌고, 아직 사용하지 않을 프로퍼티의 불편한 기본값도 없어졌다.

WWDC 발표에서의 말을 추가적으로 인용하자면, dynamic runtime check를 static check로 바꿈으로서 컴파일 타임에 오류가 발생하는 것을 미리 체크해 볼 수도 있다고 한다.

 

단순히 패러다임을 정리하기 위해 시작한 글이지만, WWDC 까지 들어가다보니 2편을 안 쓸수가 없게 되었다.

발표에서 이야기하는 본격적인 POP의 장점을 들고 다시 찾아오겠다!


객체 지향적인 프로그래밍이던, 프로토콜 지향적인 프로그래밍이던 깔끔한 구조로 구성해 재사용성을 높이고 개발 생산성을 향상시키는 것을 목적으로 등장한 패러다임이다. 객체를 쓴다고 객체지향이 아니고 프로토콜을 쓴다고 프로토콜 지향이 아니고, 이를 통해 얻어 갈 수 있는 이점들을 챙겨야 맞게 사용하고 있다고 할 수 있지 않을까?

 

스스로의 코드를 되돌아보면서 잘 사용하고 있는지도 한번 확인해보자.

부족한 글이지만, 읽어주셔서 감사합니다. 항상 잘못된 내용에 대한 지적은 감사히 받고 있습니다.

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/02   »
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
글 보관함