728x90
이 글은 인프런 "솔리디티 깨부수기" 강의를 수강한 후 정리한 글입니다.
이번 주차에서는 두 개 이상의 스마트 컨트랙의 상송받는 경우, 어떻게 해야 하는지에 대해서 알아 보겠다.
// SPDX-License-Identifier:GPL-30
pragma solidity >= 0.7.0 < 0.9.0;
contract Father{
}
contract Mother{
}
contract Son{
}
위의 예제에서 Father, Mother, Son 컨트랙을 생성한 뒤에 아들 컨트랙은 아버지와 어머니 컨트랙에게 기능을 상속 받도록 구현한다.
// SPDX-License-Identifier:GPL-30
pragma solidity >= 0.7.0 < 0.9.0;
contract Father{
uint256 public fatherMoney = 100;
function getFatherName() public pure returns(string memory){
return "KimJung";
}
function getMoney() public view returns(uint256){
return fatherMoney;
}
}
contract Mother{
uint256 public motherMoney = 500;
function getMotherName() public pure returns(string memory){
return "Leesol";
}
function getMoney() public view returns(uint256){
return motherMoney;
}
}
contract Son is Father, Mother {
}
위에서 Father, Mother 컨트랙에 동일한 기능을 적용한 뒤에 두 컨트랙을 Son 컨트랙에 상속시킨다. 이때, getMoney()라는 같은 이름의 함수가 Father , Mother 컨트랙에 각각 들어 있어서 상속을 받는 경우 오류가 발생하게 된다.
즉 두 개 이상의 스마트 컨트랙을 상속받는 경우에, 동일한 함수를 가지고 있는 경우 오버라이딩을 해줘야 한다,
// SPDX-License-Identifier:GPL-30
pragma solidity >= 0.7.0 < 0.9.0;
contract Father{
uint256 public fatherMoney = 100;
function getFatherName() public pure returns(string memory){
return "KimJung";
}
function getMoney() public view virtual returns(uint256){
return fatherMoney;
}
}
contract Mother{
uint256 public motherMoney = 500;
function getMotherName() public pure returns(string memory){
return "Leesol";
}
function getMoney() public view virtual returns(uint256){
return motherMoney;
}
}
contract Son is Father, Mother {
function getMoney() public view override(Father,Mother) returns(uint256){
return fatherMoney+motherMoney;
}
}
동일한 함수인 getMoney()함수에 virtual을 작성한 뒤에 Son 컨트랙에 override를 해준다. 오버라이드를 한다면 override ( 중복이름의 함수를 가진 스마트 컨트랙 명시) 해줘야 한다.
son 컨트랙을 배포한 결과는 다음과 같으며, 아버지에게 100, 어머니에게 500을 받아서 getMoney 함수는 600을 리턴한다.
'자기개발 > 블록체인' 카테고리의 다른 글
[솔리디티 깨부수기] event2 - indexed (0) | 2024.06.04 |
---|---|
[솔리디티 깨부수기] event 정의 (0) | 2024.06.04 |
[솔리디티 깨부수기] overriding 오버라이딩 (0) | 2024.05.28 |
[솔리디티 깨부수기] 상속1 - 정의 (0) | 2024.05.21 |
[솔리디티 깨부수기] Instance - constructor (0) | 2024.05.21 |