[ swift - protocol ]

Yr Yr·2023년 12월 7일

TIL

목록 보기
13/39

protocol

  • 특정 역할을 하기 위한 메소드,프로퍼티,기타 요구사항 등을 정의해놓은 규약 혹은 약속

  • class,struct,enum이 프로토콜을 채택해서 특정 기능을 실행하기 위한 프로토콜의 요구사항을 실제로 구현할 수 있다.

  • 프로토콜에서는 이름과 타입 그리고 gettable,settable을 명시해야 하고 프로퍼티는 항상 var로 선언해야 한다.

  • 상속은 다중 상속이 불가능하지만 프로토콜은 다중 상속이 가능하다.

    protocol Vehicle {
    	var speed: Double { get set }
       var manufacturer: String { get }
    }
    
    class Car: Vehicle {
    	var speed: Double = 0.0
       var manufacturer: String = "Toyota"
    }
    
    class Bicycle: Vehicle {
    	var speed: Double = 0.0
       var manufacturer: String { return "Giant" }
    }
    
    let car = Car()
    car.speed = 60.0
    print(car.speed)
    print(car.manufacturer)
    
    let bike = Bicycle()
    bike.speed = 20.0
    print(bike.speed)
    print(bike.manufacturer)
    
    // 프로토콜의 다중상속
    protocol Coordination {
    	var top: String { get set }
       var pants: String { get set }
       
       init(top: String, pants: String) 
       
       func checkCoordination()
    }
    
    protocol Hair {
    	var hair: String { get }
       
       func checkHairStyle()
    }
    
    struct Person: Coordination, Hair {
    	var top: String
       var pants: String
       let hair: String = "포마드"
       
       func checkHairStyle() {
       	print("오늘의 헤어스타일은 \(hair)스타일")
       }
       
       func checkCoordination() {
       	print("상의: \(top) 하의: \(pants)")
       }
       
       init(top: String, pants: String) {
       	self.top = top
           self.pants = pants
       }
    }
    
    let safari: Person = Person(top: "긴팔", pants: "반바지")
    safari.checkHairStyle()
    safari.checkCoordination()

0개의 댓글