공부하자

Solidity 기초 문법 - 상속 본문

Solidity

Solidity 기초 문법 - 상속

dev_riley 2022. 3. 22. 23:55

상속

스마트 컨트랙 사이의 상속은 변수와 함수들을 상속해줍니다.

상속하는 방법

상속 받을 컨트랙(Son) is 상속 해주는 컨트랙(Father) { ... }

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"){
    
}

위의 코드로 Son컨트랙이 Father 컨트랙을 상속받는 것을 알 수 있습니다.

또한 Father컨트랙에 constructor가 존재하면 Son컨트랙에 파라미터를 주어 상속받는 함수와 다르게 변수값을 변경할 수 있습니다.

overriding(오버라이딩)

상속받은 함수를 다르게 변경하고 싶을 때 사용합니다.

상속해주는 Father 컨트랙에서 오버라이딩 할 함수에(getMoney()) virtual을 명시해 Son 컨트랙에서 이 함수를 오버라이딩 할 것이라고 알려주어야 합니다.

상속받는 Son 컨트랙에서는 override를 명시해주면 오버라이딩 준비 끝!

이제 Son 컨트랙에 getMoney()함수를 원하는 방향으로 변경해주면 됩니다.

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 virtual returns(uint256){
        return money;
    }  
}

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

2개 이상 상속하기

contract Father{

}
contract Mother{

}
contract Son is Father,Mother{

}

위 코드처럼 만들어주면 Son컨트랙이 Father컨트랙과 Mother컨트랙 둘 다 상속받는 것을 알 수 있습니다.

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;
    }
}

위의 코드를 보면 오버라이딩 할 때도, 오버라이딩 할 함수에 virtual을 명시해주고(Father와 Mother 컨트랙에 같은 이름의 함수가 존재해서 두 함수에 다 virtual을 넣어줌.) Son컨트랙에 override를 명시하고 괄호안에 Father와 Mother컨트랙을 넣어주면 됩니다.

 

도움 받은 곳 : https://dayone.tistory.com/

 

My Daily life

 

dayone.tistory.com

개인 공부를 위해 위의 강의를 정리한 내용입니다.

'Solidity' 카테고리의 다른 글

Solidity 기초 문법 - event  (0) 2022.04.01
Solidity 기초 문법 - instance  (0) 2022.03.17
Solidity 기초 문법 - function  (0) 2022.03.09
Solidity 기초 문법 - 변수만들기  (0) 2022.03.09
Comments