-
프로토콜Swift/swift 문법 2023. 4. 24. 14:44
프로토콜 이란?
: 프로토콜은 특정 기능 수행에 필수적인 요수를 청의한 청사진(blueprint)입니다. 프로토콜을 만족시키는 타입을 프로토콜을 따른다(conform)고 말합니다. 프로토콜에 필수 구현을 추가하거나 추가적인 기능을 더하기 위해 프로토콜을 확장(extend)하는 것이 가능합니다.
프로토콜 -> 클래스와 상속의 단점 보완
1. 하나의 클래스만 상속 가능
2. 기본적인 상위 클래스의 메모리 구조를 따라갈 수 밖에 없음.
3. 클래스 에서만 가능
프로토콜 - 선택적 요구사항의 구현
:메서드 선언 앞에 @objc를 붙여주면 된다.
프로토콜의 확장은 클래스와 구조체가 메서드를 호출하는 방식이 다르다.
[인스턴스의 타입을 해당 클래스/구조체로 인식한 경우]
클래스 -> V 테이블
구조체 -> 코드주소를 찾아간다.
[인스턴스의 타입을 프로토콜로 인식한 경우]
클래스 구조체 모두 W 테이블을 찾아간다.
import UIKit 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 다른 동작") } } var tv1 = LgTv() tv1.doAnother() // TV 다른 동작 var tv2:Remote = LgTv() tv2.doAnother() // 리모컨 다른 동작 var mp3 = Mp3() mp3.doAnother() //Mp3 다른 동작 var mp4:Remote = Mp3() mp4.doAnother() // 리모컨 다른 동작
'Swift > swift 문법' 카테고리의 다른 글
모나드 (0) 2023.04.27 스위프트의 메모리 관리 모델 (0) 2023.04.24 클래스와 구조체 (0) 2023.04.22 메모리 안전 (0) 2023.04.21 클로저 (1급 객체) (0) 2023.04.18