728x90
이 글은 인프런 "솔리디티 깨부수기" 상속4, 5 강의를 수강한 후 정리한 글입니다.
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 두번째 (최신) 으로 상속 받았기에 그렇다.
'자기개발 > 블록체인' 카테고리의 다른 글
[Blockchain A-Z:블록체인 만들기 완벽강의] 불변원장 및 분산 P2P 네트워크 (0) | 2024.07.13 |
---|---|
[Blockchain A-Z:블록체인 만들기 완벽강의] SHA256 Hash 알고리즘 (0) | 2024.07.13 |
[솔리디티 깨부수기] event2 - indexed (0) | 2024.06.04 |
[솔리디티 깨부수기] event 정의 (0) | 2024.06.04 |
[솔리디티 깨부수기] 두 개 이상 상속하기 (0) | 2024.05.28 |