-
Protocol의 메모리 주소와 프로토콜의 확장 구현시 실행 메서드Swift/swift 문법 2023. 5. 13. 20:58
:Protocol은 자격증
-> 어떤 구조체나 클래스도 채택 가능하다. 테이블과 메서드 주소가 정해져있지 않고, 채택해서 구현할 때 테이블이 만들어진다.
클래스에서 직접 구현한 메서드는 확장에서 구현한 메서드보다 우선순위가 생긴다.
<전체 코드>
protocol Remote{ func turnOn() func turnOff() } extension Remote { func turnOn() {print("리모컨 켜기")} func turnOff() {print("리모컨 끄기")} func doAnother() { print("리모컨 다른 동작") } } struct LgTv:Remote { func turnOn() {print("TV 켜기")} func turnOff() {print("TV 끄기")} func doAnother() { print("TV 다른 동작") } } class Mp3:Remote { func turnOn() {print("Mp3 켜기")} func turnOff() {print("Mp3 끄기")} func doAnother() { print("Mp3 다른 동작") } }
아래에서 프로토콜의 요구사항은
protocol Remote{ func turnOn() func turnOff() }
turnOn() 과 turnOff() 두가지이다.
mp3 인스턴스는 Remote 프로토콜을 채택하고
turnOn() 과 turnOff() 요구사항이 아닌 doAnother() 메서드를 구현함.
var mp3 = Mp3() mp3.doAnother() //Mp3 다른 동작 출력
vs
[Remote 프로토콜을 타입으로 채택 시]
protocol의 요구사항이 아닌 메서드(.doAnother)는, 선택한 타입의 기본 구현(확장)을 따른다.
protocol의 요구사항(turnOn())은 현재 클래스의 구현 메서드를 출력
var mp3:Remote = Mp3() mp3.turnOn() //Mp3 켜기 mp3.doAnother() //리모컨 다른 동작
'Swift > swift 문법' 카테고리의 다른 글
열거형 - 연관값, 열거형 (0) 2023.06.05 as 연산자 / is 연산자 (0) 2023.05.26 [swift] 타입의 종류 (0) 2023.05.13 문자열: 출력 형식 지정자 (0) 2023.05.08 모나드 (0) 2023.04.27