일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 |
- 합의알고리즘
- 댑
- 폴리 브리지
- 비트코인
- 암호화폐
- 소울바운드토큰
- Ethereum
- container
- poly bridge
- 디앱
- JavaScript
- 이더리움
- crypyocurrency
- 작업증명
- DAPP
- 스마트컨트렉트
- 솔리디티
- smartcontract
- 도커
- smart contract
- solidity
- Blockchain
- 블록체인 #스마트컨트랙트
- docker
- 컨테이너
- 블록체인
- 스마트컨트랙트
- 지분증명
- layer2
- Ehter
- Today
- Total
Let's make Everything
[View와 Pure] 본문
# 1. View와 Pure의 자리
솔리디티에서 함수를 정의할 때는 다음과 같이 씁니다.
function 함수명() public retunrs(uint256){
실행하고자 하는 내용
}
위와 같은 함수에서 view와 pure의 자리는 어디에 위치시키며 그 역할은 무엇일까요?
먼저 위치에 대해서 말씀드리겠습니다.
view와 pure의 위치는 함수에서 접근제어자 앞 또는 뒤에 붙이는 형식으로 사용합니다.
예를 들어 사용해보도록 하겠습니다.
// 앞에 붙여서 사용하는 경우
function example_a() view public returns(uint256){}
// 뒤에 붙여서 사용하는 경우
function example_b() public pure returns(uint256){}
다음은 각각의 역할에 대해서 알아보겠습니다.
# 2. View
view는 storage state를 읽을 수는 있지만 그 state를 변경할 수 없습니다.
예시 코드를 통해 설명드리겠습니다.
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.17;
contract View_example{
uint256 public a = 5;
function read_a() public view returns(uint256){
return a+9;
}
}
위와 같은 컨트랙트가 있다고 가정하겠습니다.
위의 컨트랙트에서는 function 밖에 있는 값들은 storage에 저장이 됩니다. 위의 function에서는 storage는 a가 됩니다.
read_a라는 a를 리턴하는 함수를 선언했습니다. 이 함수에서는 a를 리턴하니 당연히 storage값을 읽었다고 할 수 있습니다. 그래서 view를 사용하여야 합니다.
만약 a값을 바꾸고 싶다? 다음과 같이 해주시면 됩니다.
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.17;
contract View_example{
uint256 public a = 5;
function read_a() public view returns(uint256){
a = 3;
return a+9;
}
}
위와 같이 그냥 아무 데이터타입 없이 재선언 해주시면 됩니다.
즉, view는 function 밖의 변수들을 읽어오는 역할을 하지만 변경하는 것은 불가능합니다.
# 3. Pure
pure는 storage state를 읽을 수도 없고 당연히 state값도 변경할 수 없습니다.
즉, 함수내에 선언된 로컬변수로 실행합니다.
예시코드를 통해 설명드리겠습니다.
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.17;
contract Pure_example{
function read_a() pure public returns(uint256){
uint256 a = 7;
return a+3;
}
}
위의 컨트랙트에서는 함수내에 정의된 변수 a의 값에 3을 더한 10이 리턴됩니다.
즉, pure는 function밖의 변수를 읽지도, 변경도 불가능합니다.
논외로 둘다 선언하지 않으면 function밖의 변수들을 읽어서 변경해야 합니다.
참고
'Solidity' 카테고리의 다른 글
[Instance 정의] (0) | 2023.05.01 |
---|---|
[String 타입] (0) | 2023.04.29 |
[Solidity 접근제어자] (0) | 2023.04.15 |
[Function정의, 사용법?] (0) | 2023.04.15 |
[Ether단위와 Gas 중요성?] (0) | 2023.04.14 |