728x90

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

 

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

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

www.inflearn.com


상속

상속이란, 윗 사람이 죽으면, 그 죽은 사람의 재산 이나 권리를 아랫 사람에게 주는것으로 스마트 컨트랙 내에서도 상속이 이루어진다. 

스마트 컨트랙 사이의 상속은 재산이나 권리를 주는것이 아닌, 변수와 함수들을 상속 해준다.

 

예제 코드를 작성하자면,  Father 과 Son 두개의 부자관계의 컨트랙을 생성하고 Father 컨트랙에 기능을 구현 후, 아들이 아버지의 기능을 상속받도록 구현하였다. 

contract Father{
    string public familyName = "Kim";
    string public givenName = "Jung";
    uint256 public money = 100; 
    
    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;
    }
    

}

현재 아버지 컨트랙에는 3개의 변수 3개의 함수가 있으며, familyName 과 givenName, money 3개의 변수를 정의한다. 

성은 kim 이름은 Jung 이며 money는 아버지의 재산이라고 가정하고,  100 이라는 값을 입력한다. 

 

나머지 3 개의 함수들은 각각 3개의 변수 성 familyName, 이름 givenName, 재산 money 를 리턴한다. 

 

이후 아들 컨트랙에서 아버지 컨트랙에서 정의한 3개의 변수와 함수를 상속 받아서, 해당 함수들과 변수들을 접근하려고 한다. 

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

 

상속하는 방법은 간단하다. 상속해야할 입장의 컨트랙에서 상속해야할 컨트랙을 작성하면 된다. 

 

상속 받을 컨트랙 is 상속 주는 스마트 컨트랙 {

       //....

}

 

위의 예제와 같이 코드를 작성하면 아들 컨트랙을 배포했을 때, 아버지 컨트랙의 함수들과 변수들에 접근할 수 있다. 

 

 

 

그렇다면 아버지 컨트랙에 constructor가 있다면 constructor까지 상속을 해야하는지에 대해서 알아보고자 한다. 

 

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

}

위의 예제에서 아버지 컨트랙을 보면 constructor 가 정의되었으며, givenName을 변경할 수 있다.

이는 아들이 아버지의 것을 상속받는다했을 때, 성은 동일하지만 이름은 다르기 때문에 constructor을 통해서 이름을 다르게 지정할 수 있도록 할 수 있다. 

 

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

}

위에 예제와 같이 파라미터 값으로 아들의 이름을 입력 받을 수 있다. 

 

 

아들 컨트랙을 배포하면  givenName이 아버지의 이름 Jung 이 아닌 James임 을 알수가 있다.

+ Recent posts