Swift 기초부터 차근차근! (4)

Burkey·2022년 1월 20일
0

차근차근 Swift

목록 보기
4/15

이전 내용에 class 특징 상속에 대하여 좀 더 자세한 정리를 해보려고 합니다.

상속

class Cutter {
    var shape : String = "circle";
    
     func baking(){
        print(shape,"cookie = ...🍪");
    }
}

class Cookie1 : Cutter {
    var dough : String = "flour";
     
}


var cookie1 = Cookie1();
cookie1.baking();//circle cookie = ...🍪

위에 코드는 간단한 상속의 모습을 보이고 있습니다.
cookie1은 Cutter를 상속받아 부모 클래스(Cutter)에 접근하여 선언된 변수와 메소드를 불러오는 것을 확인할 수 있습니다.

super

위와 같은 경우에는 부모 클래스안에 변수의 값이 선언 될 때 지정이 되어있어서 init을 사용하지 않았지만, 만약 부모 클래스안에서 init의 파라미터를 이용해서 부모 클래스의 변수를 초기화 해야 하는 경우가 있습니다.
이러한 경우는 자식 클래스가 부모 클래스에 접근 할 수 있도록 해주는 super메소드를 사용해줘야 합니다.

class Cutter {
    var shape : String;
    
    init(s : String){
        shape = s;
    }
    
    func baking(){
        print(shape,"cookie = ...🍪");
    }
}

class Cookie1 : Cutter {
    var dough : String;
    
    init(dough d : String,shape ss : String){
        dough = d;
        super.init(s: ss);
    }

}


var cookie1 = Cookie1(dough : "flour",shape :"circle");
cookie1.baking();//circle cookie = ...🍪

super.init을 사용하여 자식 클래스 초기화에서 부모의 클래스의 init을 접근할 수 있습니다.
위와 같은 방식으로 부모 클래스의 메소드에 호출 할 때에도 super를 이용하여 호출합니다.

class Cutter {
    var shape : String;
    
    init(s : String){
        shape = s;
    }
    
    func baking(){
        print(shape,"cookie = ...🍪");
    }
}

class Cookie1 : Cutter {
    var dough : String;
    
    init(dough d : String,shape ss : String){
        dough = d;
        super.init(s: ss);
    }
    
    func bakingClass() {
        super.baking();
        print(shape, "+" , dough, "= ...🍪")
    }

}


var cookie1 = Cookie1(dough : "flour",shape :"circle");
cookie1.bakingClass();
//circle cookie = ...🍪
//circle + flour = ...🍪

override

super을 이용하여 부모 클래스를 호출하는 것 말고도 부모 클래스에서 선언된 메소드의 기능을 바식 클래스에서 재정의 할 수 있는 기능도 있습니다.

class Cutter {
    var shape : String;
    
    init(s : String){
        shape = s;
    }
    
    func baking(){
        print(shape,"cookie = ...🍪");
    }
}

class Cookie1 : Cutter {
    var dough : String;
    
    init(dough d : String,shape ss : String){
        dough = d;
        super.init(s: ss);
    }
    
    override func baking() {
        print(shape, "+" , dough, "= ...🍪")
    }

}


var cookie1 = Cookie1(dough : "flour",shape :"circle");
cookie1.baking();//circle + flour = ...🍪

이와 같이 상속을 할 때 사용할 수있는 기능들에 대해서 알아봤습니다.
다음에는 프로토콜에 대해 알아볼까 하면서 오늘은 이만...

profile
스탯 올리는 중

0개의 댓글