Solidity 솔리디티 강좌 11강 : 상속과 오버라이딩

flowing1ife·2023년 7월 7일
0

[ Solidity 깨부수기 ]

목록 보기
11/29
post-thumbnail

Solidity 솔리디티 강좌 11강 : 상속과 오버라이딩
이번엔 solidity의 상속과 오버라이딩에 대해 알아보도록 하자.


상속과 오버라이딩

📌 Solidity

Overriding은 즉 덮어씌우기와 같다.

// 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) public {
        givenName = _givenName;
    }

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

    function getGivenName() view public returns(string memory){
        return givenName;
    }
    function getMoney() view virtual public returns(uint256){
        return money;
    }
}

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

}

Father 컨트랙트는 각각 "Kim", "Jung", 100의 값을 지닌 familyName, givenName, money 변수를 선언하였다. 또한 생성자로 givenName이 있으며, 각각 familyName, givenName, money를 return하는 getFamilyName, getGivenName, getMoney 함수가 존재한다.

Son 컨트랙트는 생성자를 James로 초기화하고 있다. 함수 work의 경우, 일을 할 때마다 수입이 100씩 늘어나는 것을 구현하였다.

Father 컨트랙트를 상속 받은 Son 컨트랙트의 getMoney 함수는 Father 컨트랙트의 getMoney 함수를 overriding 하였다. Father 컨트랙트의 return 값moneySon 컨트랙트에서 money+earning으로 덮어씌워졌기 때문이다. 이처럼 overriding 되는 함수에는 virtual을, overriding 하는 함수는 override를 위와 같이 붙여준다.

👉 결과

-- work 호출 후 →

work 호출 전에는 earning의 값이 0이었기 때문에 money의 초기값인 100을, 호출 후에는 earning의 값이 100으로 늘었기 때문에 100+100 값인 200을 return 한다.

📍 constructor 지정 방법

contract Son is Father("James"){
   
   ...

}

지금까지 consrtuctor를 이렇게 지정해 왔는데

contract Son is Father{
   //이렇게 constructor 지정도 가능 
   constructor() Father("James"){

   }
   
    ...

}

위와 같은 방법도 가능하다.


출처 및 참고 자료

profile
👩🏻‍💻 Backend Engineer, Contract Developer

0개의 댓글