솔리디티로 스마트 컨트렉트 작성 시, 아래와 같은 함수를 볼 수 있다. 내부에 작성된 코드는 생략하고 함수가 선언된 형식에 집중해보자. 여타 프로그래밍 언어와 유사한 부분이 있는 듯 하지만 선언문의 순서라던지 용어에서 차이점을 느낄 수 있을 것이다.
오늘 포스팅에서 집중해서 볼 부분은 스코프(Scope 혹은 Visibility)다. 아래 함수 예제 코드에서 확인할 수 있는 public, priavate, external, internal 등이 이에 해당한다.
// SPDX-License-Identifier: GPL-3.0
pragma solidity ^0.8.0;
contract Decalaration {
int public numA = 100;
int numB = 500;
function privateFn() private view returns(int) {
return numA;
}
function publicCallPrivateFn() public view returns(int) {
int testNum;
testNum = privateFn();
return testNum;
}
function internalFn() internal view returns(int) {
return numA;
}
function externalFn() external view returns(int) {
return numA;
}
}
스코프(Scope 혹은 Visiblitiy)란 변수(Variable) 혹은 함수(Function) 선언과 함께 붙는 옵션과 같은 개념으로 해당 변수(혹은 함수)가 사용 및 호출 될 때 어디까지 허용하는지 그 범위를 나타낸다. 단편적인 예시로 전역변수, 지역변수와 같은 개념이다.
솔리디티에서는 변수와 함수에 있어 사용범위 설정에 Public, Private, External, Internal 등 총 4개가 있다. 하나씩 알아보자.
Public
`public` 옵션이 붙은 변수와 함수는 컨트렉트 내부뿐만 아니라 외부에서도 호출이 가능하다. 컨트렉트 안에서 어떤 영역이든 사용이 가능하며, 그 값은 공유된다. 다음에 알아볼 컨트렉트 간 상속(Inheriance)에서도 동일하게 적용된다. 부모-자식의 관계가 성립된 컨트렉트들이 있다면, 부모에서 public 으로 선언된 변수와 함수는 자식에서도 사용될 수 있다.
추가적으로, 변수 선언에서 특정 스코프를 명시하지 않고 생력한다면 해당 변수는 자동으로 public 옵션을 부여받게 된다.
Private
`private`은 오직 내부에서만 사용되도록 제한한다. private 으로 선언된 변수나 함수는 오직 해당 컨트렉트 내부에서만 사용될 수 있다. 만약, private 값은 외부에서 호출하고 싶다면, private 값을 호출하는 내부 public 혹은 external 함수를 통해 우회해야 한다.
External
`external` 키워드는 오직 컨트렉트 외부에서 호출할 것임을 나타내는 옵션이다. 부모-자식 간의 상속(Inheritance) 혹은 인터페이스(Inferface)를 통해 컨트렉트를 구성할 때 사용된다.
Internal
`internal` 은 내부에서는 public 과 동일하지만, 외부 호출에서는 오직 상속(Inheritance) 관계에서만 허용된다. private 옵션에 상속이 허용된 정도이다.
'Programing > Solidity' 카테고리의 다른 글
[Solidity] fallback 함수 (0) | 2022.03.12 |
---|---|
[Solidity] 솔리디티 코드 연습 - 크립토 좀비 (1) | 2022.03.11 |
[Solidity] 함수 제어자 view & pure (0) | 2022.03.11 |
[Solidity] string memory와 bytes (0) | 2022.03.10 |
[Solidity] 이더리움 프로그래밍 코드 에디터 Remix IDE (0) | 2022.03.08 |
댓글