반응형
  • public : 모든 곳에서 접근 가능
  • external : public 처럼 모든 곳에서 접근 가능하나, exteranal 이 정의된 자기 자신의 스마트컨트랙 접근 불가
  • private: 오직 private이 정의된 자기자신의 스마트컨트랙에서만 가능( private이 정의된 현재 이 컨트랙을 상속받은 자식 컨트랙도 접근불가)
  • interal : private 처럼 오직 internal이 정의된 자기 자신의 스마트컨트랙에서도 가능( internal이 정의된 현재 이 컨트랙을 상속받은 자식 컨트랙도 접근가능)

public private

a는 외부에서 조회할 수 있으므로 배포했을 때 a가 나타나는 것을 확인할 수 있고, a2는 private이기 때문에 외부에서 조회할 수 없어 값을 읽을 수 없다.

 

public이기 때문에 모든 곳에서 접근이 가능하고, Public_example을 사용하기 위해서는 인스턴스화를 시켜야 한다.

따라서 24번째 줄에 정의된 것을 볼 수 있다.

 

배포를 한 후에 CONTRACT를 보면 3개의 컨트랙이 있다는 것을 확인할 수 있다.

우리는 Public_example_2를 이용해서 Public_example에 접근할 것이기 때문에 Public_example_2를 선택하여 배포한다.

 

changeA_2에 10을 넣으면 당연히 10이 리턴된다.

 

private로 변경하면 접근을 할 수 없어서 오류가 나는 것을 확인할 수 있다.

 

external

14, 17번 째줄을 external로 변경한다.

external은 외부에서만 호출할 수 있도록 함수를 제한했었다. Public_example_2 컨트랙의 changeA_2 함수에서 Public_example 컨트랙의 changeA 함수를 호출하는 것은 외부에서의 호출로 간주되어 접근이 가능하다.

 

12번째 줄을 external로 변경하면 external 키워드는 상태 변수 선언에 사용할 수 없기 때문에 오류가 발생한다.

 

internal

internal contract 같이 상속받은 컨트랙은 접근이 가능하다.

반응형

'PBL > 솔리디티' 카테고리의 다른 글

function 4 - String  (0) 2024.05.14
function 3 - View 와 Pure  (0) 2024.05.07
Function 1 - 정의  (0) 2024.04.30
Ether/GWei/wei 그리고 Gas  (0) 2024.04.30
data type  (1) 2024.04.15