728x90
이 글은 인프런 "솔리디티 깨부수기" 강의를 수강한 후 정리한 글입니다.
오버라이딩(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;
}
}
'자기개발 > 블록체인' 카테고리의 다른 글
[솔리디티 깨부수기] event 정의 (0) | 2024.06.04 |
---|---|
[솔리디티 깨부수기] 두 개 이상 상속하기 (0) | 2024.05.28 |
[솔리디티 깨부수기] 상속1 - 정의 (0) | 2024.05.21 |
[솔리디티 깨부수기] Instance - constructor (0) | 2024.05.21 |
[솔리디티 깨부수기] instance 정의 (0) | 2024.05.10 |