인프런 커뮤니티 질문&답변

제원님의 프로필 이미지
제원

작성한 질문수

ERC20 깨부수기 (+ truffle, 프론트엔드)

매핑과 배열

pure view

작성

·

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

D_One님의 프로필 이미지
D_One
지식공유자

안녕하세요 제원님 :)

    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를 함수 밖으로 가져가서 사용하지 못 하겠죠

 

자 그러면, pureview는 무엇일까요 ?

pureview는 데이터를 저장하지 않을 때 사용되는 모디파이어 입니다.

두 함수에서 볼 수 있듯이, 함수 밖의 변수에 데이터를 따로 저장하지 않고 있죠?

자 그러면 pureview의 차이점은 무엇일까요?

일단 balance1(address _a)view 부터 보겠습니다.

view 는 함수의 밖에 있는 데이터 값을 읽어 올 때 사용합니다.

_a 는 함수 내부에 정의된 로컬변수 인데, 어떻게 외부의 값을 읽어와서 view라고 표시한걸까요?

_a는 주소형 타입 address 인것을 알 수 있습니다.

주소형 타입의 경우 멤버변수로 balance를 조회할 수 있습니다.

(balance는 현재 사용중인 블록체인의 메인 코인의 잔액을 나타냅니다)

즉, _a는 로컬 변수지만, 주소형이기에, 멤버변수인 balance라는것을 조회하기에 view를 쓴것을 알 수 있습니다.

이와 반대로,

fun1(uint256 _a)의 pure는 uint인 정수형 타입이며, 밖에서 읽어 들여오는게 없죠

그렇기 때문에 pure를 사용한것을 알 수 있습니다.

 

정리하자면,

pureview는 함수 밖의 변수의 데이터를 저장하지 않을 때, 함수에 적용한다.

view는 함수 밖의 변수의 데이터를 저장하지 않을 때, 함수 밖의 변수의 값을 읽어 올 때, 함수에 적용한다.

pure는 함수 밖의 변수의 데이터를 저장하지 않을 때, 함수 밖의 변수의 값을 읽어 오지않을 때 함수에. 적용한다.

 

감사합니다 :)

 

 

제원님의 프로필 이미지
제원

작성한 질문수

질문하기