솔리디티에서 함수는 기본적으로 public으로 선언됨.
즉, 누구나 (혹은 다른 컨트랙트) 컨트랙트의 함수를 호출하고 코드를 실행할 수 있음.
이는 컨트랙트를 공격에 취약하게 만들 수 있음.
그래서 기본적으로 함수를 private로 선언하고 공개할 만한 함수만 public으로 선언
uint[] numbers;
function _addToArray(uint _number) private {
numbers.push(_number);
}
private는 컨트랙트 내의 다른 함수들만이 이 함수를 호출하여 numbers 배열로 무언가를 추가할 수 있다는 것을 의미.
(함수 인자명과 마찬가지로 private 함수명도 언더바(_)로 시작하는 것이 관례)
Internal과 External
public과 private 이외에도 솔리디티에는 internal과 external이라는 함수 접근 제어자가 있다.
internal은 함수가 정의된 컨트랙트를 상속하는 컨트랙트에서도 접근이 가능하다 점을 제외하면 private과 동일.
external은 함수가 컨트랙트 바깥에서만 호출될 수 있고 컨트랙트 내의 다른 함수에 의해 호출될 수 없다는 점을 제외하면 public과 동일.
interal이나 external 함수를 선언하는 건 private과 public 함수를 선언하는 구문과 동일
contract Sandwich {
uint private sandwichesEaten = 0;
function eat() internal {
sandwichesEaten++;
}
}
contract BLT is Sandwich {
uint private baconSandwichesEaten = 0;
function eatWithBacon() public returns (string) {
baconSandwichesEaten++;
// eat 함수가 internal로 선언되었기 때문에 여기서 호출이 가능하다
eat();
}
}
' :D > block chain' 카테고리의 다른 글
[Solidity] Keccak256과 형 변환 (0) | 2022.02.15 |
---|---|
[Solidity] 함수의 반환값과 함수 제어자 (0) | 2022.02.15 |
[Solidity] 구조체와 배열 활용 (0) | 2022.02.15 |
[Solidity] 언어 기본 문법 2 (구조체, 배열, 함수) (0) | 2022.02.15 |
[Solidity] 언어 기본 문법 1 (contract 생성, 변수 저장, 연산) (0) | 2022.02.15 |