반응형
- 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 |