Solidity 솔리디티 강좌 11강 : 상속과 오버라이딩
이번엔 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 값money
가 Son
컨트랙트에서 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"){
}
...
}
위와 같은 방법도 가능하다.
출처 및 참고 자료