본문 바로가기
Solidity

[Solidity] internal vs private, external vs public

by smilemugi 2022. 12. 9.

internal

contract의 해당 내용을 비공개 한다는 의미이다.

contract 의 내부에서만 사용한다는 의미이다.

stage variable 은 기본이 internal  이다.

상속받은 contract 에서 사용할 수 있다.(protected 와 비슷)

 

private

contract의 해당 내용을 비공개 한다는 의미이다.

contract 의 내부에서만 사용한다는 의미이다.

상속받은 contract 에서 사용할 수 없다.

external

contract 의 interface 로 외부 공개

contract 의 외부에서 사용한다는 의미이다.

state variable 은 external 이 될 수 없다.

contract 내부에서 사용하려면 this 키워들를 이용해야 한다.

contract MyExample
{
   uint external value;  // 에러 발생
   
   function func1() external
   {
   }
   
   function func2() public
   {
      this.func1(); // external 함수는 this 키워드를 사용해야 한다.
      func1(); // 에러 발생
   }
}

public

contract 의 interface 로 외부 공개

contract 외부, 내부 모두 사용하는 interface 이다.

state variable public 이면 getter 함수가 자동 생성된다. 생성되는 이름은 stage variable 과 동일하다. contract 내부에서 사용할 경우 this 를 사용해야 한다.

contract MyExample
{
   uint public value;
   
   function func1() public
   {
      this.value(); // getter 호출
   }
   
   function func2() public
   {
      func1();
   }
}

 

'Solidity' 카테고리의 다른 글

[Solidity] 다른 contract 와 상호작용하기  (0) 2022.12.09
[Solidity] view 와 pure  (0) 2022.12.08