ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 프로토콜
    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
Designed by Tistory.