public
- 누구나 접근할 수 있다.
- 컨트랙트 내의 다른 함수, 외부 컨트랙트 또는 계정이 호출할 수 있다.
* 특징
- 상태 변수에 적용하면, 자동으로 getter 함수가 생성된다.
- 함수는 컨트랙트 내부와 외부에서 호출할 수 있다.
uint public totalSupply; // 상태변수는 자동으로 getter를 생성한다.
function myFunction() public{
// 누구나 호출 가능한 함수이다.
}
private
- 오직 컨트랙트 내에서만 접근할 수 있다.
- 상속받은 자식 컨트랙트도 접근할 수 없다.
* 특징
- 다른 컨트랙트나 외부 계정에서 호출할 수 없다.
- 해당 컨트랙트 내에서만 접근 가능하다.
uint private _totalSupply; // 이 컨트랙트 내에서만 접근 가능하다.
function myFunction() private{
// 이 컨트랙트 내에서만 호출 가능하다.
}
internal
- 같은 컨트랙트나 상속받은 자식 컨트랙트에서만 접근할 수 있다.
* 특징
- private와 달리, 자식 컨트랙트에서도 접근 가능하다.
uint internal totalSupply; // 이 컨트랙트 및 상속받은 컨트랙트에서 접근 가능하다.
function myFunction() internal {
// 이 컨트랙트 및 상속 받은 컨트랙트에서 호출 가능하다.
}
external
- 오직 외부에서만 접근할 수 있다.
- 컨트랙트 내부에서 직접 호출할 수 없다.
* 특징
- 컨트랙트 외부에서만 호출할 수 있다.
- 내부에서 호출하려면 this.myFunction()과 같은 방식으로 호출해야 한다.
function myFunction() external{
// 컨트랙트 외부에서만 호출 가능
}