
Solidity 언어에는 Modifier라는것이 있다.
Modifier는 함수의 동작을 변경시키기 위해 사용된다. 이 말의 의미는 Modifier를 사용하면 함수를 실행시키기 전과 실행시킨 후에 특정한 기능을 할 수 있도록 만들 수가 있다는 것이다.
Modifier를 사용하면 사전에 어떤 조건에 부합되는지 확인이 가능하다. Modifier는 스마트컨트랙트의 상속이 가능, overriding 해서 사용이 가능하다. 예를들면, 함수를 실행시키기 전에, 스마트컨트랙트를 배포한 사람의 계정과 동일한 계정인지를 확인 할 수도 있다.
pragma solidity ^0.5.7;
contract joker {
uint public data = 0;
modifier check {
data ++;
_;
}
function getWithCheck() check public {
...
}
}
Modifier를 작성할때 ""를 사용하게 된다. ""는 함수 실행하는 시점을 나타내는 것이다.
함수를 실행시키기 위해 행동을 제한하려는 어떤 코드를 추가하기 원한다면 modifier안에 "_"를 기준으로 작성하면 된다.
pragma solidity ^0.5.7;
contract joker {
uint public mutex = 0;
uint public exeCnt = 0;
modifier check {
mutex ++;
_;
mutex --;
}
function getWithCheck() check public {
if(mutex == 1) exeCnt = exeCnt + 1;
}
}
...
getWithCheck 함수가 check modifier를 사용하고 있다. 이 함수가 호출될 때, 함수와 modifier의 처리는 "_"를 기준으로 아래 그림처럼 동작한다.

check는 함수를 호출시키기 전에 mutex 값을 1 증가 시키고, 호출 완료된 후에는 mutex 값을 1 감소시키는 modifier이다.
modifier를 사용하지 않고, 함수 하나를 추가해서 동일한 처리를 할 수 있지만 modifier의 처리과정을 보기 위해 작성했다.
solidity version 0.4.0 이상
_; (underscore + semicolon)
solidity version 0.4.0 이전
_ (underscore)