VesselWheel

protocol 본문

Xcode Study

protocol

JasonYang 2023. 10. 19. 13:15

ex08.playground.zip
0.02MB

import UIKit

 

/*

 protocol

 가상함수 : 선언부만 있고 구현부(몸통:body) 가 없는 함수

 (cf.추상메소드)            본체

 특징 : 다중 상속이 가능함 여러 protocol을 한 번에 상속(확장)할 수 있음

 

 */

 

// property : get, set

protocol Talkable{

    var lang: String{get} //  읽기

    var topic: String{get set} // 읽고 씀

    // 가상함수: 선언부만 있고 body가 없는 함수

    func talk()

}

protocol Runnable{

    func run()

}

//  Person은 두 개의 protocol을 다중상속하고 있음

struct Person: Talkable, Runnable{

    var lang: String // property 를 준수해야 함

    var topic: String // property 를 준수해야 함

    func talk(){

        print("말을 합니다")

    }

    func run(){

        print("달립니다")

    }

}

 

var p1: Person = Person(lang:"Swift", topic:"포트폴리오제작")

p1.talk()

p1.run()

 

 

// overloading

// 같은 클래스 내에서 메소드 이름이 같은 경우,

// 매개변수를 다르게 해서 중복 오류가 일어나지 않도록 함

 

// overriding

// 상속 관계에 있을 때

// 부모클래스로부터 물려받은 자식클래스에 있는 메소드의

// 구현부를 자식클래스에 맞는 형태로 변경하는 것 (재정의)

// 자식클래스의 메소드의 선언부를 부모클래스에 있는

// 메소드의 선언부와 똑같이 함

 

// overloading

class ParentA{

    func displayName(name: String){

        print("parent name : \(name)")

    }

    func displayName(name: String, age: Int){

        print("parent name : \(name)")

        print("parent age  : \(age)")

    }

    

}

var pA: ParentA = ParentA()

pA.displayName(name: "장보고")

pA.displayName(name: "윤봉길", age:30)

 

class ChildA: ParentA{

    // method overriding : 메소드 재정의(body)

    override func displayName(name: String){

        print("child name : \(name)")

    }

}

var chA: ChildA = ChildA()

chA.displayName(name: "장보고")

chA.displayName(name: "윤봉길", age:30)

 

 

class GrandChildA: ChildA{

    override func displayName(name: String, age: Int){

        print(" 손자 name : \(name)")

        print(" 손자 age  : \(age)")

    }

}

var gchdA: GrandChildA = GrandChildA()

gchdA.displayName(name: "손자")

gchdA.displayName(name: "손자", age: 12)

 

 

 

 

 

 

 

 

 

 

 

 

'Xcode Study' 카테고리의 다른 글

형변환 : Type Casting(2)  (1) 2023.10.19
형변환 : (data) type casting  (1) 2023.10.19
Optional Chainnig ()  (0) 2023.10.19
구조체, 열거형, 클래스의 차이  (0) 2023.10.19
열거형 : Enum(Enumeration)  (0) 2023.10.19