상세 컨텐츠

본문 제목

솔리디티 강좌 15강 상속4 - super

솔리디티 깨부수기 - 기본

by D_One 2021. 9. 14. 15:25

본문

 

안녕하세요 

 

저희는 다시 한번 상속에 대해서 보려고 합니다.

 

요번에 상속에는 저희가 지난번 시간때 배운 이벤트를 접목해서 다뤄보려고 일부러 상속 부분을 뒤로 보냈습니다.

 

저희가 상속 시간때, 상속을 받아서 저희만의 함수로 변경 하거나, 그냥 상속만을 받았잖아요.

 

그렇다면,

 

// 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 컨트랙은 Father 컨트랙의 who를 상속받아 오버라이딩합니다.

Son 컨트랙은 , 아버지의 FatherName 이벤트를 그대로 유지하고, 자신의 sonName 이벤트를 추가 했습니다.

 

그러나, 만약, Son 컨트랙 부분의 오러라이딩한 함수 who 안에 단순히 FatherName 이벤트 한줄만 쓰는게 아니고, 여러줄의 코드를 써야한다면, 매우 번거롭고 어려워지겠죠.

 

그래서 그때 필요한게 super 입니다. 

super를 쓰면 그대로 Father 컨트랙의 이벤트를 들고 올 수 있어요

 

// 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.who() 는 Father 컨트랙의 who를 들고 온답니다.

 

영상 참고 부탁드립니다.

관련글 더보기