반응형
Swift 언어의 큰 특징 중 하나가 바로 프로토콜 지향 언어라는 것.
객체 지향 언어들은 공통 기능을 모듈화하기 위해 class의 상속을 이용하지만
Swift에서는 프로토콜을 활용하여 상속이 불가능한 struct enum 타입에서도 공통 기능을 모듈화하여 사용할 수 있도록 하였다.
Apple은 2015년 9월, WWDC에서 Swift 2.0을 발표하면서 Swift는 프로토콜 지향 언어(Protocol-Oriented Language)라고 발표했다.
객체 지향 프로그래밍(Object Oriented Programming, OOP) 패러다임에 기반을 둔 언어들은 class의 상속을 사용해 해당 타입이 가지는 공통적인 기능을 모듈화해 구현한다.
하지만 class와 같은 참조 타입의 경우 다중 스레드 환경에서 사용할 때 잘못된 참조로 인해 원본 데이터가 변경될 수 있는 위험이 있다.
실제 Swift의 표준 라이브러리에서 타입과 관련된 것들을 살펴보면 대부분 구조체로 구현되어 있고 다양한 이유로 Apple은 특정 상황을 제외하고 구조체 사용을 권장한다.
하지만 struct 혹은 enum의 경우 상속이 불가능한데, 어떻게 다양한 공통 기능을 모듈화할 수 있을까? 이에 대한 해답은 protocol과 extension에 있다.
Protocol Oriented Programming을 추구하는 이유
- 상속은 class와 같은 참조 타입에서만 가능한데 참조 추적에는 많은 비용이 발생한다. 하지만 POP를 통해 값 타입을 활용할 수 있게 되었고 상속과 같은 기능을 비교적은 비용으로 제공할 수 있게 되었다.
- 상속의 경우 다중 상속을 지원하지 않는 수직적인 구조를 갖는다. 하지만 POP는 수평적인 구조로 기능을 확장시킬 수 있고 이로 인해 기능의 모듈화를 더욱 명확히 할 수 있다.
https://duwjdtn11.tistory.com/618
https://velog.io/@haanwave/iOS-Swift-Protocol-Oriented-Programming-POP
728x90
반응형
'Swift iOS 앱 개발 > Swift' 카테고리의 다른 글
[Swift] 고차함수 map, compactMap (0) | 2023.01.11 |
---|---|
[Swift] Extension에 대하여 (0) | 2023.01.09 |
[Swift] mutating? (0) | 2023.01.06 |
[Swift] Hashable이란? + Equatable 상속해야하는 이유? (0) | 2023.01.06 |
[Swift] protocol 프로토콜이란? (0) | 2023.01.03 |