본문 바로가기
iOS/설명

[iOS] OOP와 POP는 어떤 경우에 써야 할까 (고찰)

by Sky Titan 2024. 3. 17.
728x90

 근래에 OOP와 POP는 각각 어떤 경우에 사용해야하는 가에 대한 고민을 해본 적이 있다. 사실 그냥 막연하게 Swift는 POP 개발을 지향해! 라고만 알고 있지 실제로 어떤 경우에 사용해야하는 가에 대한 개인적인 기준이 없는 듯 하여 그에 대한 개인적인 생각을 적어본다.

 (OOP와 POP라고 표현하였지만 정확히는 'OOP의 상속'과 'Protocol의 초기구현'이라고 봐도 될듯 하다.)

OOP vs POP

https://skytitan.tistory.com/550

 

[Swift] 프로토콜 지향 프로그래밍 (Protocol Oriented Program)

프로토콜 지향 프로그래밍 스위프트는 프로토콜 지향 언어(Protocol-Oriented Language)이다. 스위프트는 대부분 구조체로 기본 타입이 구현되어있다. String, Int, Float, Date, URL 등등 익히 사용하고 있는

skytitan.tistory.com

 OOP와 POP의 차이점에 대해선 예전에 이미 관련 글을 작성한 적이 있다.

 OOP는 우리가 프로그래밍적으로 표현하고자 하는 개념들을 Property, Method로 이루어진 '객체'로 만들어 최대한 실세계에서 이 객체들이 통신하는 모습을 본따 만든 프로그래밍 방법론이다.

 OOP에선 Sub class가 Super class를 상속받고 의존을 하고 있는 상태이다. 또한 이 의존성이 굉장히 강해 다중 상속은 기본적으로 불가능하다.

 

 POP는 반면에 Swift에서 제공하는 Protocol과 초기구현이라는 개념을 이용하여 구현체인 객체가 다른 구현체와 의존성을 가질 필요없이 특정 코드들을 모듈화하여 재사용할 수 있게 하는 이론이다.

 

OOP는 언제 사용하는가

 위의 OOP에 관한 설명에서 주목해야할 점은 Sub class가 Super class에 완전히 의존하게 된다는 점이다. 즉 설계적으로 특정 객체가 다른 객체의 구현에 강제적으로 의존하게 하고 싶을 때 사용해야한다고 생각한다.

 

 예를 들어 현재 전체 프로젝트에서 사용하고 있는 모든 ViewController들의 life cycle 메서드들에서 공통된 Log를 우리 서버로 전송하고자 한다고 생각해보자. 이런 상황에선 현재 프로젝트에서 선언된 모든 ViewController들은 life cycle 메서드들에서 공통된 Log를 보내는 구현을 가진 Super class를 기본적으로 상속받고 Log를 보내는 Super class의 구현을 강제화해야 한다.

 

 반대로 설계적으로 의존성을 가질 필요가 없는 클래스들끼리 상속 관계로 만들어 놓을 시, 나중에 이 의존성을 끊어야 되는 상황이 생겼을 때 Risk가 커진다.

 

 때문에 OOP는 개인적인 개발 경험 상으로도 일반적인 Business에서 사용되는 UI component들을 구현할 때보다 전체 프로젝트에서 공통적으로 사용하는 Core Module에서 더 빈번히 사용되었던 것 같다.

 

POP는 언제 사용하는가

 위에서 OOP와 POP의 차이점에 대해서만 설명을 하였는데 그럼 반대로 OOP와 POP를 사용하는 공통된 목적은 뭘까?

 바로 코드의 재사용성 때문이다. 둘 다 상위 클래스 혹은 초기구현에서 구현된 코드를 재사용하고자 사용하게 되는 경우가 크다.

 

 다만 OOP는 위에서 설명했다시피 설계적으로 특정 클래스에 의존성을 가지면서 해당 클래스의 코드를 재사용하고자 할 때 사용해야하고 POP는 나머지 경우, 즉 설계적인 의존성이 없을 때 단순히 코드만 재사용하고자 할 때 사용해야한다고 생각한다.

 

 따라서 Swift 개발을 하는 경우에 일반적인 사용빈도는 OOP보단 POP가 훨씬 클 것이라고 생각한다.

728x90

'iOS > 설명' 카테고리의 다른 글

[iOS] '==' vs '==='  (0) 2024.03.17
[iOS] High performance based drawing  (0) 2024.02.24
[iOS] Mirror Struct  (0) 2024.02.24
[iOS] iOS Webview에서 텍스트 복사하는법  (0) 2023.07.15
[iOS] beginBackgroundTask  (0) 2023.06.24

댓글