Let's make Everything

[View와 Pure] 본문

Solidity

[View와 Pure]

rok92 2023. 4. 27. 01:55
728x90

# 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밖의 변수들을 읽어서 변경해야 합니다.

 

 

참고

https://dayone.tistory.com/m/7

'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