잘못된 내용이나, 추가되면 좋은 내용이 있으면 언제든지 수정 부탁드립니다.

함수 제어자

접근 제어자

상태 제어자

사용자 정의 제어자 (modifier)

함수의 동작을 변경시키기 위해 사용된다.

modifier를 사용하면, 함수를 실행시키기 전과 실행시킨 후에 특정한 기능을 할 수 있도록 만들 수 있다.

contract foo {
	uint public count = 0;

	modifier check {
		count++;
		_; // 함수 실행 시점을 의미함.
		count--;
	}

	// modifier 적용
	// getCount()를 호출하면, 실행 전에 count++;을 실행하고,
	// 실행이 끝난 후 count--; 를 실행한다.
	function getCount() public check {}

	// 인자를 가질 수도 있음
	modifier isCountMorethanZero(uint _count) {
		require(_count > 0);
		_;
	}

	function counting() external isCountMorethanZero(1) {}
}

payable 제어자

함수 호출을 통해 이더리움을 받을 수 있는 특수한 함수 유형을 정의한다.

함수가 실행되는 동시에 컨트랙트 계정(CA)에 돈을 지불할 수 있다.

/*
	예제코드 시나리오
	사용자가 buySomething() 함수를 호출하면,
  0.001 ether를 지불하고, 아이템을 지급받는다.
*/

contract OnlineStore {
	function buySomething() exteranl payable {
		// 함수를 실행했을 때, 0.001 ether 가 보내졌는지 확인하기 위한 코드
		require(msg.value == 0.001 ether);
		// 0.001 ether가 정상적으로 보내졌다면, 아이템을 사용자에게 지급
		transferItem(msg.sender);
	}
}