Solidity 문법 - (10) 상속과 오버라이딩

2023. 5. 30. 15:21BlockChain/Solidity 깨부수기 ( 유투브 강의 )

목차
1. 상속
2. 상속 예제 코드
3. 오버라이딩
4. 오버라이딩 예제 코드

 

1. 상속

 

 

한 컨트랙트에서 다른 컨트랙트에 있는 기능들을 사용할 수 있는 기능이다.

 

자바스크립트의 상속과 비슷하다.

 

상속을 받는  방식은 다음과 같다.

 

contract [상속받을 컨트랙트명(자식)] is [상속할 컨트랙트명(부모)] {
    // 코드 작성
}

 

만약 상속할 컨트랙트에 생성자 함수가 있다면 다음과 같이 사용해야한다.

 

contract [상속받을 컨트랙트명] is [상속할 컨트랙트명]("생성자 인수") {

}

// 또는

contract [상속받을 컨트랙트명] is [상속할 컨트랙트명] {
    constructor() [상속할 컨트랙트명]("생성자 인수"){

    }
}

 

 

2. 상속 예제 코드

 

 

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

contract Bird {
    uint256 public wings = 2;
    uint256 public legs = 2;
    string public eat;

    constructor(string memory _eat){
        eat = _eat;
    }

    function getWingsNum() view public returns(uint256){
        return wings;
    }

    function getLegsNum() view public returns(uint256){
        return legs;
    }
    
    function getNmae() view public returns(string memory){
        return eat;
    }
}

contract Eagle is Bird("Snake") {

}

 

위의 코드를 컴파일하여 배포한 뒤 Eagle의 인스턴스를 확인해보면 Bird 컨트랙트의 내용이 잘 나오는 것을 알 수 있고,

 

생성자에 넣어준 "Snake"도 eat( )을 실행하면 잘 나오는 것을 볼 수 있다.

 

 

 

3. 오버라이딩

 

상속받은 함수를 변형시켜 사용할 수 있는 기능이다.

 

같은 이름의 함수를 받아서 새로 커스텀해서 사용할 수 있다.

 

타입스크립트나 자바스크립트에서 사용했던 추상 클래스를 구현한 것과 비슷하다.

 

문법은 내보낼 부모 컨트랙트의 오버라이드시킬 함수에 virtual 키워드를 적어주고,

 

자식 컨트랙트의 오버라이드할 함수에 overide 키워드를 적어주면된다.

 

 

 

4. 오버라이딩 예제코드

 

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;

contract Bird {
    uint256 public wings = 2;
    uint256 public legs = 2;
    string public eat;

    constructor(string memory _eat){
        eat = _eat;
    }

    function getWingsNum() view virtual public returns(uint256){
        return wings;
    }

    function getLegsNum() view public returns(uint256){
        return legs;
    }
    
    function getNmae() view public returns(string memory){
        return eat;
    }
}

contract Penguin is Bird("Fish") {

    function getWingsNum() view override public returns(uint256){
        return wings - 2;
    }
}

 

위의 코드는 Penguin 컨트랙트에서 날개를 상속받아서 로직을 변경한 코드이다.

 

wings가 2 - 2 = 0이 잘 출력되는것을 알 수 있다.