728x90

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

 

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

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

www.inflearn.com


이번 주차에서는 두 개 이상의 스마트 컨트랙의 상송받는 경우, 어떻게 해야 하는지에 대해서 알아 보겠다.

// 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을 리턴한다. 

+ Recent posts