728x90

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

 

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

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

www.inflearn.com


 

오버라이딩(overriding)은 자식 컨트랙이 부모 컨트랙로부터 상속받은 함수를 오버라이드(override)하여, 상속받은 함수를 다르게 변경할 수 있으며, 즉 상속받은 함수를 덮어 씌울 수 있다. 

 

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

contract Father{
    string public familyName = "Kim";
    string public givenName = "Jung";
    uint256 public money = 100; 
    
    constructor(string memory _givenName) public {
        givenName = _givenName;
    }
    
    
    function getFamilyName() view public  returns(string memory){
        return familyName;
    } 
    
    function getGivenName() view public  returns(string memory){
        return givenName;
    } 
    
    function getMoney() view public returns(uint256){
        return money;
    }
    

}

contract Son is Father("James"){
    
}
    function getMoney() view  public virtual returns(uint256){
        return money;
    }

이전 강의에서 사용된 예제로 getMoney 함수에 오버라이딩할 함수에 virtual 을 명시해준다.

 

contract Son is Father("James"){
    
    uint256 public earning = 0;
    function work() public {
        earning += 100;
    }
    
     function getMoney() view  public override returns(uint256){
        return money+earning;
    }

}

아들 컨트랙이 아버지 컨트랙에게 돈 100 만원을 상속받는다고 가정하였을때, 아들이 그 100만원을 저금하고, 아들이 일을하면 월급을 또 저금 함으로써 아들돈이 증가 할 수 있는 경우를 위에와 같이 earning을 추가함으로서 결과를 출력할 수 있다. 

earning 변수는 Son 컨트랙이 일을 하였을 때 벌어 들이는 수입으로 work() 함수에서 earning 변수값을 100 씩 증가한다.

그리고 getMoeny 를 누르면 아버지에게 받은돈 moeny 와 아들이 번돈 earning 이 합쳐져서 아들의 재산을 보여준다. 

 

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

contract Father {
    string public familyName = "Kim";
    string public givenName = "Jung";
    uint256 public money = 100;

    constructor(string memory _givenName) {
        givenName = _givenName;
    }

    function getFamilyName() public view returns (string memory) {
        return familyName;
    }

    function getGivenName() public view returns (string memory) {
        return givenName;
    }

    function getMoney() public view virtual returns (uint256) {
        return money;
    }
}

contract Son is Father("James") {
    uint256 public earning = 0;

    function work() public {
        earning += 100;
    }

    function getMoney() public view override returns (uint256) {
        return money + earning;
    }
}

 

+ Recent posts