[iOS] Swift의 프로토콜 지향 프로그래밍의 장점은 무엇이며, 이를 클래스 기반 프로그래밍과 비교했을 때 어떤 차이점이 있나요?

Zerom·2024년 1월 19일
0

iOS 질문 답변

목록 보기
4/9
post-thumbnail

내가 생각한 대답

POP와 OOP는 공통적으로 다형성을 통해 코드들의 재사용성을 높이고, 이를 통해 기존보다 더욱 생산적이고 클린한 구조의 설계를 이끌어내도록 도와줍니다. OOP는 상속을 통해 수직적인 확장을 하는 반면 POP는 수평적인 확장이 가능하고, 객체뿐만 아니라 구조체와 열거형에도 사용이 가능하다는 장점이 있습니다. 그리고 OOP의 슈퍼클래스와 서브클래스의 의존적인 관계와는 달리, POP는 프로토콜에 정의된 인터페이스만 구현하면 되고 이를 따르는 사이들끼리도 깊게 연관되어 있지 않아 서로 독립적이며 안전합니다. 마지막으로 상속과 달리 다수의 프로토콜을 채택할 수 있고, 물려받는 개념이 아니므로 다중 상속 시의 문제점인 죽음의 다이아몬드 이슈에서 자유롭습니다.

추가 질문

프로토콜을 활용한 설계에서 주의해야 할 점은 무엇인가요?

과도하게 프로토콜을 사용할 경우 코드가 너무 복잡해지고 가독성이 떨어져 유지 보수가 오히려 어려워집니다. 그렇기 때문에 개발자는 스스로 판단하여 꼭 필요한 경우에만 도입하는 것이 좋습니다. 그리고 너무 추상화된 프로토콜은 오히려 스스로 제약이 생기므로 피하는 것이 좋은데 만약 기존에 채택된 프로토콜인데 추가적인 코드를 넣어 다른 곳에서도 사용하려는 경우라면 호환성을 위해 새로운 프로토콜을 도입하는 것이 더 좋은 방법이라고 생각합니다.

프로토콜 확장(Protocol Extension)을 사용하여 코드 재사용성을 높이는 방법은 무엇인가요?

프로토콜 확장을 통해 기존의 프로토콜에 새로운 기능을 추가하거나, 이미 채택된 기능에 대해 기본 구현을 제공하는 방법으로 코드의 재사용성을 높일 수 있습니다. 실제 앱을 출시할 때 Realm과 통신하는 부분의 코드 중 Save, Delete와 같이 공통적으로 사용하는 기능에 대해서는 프로토콜 확장을 통해 재사용성을 줄인 경험이 있는데 상속과 달리 슈퍼클래스에 대한 의존성도 없고 다중 채택이 가능해서 활용하기 훨씬 용이하였습니다.

참고

추상화란?

  • 추상화란 객체들의 공통적이고 핵심적인 속성을 추출하여 일반화하는 것을 말한다.

추상화하면 좋은 점

  • 추상화를 통해 상위 개념의 클래스에서 메서드를 단 한번만 정의해주면, 그 클래스를 상속받는 다른 클래스들도 해당 메서드를 사용할 수 있기 때문에 코드의 재사용성도 증가하고 중복된 코드를 줄여 가독성을 높힐 수 있다.

다형성이란?

  • 다형성이란 하나의 객체가 여러 가지 타입을 가질 수 있는 것을 의미한다.

다형성을 활용하면 좋은 점

  • 다형성을 활용하면 기능을 확장하거나, 객체를 변경해야할 때 타입 변경 없이 객체 주입만으로 수정이 일어나게 할 수 있고, 상속이나 프로토콜 확장을 사용한다면 중복되는 코드까지 제거할 수 있다.
profile
꼼꼼한 iOS 개발자 /
Apple Developer Academy @ POSTECH 2기 / 멋쟁이사자처럼 앱스쿨 1기

0개의 댓글