상세 컨텐츠

본문 제목

솔리디티 강좌 6강 function 3 - View 와 Pure

솔리디티 깨부수기 - 기본

by D_One 2021. 9. 2. 02:01

본문

 

 

지난번 강의에서, public 부분에서 

 

function use_public_example_a() view public returns (uint256) {

   //...

}

 

라는 function 을 보셨을거예요.

 

그리고 view 라는 키워드를 처음 보셨을거 구요.

 

저 키워드의 자리는 pulbc 과 같은 접근 제한자 앞 이나 뒤 어디든 붙이면 되요.

function use_public_example_a() view public returns (uint256) 

function use_public_example_a()  public view returns (uint256) 

 

저곳에는 view 와 pure 가 들어 간답니다.

 

1.view :  storage state 를 읽을 수 있지만, 그 state 값을 변경할 수 없다.

이 문장만 읽으면 잘이해가 안가니, 예시와 같이 볼게요.

 

pragma solidity >=0.7.0 <0.9.0;

contract View_example{
     uint256 public a = 1;
    
    function read_a() public view returns(uint256){
        return a+2;
    } 
}

function 의 밖에 있는 것들은 storate에 저장이됩니다.

그러니 이 예제에서는 a 가 storage state 이 겠죠. 

 

저희는 read_a() 라는 간단히 a 값을 리턴하는 함수를 만들었어요.

그러나, a 를 리턴하니, 당연히 storage state를 읽었다고 할 수 있겠죠? 

그렇기 때문에 view 를 넣어야 합니다. 

 

그렇다면, 만야에 read_a()에서 storage state의 값을 바꾼다면 어떻게 해야할까요?

 

// SPDX-License-Identifier: GPL-3.0

pragma solidity >=0.7.0 <0.9.0;

contract View_example{
     uint256 public a = 1;
    
    function read_a() public returns(uint256){
        a = 3;
        return a+2;
    } 
}

 이런식으로 아무것도 안써주면 되요. 

 

 

2.pure : storage state 를 읽으면 안되고, 그 state값을 변경할 수 도 없다.

 

view 부분을 알았으니, pure는 어느정도 짐작이 갔으리나 생각됩니다. 

 

// SPDX-License-Identifier: GPL-3.0

pragma solidity >=0.7.0 <0.9.0;
contract Pure_example{
    
    function read_a() pure public returns(uint256){
        uint256 a = 3;
        return a+2;
    } 
}

pure는 storage state를 읽지 못하고, 변경도 불가하니 당연히, 함수 밖의 외부의 값을 가져올 수 없죠?

그러니 함수 내에 정의된 로컬변수들과 논답니다.

 

위에서 로컬변수 a 는 3 을 대입받고, 2를 더해서 마지막에는 5로 리턴한답니다. 

 

정리하지면: 

view : function 밖의 변수들을 읽을수 있으나 변경 불가능

pure : function 밖의 변수들을 읽지 못하고, 변경도 불가능

viwe 와 pure 둘다 명시 안할때: function 밖의 변수들을 읽어서, 변경을 해야함.

 

 

비디오 영상 참고 부탁드립니다.

 

관련글 더보기