잘못된 내용이나, 추가되면 좋은 내용이 있으면 언제든지 수정 부탁드립니다.
private
컨트랙트 내부의 다른 함수에서만 호출될 수 있다.
internal
private과 비슷하나, 해당 컨트랙트를 상속하는 컨트랙트에서도 호출될 수 있다.
external
컨트랙트 외부에서만 호출될 수 있다.
public
함수 내/외부 어디서든 호출될 수 있다.
view
함수가 데이터를 보기만 하고 변경하지 않는다는 뜻.
pure
함수가 앱에서 어떤 데이터도 접근하지 않는다는 뜻.
함수의 동작을 변경시키기 위해 사용된다.
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) {}
}
함수 호출을 통해 이더리움을 받을 수 있는 특수한 함수 유형을 정의한다.
함수가 실행되는 동시에 컨트랙트 계정(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);
}
}