이더리움 기반 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 키워드를 붙여 사용하게 됩니다.
🚀️ 도움이 되셨다면 구독과 좋아요 부탁드립니다 👍️
'Blockchain' 카테고리의 다른 글
2023년 블록체인에 집중해야 하는 이유 (3) | 2022.12.19 |
---|---|
[Dex PJ] #1 프로젝트 시작 (0) | 2022.10.28 |
[블록체인 만들기 #6] P2P 네트워크 (0) | 2022.10.12 |
[블록체인 만들기 #5] PoW 합의 알고리즘 (1) | 2022.10.11 |
[블록체인 만들기 #4] Chain 만들기 (0) | 2022.10.10 |
댓글