이전글
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함수, 함수의 모디파이어와 오버로딩에 대해 알아봤습니다. 감사합니다.
다음글
'이더리움 > 솔리디티' 카테고리의 다른 글
[솔리디티] 9. 조건문, 반복문 (0) | 2023.07.26 |
---|---|
[솔리디티] 8. 매핑, 구조체, 열거형 (0) | 2023.07.24 |
[솔리디티] 6. 함수, 가시성 지정자, 반환 값, 지역 변수 (0) | 2023.07.17 |
[솔리디티] 5. 연산자, 전역 변수, 단위 (0) | 2023.07.13 |
[솔리디티] 4. 생성자, 매개변수, 값 타입과 참조 타입, immutable (0) | 2023.07.10 |