본문 바로가기
Blockchain

Solidity virtual function(가상 함수)란?

by 개발자 염상진 2022. 11. 29.

 

 

이더리움 기반 ERC20 토큰을 발행할 때 Interface Contract를 작성한 후 토큰 발행 컨트랙트를 작성하게 됩니다. 이 때 흔히 볼 수 있는 solidity keyword가 바로 virtual 입니다. virtual은 무슨 의미일까요?

 

 

 

 

virtual override

 

예를 들어서 ERC20토큰을 발행하는 컨트랙트가 아래와 같이 있습니다. 먼저 실제 구현을 하지 않고 함수만 추상화 시켜 놓은 interface contract를 작성합니다. 

💡 Interface

Solidity에서 Interface는 추상 계약(Abstract Contract)와 유사하지만 모든 함수가 추상화 되어 있다는 특징이 있습니다. Interface 특징은 다음과 같습니다.

1) 다른 컨트랙트를 상속받을 수 없습니다.
2) 모든 함수는 external(외부에서만 접근 가능)해야 합니다.
3) Interface는 constructor가 없습니다.
4) Interface는 state variable를 가질 수 없습니다.
5) Interface는 modifier를 가질 수 없습니다. 
interface IERC20{
    function totalSupply() external view returns(uint256);
}

 

그럼 컨트랙트에서는 이 함수를 실제 overriding 해서 사용해야 합니다. 

contract ERC20 is IERC20 {

    constructor(){
        //someting to do ...
    }
    
    function totalSupply() external virtual overriding{
        // something to do ...
    }
}

 

overriding 하고 있는 함수 형태를 보면 virtual overring 키워드를 달고 있습니다. 이 처럼 solidity에서는 Interface 혹은 abstract contract에서 추상화한 함수를 구현할 때(오버라이딩 할 때) virtual overriding 키워드를 사용해서 개발자들에게 명시적으로 알려줍니다.

 

 

 

virtual의 의미는 무엇인가요?

 

Solidity 는 OOP 언어입니다. 따라서 컨트랙트 단위로 작업 코드를 나누고 합치면서 규모가 큰 dApp을 빌드할 수 있습니다. 이 때 필요한 개념이 바로 상속입니다. 위 코드에서 살펴본 것과 같이 상속을 하는 과정에서 함수를 추상화 시키고 다른 개발자들이 작업을 할 때도 수월하게 알아볼 수 있도록 필요한 함수를 명시하게 됩니다.

 

Solidity 에서 virtual 키워드는 다른 컨트랙트에서 상속을 받을 때 overriding 될 수 있음을 의미합니다. 한 예로 Interface Contract에서 작성된 함수들은 기본적으로 virtual 속성을 담고 있게 됩니다. 그리고 실제 구현할 때도 virtual overriding 키워드를 붙여 사용하게 됩니다.

 

🚀️ 도움이 되셨다면 구독좋아요 부탁드립니다 👍️

 

 

 

댓글