728x90

이 글은 인프런 "솔리디티 깨부수기" 상속4, 5 강의를 수강한 후 정리한 글입니다. 

 

[지금 무료] 솔리디티 깨부수기 | D_One - 인프런

D_One | 이 강의를 통해서, 스마트 컨트랙 제작을 위한 솔리디티 언어를 배울수 있습니다., 코딩이 처음인 분들도 OK! 처음 배우는 솔리디티, 쉽게 시작해보세요. 강의 주제 📖 [사진] 이 강의에서

www.inflearn.com


super

super 은 함수를 오버라이딩 할 때 사용하며 super을 통해 원래 함수를 가지게 된다. 

아래 예제를 통하여 설명하도록 하겠다. 부자관계의 스마트 컨트렉이 있고, Son 컨트랙은 father 컨트랙 안에 who 함수를 상속받아 오버라이딩한다. 

// SPDX-License-Identifier:GPL-30
pragma solidity >= 0.7.0 < 0.9.0;

contract Father {
    event FatherName(string name);
    function who() public virtual{
        emit FatherName("KimDaeho");
    }
}


contract Son is Father{
    event sonName(string name);
    function who() public override{
        emit FatherName("KimDaeho");
        emit sonName("KimJin");
    }
}

 

Son 컨트랙은 , 아버지의 FatherName 이벤트를 그대로 유지하고, 자신의 sonName 이벤트를 추가했다. 만약, Son 컨트랙 부분의 오러라이딩한 함수 who 안에 여러줄의 코드를 써야한다면, 매우 번거로워 진다. 

 

이때 사용할 수 있는것이  super 으로 상속받을 함수를 그자체로 가져온다. 

 

// SPDX-License-Identifier:GPL-30
pragma solidity >= 0.7.0 < 0.9.0;

contract Father {
    event FatherName(string name);
    function who() public virtual{
        emit FatherName("KimDaeho");
    }
}

contract Mother {
    event MotherName(string name);
    function who() public virtual{
        emit MotherName("leeSol");
    }
}

contract Son is Father{
    event sonName(string name);
    function who() public override{
        super.who();
        emit sonName("KimJin");
    }
}

 

 


상속의 순서

 

상속의 순서를 통하여 super가 어떻게 작동하는지에 대해서 알아보겠다. 

// SPDX-License-Identifier:GPL-30
pragma solidity >= 0.7.0 < 0.9.0;

contract Father {
    event FatherName(string name);
    function who() public virtual{
        emit FatherName("KimDaeho");
    }
}

contract Mother {
    event MotherName(string name);
    function who() public virtual{
        emit MotherName("leeSol");
    }
}

contract Son is Father, Mother{
    
    function who() public override(Father,Mother){
        super.who();
    }
}

 

예시로 가족 관계의 스마트 컨트랙을 작성하고, Son 컨트랙은 Father 와 Mother를 상속 받는다.  각각 father와 mother은 동일하게 who 함수가 있고, 오버라이딩하여 super을 통해 son 컨트랙에 가져온다.

위에서 super를 사용하여 who 함수를 상속받을 때 어떤 스마트 컨트랙의 함수를 상속 받을까?

 

Mother의 것이 상속되어서 leeSol 이 반환된다.

이유는 Son is Father , Mother 이기 때문에 즉 Mother 두번째 (최신) 으로 상속 받았기에 그렇다.

 

+ Recent posts