-
Swift4: Protocol Oriented Programming - 1.프로토콜 시작POP 2021. 2. 12. 23:51
1장 프로토콜 시작
프로토콜(protocol)
프로토콜은 작업을 수행하기 위해 타입에서 필요로 하는 메소드, 프로퍼티 그리고 다른 요구사항을 정의하는 계약의 역할을 한다.
프로토콜 요구 사항
프로토콜에서 프로퍼티를 정의할 때에는 항상 get과 set 키워드로 프로퍼티가 읽기 전용인지 읽기 쓰기 프로퍼티인지 명시해줘야만 한다.
선택 가능한 요구사항
프로토콜 앞에 @objc 키워드를 붙여 선택 가능한 메소드나 프로퍼티를 프로토콜에 포함할 수 있다. 단, class만 해당 프로토콜을 채택 가능
프로퍼티나 메소드 앞에는 @objc optional 키워드를 붙인다
프로토콜 컴포지션
프로토콜 컴포지션은 class에서 단일 상속만 가능한 swift에서 객체의 요구사항을 구체적이고 중복없이 구현하도록 해준다. 깊이감 보다는 너비를 늘리는 느낌.
타입으로 사용
프로토콜은 하나의 완벽한 타입으로 취급하여, 함수의 매개변수나 반환 값 혹은 변수나 상수, 컬렉션에 대한 타입으로 사용 가능.
protocol Human { var firstName: String {get set} var lastName: String {get set} var birthDate: Date {get set} var profession: String {get} init(firstName: String, lastName: String, birthDate: Date) } func updateHuman(human: Human) -> Human { var newHuman: Human = human //human 갱신 return newHuman } var humanArray = [Human]() var humanDict = [String: Human]()
연관 타입 (associated type)
연관 타입은 프로토콜 내에서 타입을 대신하여 사용할 수 있는 placeholder name을 제공한다.
제네릭이 아닌 객체에서 마치 제네릭을 사용하는 것과 같은 효과가 있다.
protocol Queue { associatedtype QueueType mutating func addItem(item: QueueType) mutating func getItem() -> QueueType? func count() -> Int }
위 프로토콜을 채택하는 객체가 QueueType을 결정함.
swift 제네릭(generic)은 런타임 단계에서 사용할 타입을 정의하게 해준다.
델리게이션
- 장점
- 행위의 변경이 용이 - delegate 프로토콜을 따르는 새로운 타입을 만들면 됨
- 느슨한 결합 - 책임의 분리 촉진
프로토콜 지향 설계
설계를 할 때에 프로토콜의 계층 구조 등에 대한 다이어그램을 그려보는게 도움이 된다.
- 장점
- 각 프로토콜은 특정 기능에 대한 구체적 요구 사항만을 포함
- 프로토콜 컴포지션을 통해 단일 타입이 다중 프로토콜을 따르는 것이 가능
스위프트 표준 라이브러리 프로토콜
위 사이트에서 라이브러리 구성을 살펴볼 수 있음
코드
참고 문헌
https://book.naver.com/bookdb/book_detail.nhn?bid=14107671
'POP' 카테고리의 다른 글
Swift4: Protocol Oriented Programming - 6.프로토콜지향 프로그래밍 (0) 2021.02.17 Swift4: Protocol Oriented Programming - 5.객체지향 프로그래밍 (0) 2021.02.16 Swift4: Protocol Oriented Programming - 4.제네릭 (0) 2021.02.15 Swift4: Protocol Oriented Programming - 3.확장 (0) 2021.02.15 Swift4: Protocol Oriented Programming - 2.타입 선택 (0) 2021.02.14 - 장점