issues
search
yoogail105
/
KkokkoSwift
꼬리에 꼬리를 무는 swift 개념 정리
28
stars
0
forks
source link
# 프로토콜 지향 프로그래밍
#45
Open
yoogail105
opened
2 years ago
yoogail105
commented
2 years ago
프로토콜 지향 프로그래밍
cf. 객체지향 프로그래밍
슈퍼클래스가 설계의 중심
모든 서브 클래스는 해당 슈퍼 클래스로부터 기능과 프로퍼티들을 상속받음
⇒ 프로토콜지향 프로그래밍
프로토콜
이 설계의 중심
프로토콜
: 작업을 수행하기 위해서 타입에서 필요로 하는 메소드, 프로퍼티, 다른 요구 사항을 정의하는
계약
역할
프로토콜을 채택하거나 따르는 타입: 프로토콜에서 정의한 요구 사항을 구현할 것임을 약속하는 것
프로토콜 채택한 타입이 프로토콜 유구사항을 지키지 않으면
컴파일 에러
swift
: 클래스, 구조체, 열거형 모두 프로토콜을 따를 수 있음
키워드:
프로토콜 상속
,
프로토콜 컴포지션
,
프로토콜 확장
프로토콜 상속
한 개 이상의 프로토콜로부터 요구 사항을 상속받을 수 있음
요구사항을 추가할 수 있음
객체지향에서의
클래스 상속
과 유사
클래스의 상속은 단일 상속, but 프로토콜은
여러 프로토콜로부터 요구 사항을 상속 받을 수 있음
프로토콜 확장과 프로토콜을 함께 사용하면 기능을 상속받을 수 있는 능력이 생김
?
프로토콜 컴포지션
하나 이상의 프로토콜을 채택할 수 있음
=
다중
프로토콜 채택 가능
모든 요구 사항을 단일 프로토콜이나 단일 클래스에서 상속하지 않고, 여러 개의 작은 컴포넌트들로 나눌 수 있게 해줌
타입군type families의 높이를 증가 X →
너비
를 증가
→ 해당 프로토콜을 따르는 타입 모두가 필요로 하는 요구 사항이 아닌 것을 포함하는
비대한 타입을 생성하는 것을 피하게 해준다
는 것을 의미
타입의 요구사항에 대해 구체적으로 대응, 필요한 요구사항만 채택할 수 있음
⇒ 프로토콜 상속과 프로토콜 컴포지션의 장점
더 작으면서도 구체적인 프로토콜 만들 수 있게 해줌
+
객체지향에서의 비대해진 슈퍼클래스 방지
❗️주의❗️
너무 구체적인 프로토콜은 유지, 관리 어렵기 때문에 주의
프로토콜 확장extension
프로토콜을 채택한 타입에 기능을 추가하는 것
해당 프로토콜을 따르는 모든 타입에 공통적인 기능을 제공하기 위해 사용
해당 프로토콜을 따르는 타입에 메소드와 프로퍼티 구현체를 제공하게하는 기능
개별 타입마다 구현체를 제공해야 하는 요구 사항, 클래스 계층 구조를 만들어야 하는 요구사항 없앰
해당 프로토콜을 따르는 모든 타입에 공통의 구현체를 제공할 수 있는 기능 제공
주의
그룹 타입에 기능을 추가하고자할 때 사용
단일 타입에 기능을 추가하려는 목적일 경우엔, 타입을 개별적으로 확장
🔖 참고
스위프트4 프로토콜지향 프로그래밍 3/e
by 존 호프만
프로토콜 지향 프로그래밍
cf. 객체지향 프로그래밍
⇒ 프로토콜지향 프로그래밍
프로토콜
이 설계의 중심프로토콜
: 작업을 수행하기 위해서 타입에서 필요로 하는 메소드, 프로퍼티, 다른 요구 사항을 정의하는 계약역할컴파일 에러
프로토콜 상속
,프로토콜 컴포지션
,프로토콜 확장
프로토콜 상속
?
프로토콜 컴포지션
⇒ 프로토콜 상속과 프로토콜 컴포지션의 장점
+
❗️주의❗️
너무 구체적인 프로토콜은 유지, 관리 어렵기 때문에 주의프로토콜 확장extension
주의
그룹 타입에 기능을 추가하고자할 때 사용🔖 참고