Solidity 문법 - (12) 상속의 순서와 super

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

목차
1. 상속의 순서
2. super
3. 예제코드

 

1. 상속의 순서

 

 

솔리디티에서는 상속을 할 때 복수의 컨트랙트를 상속 할  수가 있다.

 

복수의 컨트랙트를 상속할 때는 어려울 것 없이,

 

상속 키워드인 is 뒤에 연속해서 적어주면 상속이 된다.

 

상속에는 순서가 있는데,

 

만약 복수의 컨트랙트에서 같은 함수를 내보내 상속받은 컨트랙트가 오버라이딩할 경우에

 

어떤 컨트랙트를 오버라이딩 하는지 알아야 하는데,

 

이를 알아보기 전에 super에 대해서 먼저 알고 예제 코드를 보도록하자.

 

 

 

2. super

 

super는 컨트랙트가 부모 컨트랙트의 함수를 오버라이딩할 때,

 

함수의 로직이 길어서 다시 똑같이 쓰는 비효울적인 일을 해소해준다.

 

사용방법은 다음과 같다.

 

super.[함수명](  );

 

위의 메서드를 사용하게 되면 기존 함수의 내용들을 전부 적지 않아도 가져온 것 처럼 사용이 가능하다.

 

같은 함수명을 가진 컨트랙트 두 가지를 상속받아 사용할 경우에는

 

마지막에 있는 컨트랙트에게 super가 적용된다.

 

마지막에 있는 상속이 가장 최신의 상속이기 때문이다.

 

 

 

3. 예제코드

 

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

contract Bird {
    event Wings(uint256 num);
    function getAnimal() public virtual {
        emit Wings(2);
    }
}

contract Mouse {
    event Legs(uint256 num);
    function getAnimal() public virtual {
        emit Legs(4);
    }
}

contract Bat is Bird, Mouse {
    function getAnimal() public override(Bird, Mouse) {
        super.getAnimal();
    }
}

 

remix IDE를 통해서 실행해보자.

 

 

배포를 진행하고 getAnimal을 실행했을 때, Mouse 컨트랙트의 내용을 가져와 이벤트에 저장되었다.

 

반대로 순서를 바꾸어보면,

 

 

logs에 Bird의 내용이 적혀있는 것을 볼 수 있다.