작성
·
350
1
function balance1(address _a) public view returns (uint256) {
return _a.balance;
}
function fun1(uint256 _a) public pure returns (uint256) {
if (_a == 3) {
return 555;
}
return 111;
}
안녕하세요 여기 두개 함수에서 둘다 외부에서 _a를 받아오는것으로 보이는데 왜 위에는 view를 쓰고
밑에는 pure 를 쓰는건지 잘 모르겠습니다.
답변 1
0
안녕하세요 제원님 :)
function balance1(address _a) public view returns (uint256) {
return _a.balance;
}
function fun1(uint256 _a) public pure returns (uint256) {
if (_a == 3) {
return 555;
}
return 111;
}
두함수를 보시면, balance1(address _a)와 fun1(uint256 _a) 이렇게 되어있죠,
즉 변수 _a는 함수의 파라메터에 최초로 정의된 것 알 수가 있습니다.
변수 _a가 파라메터로 정의됬다는 뜻은 함수 내부에서만 사용이 가능한 로컬변수 라고 생각할 수 있습니다. 즉 _a를 함수 밖으로 가져가서 사용하지 못 하겠죠
자 그러면, pure와 view는 무엇일까요 ?
pure와 view는 데이터를 저장하지 않을 때 사용되는 모디파이어 입니다.
두 함수에서 볼 수 있듯이, 함수 밖의 변수에 데이터를 따로 저장하지 않고 있죠?
자 그러면 pure와 view의 차이점은 무엇일까요?
일단 balance1(address _a)의 view 부터 보겠습니다.
view 는 함수의 밖에 있는 데이터 값을 읽어 올 때 사용합니다.
_a 는 함수 내부에 정의된 로컬변수 인데, 어떻게 외부의 값을 읽어와서 view라고 표시한걸까요?
_a는 주소형 타입 address 인것을 알 수 있습니다.
주소형 타입의 경우 멤버변수로 balance를 조회할 수 있습니다.
(balance는 현재 사용중인 블록체인의 메인 코인의 잔액을 나타냅니다)
즉, _a는 로컬 변수지만, 주소형이기에, 멤버변수인 balance라는것을 조회하기에 view를 쓴것을 알 수 있습니다.
이와 반대로,
fun1(uint256 _a)의 pure는 uint인 정수형 타입이며, 밖에서 읽어 들여오는게 없죠
그렇기 때문에 pure를 사용한것을 알 수 있습니다.
정리하자면,
pure와 view는 함수 밖의 변수의 데이터를 저장하지 않을 때, 함수에 적용한다.
view는 함수 밖의 변수의 데이터를 저장하지 않을 때, 함수 밖의 변수의 값을 읽어 올 때, 함수에 적용한다.
pure는 함수 밖의 변수의 데이터를 저장하지 않을 때, 함수 밖의 변수의 값을 읽어 오지않을 때 함수에. 적용한다.
감사합니다 :)