이더리움/솔리디티

[솔리디티] 7. view 함수, pure 함수, 모디파이어, 오버로딩

라이튼 2023. 7. 20. 00:42

이전글

 

[솔리디티] 6. 함수, 가시성 지정자, 반환 값, 지역 변수

이전글 [솔리디티] 5. 연산자, 전역 변수, 단위 이전글 [솔리디티] 4. 생성자, 매개변수, 값 타입과 참조 타입, immutable 이전글 [솔리디티] 3. 자료형, 배열, 상수, 상태 변수 이전글 [솔리디티] 2. 리믹

kwjdnjs.tistory.com

 

veiw 함수, pure 함수, 모디파이어, 오버로딩

 이번 글에서는 view 함수와 pure함수, 함수의 모디파이어와 오버로딩에 대해 알아보겠습니다.

 

1. view 함수와 pure 함수

 솔리디티의 함수에서는 view와 pure라는 키워드를 추가로 사용할 수 있습니다.

 

 view는 블록체인의 상태를 변화시키지 않는 경우에 사용합니다. 다음과 같이 상태 변수의 값을 수정하지 않고 읽기만 하는 경우가 이에 해당합니다.

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.18;

contract Function {
    uint8 n = 1;

    function func() public view returns (uint8)  {
        return n;
    }
}

 

 pure는 함수가 블록체인의 상태를 아예 불러오지 않는 경우에 사용합니다. 다음과 같이 상태 변수의 값을 불러오지 않거나, 전역 변수를 이용해 블록체인 관련 정보에 접근하지 않는 경우가 이에 해당합니다.

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.18;

contract Function {
    function func(uint8 x, uint8 y) public pure returns (uint8)  {
        return x+y;
    }
}

 

2. 모디파이어

 다음으로 모디파이어에 대해 알아보겠습니다. 모디파이어는 함수의 실행 전과 실행 후에 실행될 코드를 말합니다. 일반적으로 함수의 접근을 특정 계정으로 제한하거나 입력값이 올바른 형태의 값인지를 확인하는 데 사용됩니다. 파이썬의 데코레이터와 유사한 개념입니다.

 

 모디파이어는 다음과 같이 modifier를 통해 선언할 수 있습니다. 모디파이어 내부의 _;가 함수 내부의 코드이며, 이 부분을 기준으로 위에 있는 코드가 함수보다 먼저 실행될 코드입니다. _;보다 아래에 입력된 코드는 함수가 실행된 이후에 실행될 부분입니다. 모디파이어를 사용하기 위해서는 함수 선언 과정에서 모디파이어의 이름을 입력해야 합니다.

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.18;

contract Function {
    address[] public addrs;

    modifier saveAddress() {
        addrs.push(msg.sender);
        _;
    }

    function func(uint8 x, uint8 y) public saveAddress returns (uint8)  {
        return x+y;
    }
}

 

 모디파이어에도 다음과 같이 함수의 매개변수를 보낼 수 있습니다.

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.18;

contract Function {
    uint8[] public nums;

    modifier saveNum(uint8 num) {
        nums.push(num);
        _;
    }

    function func(uint8 x, uint8 y) public saveNum(x) returns (uint8)  {
        return x+y;
    }
}

 

3. 오버로딩

 솔리디티에서의 오버로딩은 일반적으로 객체지향언어에서 볼 수 있는 오버로딩과 같은 개념입니다. 같은 이름의 함수를 서로 다른 매개변수로 여러 개 선언할 수 있습니다.

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.18;

contract Function {
    function func(uint8 x) public pure returns (uint8)  {
        return x;
    }
    
    function func(uint8 x, uint8 y) public pure returns(uint8) {
        return x+y;
    }
}

 

 지금까지 솔리디티 view 함수와 pure함수, 함수의 모디파이어와 오버로딩에 대해 알아봤습니다. 감사합니다.

 

 

다음글

 

[솔리디티] 8. 매핑, 구조체, 열거형

이전글 [솔리디티] 7. view 함수, pure 함수, 모디파이어, 오버로딩 이전글 [솔리디티] 6. 함수, 가시성 지정자, 반환 값, 지역 변수 이전글 [솔리디티] 5. 연산자, 전역 변수, 단위 이전글 [솔리디티] 4.

kwjdnjs.tistory.com