view 함수
view 함수는 상태 변수를 읽기만 하고 변경하지 않는 함수입니다. 블록체인에 저장된 데이터를 조회할 때 사용하며, 상태를 바꾸지 않겠다고 컴파일러에 약속하는 표시입니다.
그래서 외부에서 view 함수만 단독으로 호출할 때는 트랜잭션이 아닌 단순 조회(call)로 처리되어 가스가 들지 않습니다.
view 의 규칙
view 함수 안에서 상태 변수를 읽는 것은 자유롭지만, 쓰는 것은 금지됩니다. 값을 대입하는 순간 컴파일 오류가 납니다. 또한 상태를 바꾸는 다른 함수를 호출하거나, 이벤트를 발생시키거나, selfdestruct 를 호출하는 것도 허용되지 않습니다.
contract Counter {
uint256 public count = 10;
// count 를 읽기만 하므로 view 입니다.
function getCount() public view returns (uint256) {
return count;
}
}상태와의 관계에 따라 달라지는 키워드
함수가 상태를 어떻게 다루느냐에 따라 키워드가 달라집니다. 상태를 읽으면 view, 읽지도 쓰지도 않고 입력값만으로 계산하면 다음 강의에서 배울 pure, 상태를 변경하면 아무 키워드도 붙이지 않습니다.
block.timestamp, msg.sender 같은 전역 변수를 읽는 것도 "상태를 읽는" 것으로 간주되어 view 가 필요합니다.
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;
contract Counter {
uint256 public count = 10;
// 상태 변수 count 를 읽으므로 view
function getCount() public view returns (uint256) {
return count;
}
// count 와 입력값을 더해 보여주지만 여전히 읽기만 하므로 view
function countPlus(uint256 x) public view returns (uint256) {
return count + x;
}
}public 상태 변수에는 같은 이름의 view getter 가 자동으로 생성됩니다. 위 예시의 count 도
외부에서 count() 로 조회할 수 있어, 별도의 getCount 가 항상 필요한 것은 아닙니다.