본문 바로가기

기술/BlockChain

[Solidity] Solidity 에서 Modifier와 _;의 기능

Solidity 개발을 공부하다보면 오픈소스들에 Modifier라는 생소한 문법이 보인다.

그리고 Modifier 구역을 보면 _; 라는 문장이 보이는데, 나는 이것이 뭘 뜻할지 상상이 안갔다.


열심히 공부해본 결과 Modifier는 말 그대로 모듈처럼 동기화 시키는 듯한 문법이다.

예를들어 어떤 컨트랙트에서 함수를 선언하고 그 함수가 현재 컨트랙트를 실행시킨 user만 사용가능하게 하고 싶다면,


1
2
3
4
5
6
7
8
modifier onlyOwner{
    if(msg.sender != owner) throw;
    _; <=== 여기에 original code가 들어간다.
}
 
function setContractInformation(string info) onlyOwner{
    contractInformation = info;
}
cs


이렇게 사용할 수 있다. 

modifier를 사용하지 않는다면 함수 첫머리에 if 조건문으로 걸어놓긴 하면 되지만,

이렇게 modifier를 사용하면 코드도 간결하고 유지보수도 쉽고 

function에 onlyOwner가 있느냐 없느냐에 따라서

쉽게 제한사항을 파악할 수 있기 때문에 가독성도 향상된다.


위 코드는 아래처럼 해석될 수 있겠다.

1
2
3
4
function setContractInformation(string info) onlyOwner{
    if(msg.sender != owner) throw;
    contractInformation = info;
}
cs


_; 는 본문코드의 시작을 알리는 문장으로 해석하면 되겠다.