반환값 (return)
함수가 계산 결과를 호출한 쪽으로 돌려주려면 반환값(return value) 을 사용합니다. 매개변수가 함수의 "입력"이라면, 반환값은 함수의 "출력"입니다. 함수 헤더에 returns (타입) 으로 반환 타입을 선언하고, 함수 본문에서 return 문으로 값을 돌려줍니다.
기본 반환
returns 키워드 뒤 괄호 안에 돌려줄 값의 타입을 적습니다. 본문에서는 그 타입에 맞는 값을 return 으로 내보냅니다.
function square(uint256 x) public pure returns (uint256) {
return x * x;
}반환 타입에는 이름을 붙일 수도 있고, 타입만 적을 수도 있습니다. returns (uint256 result) 처럼 이름을 주면 return 없이 result 변수에 값을 대입하는 방식도 가능합니다.
여러 값 반환하기
Solidity 함수는 한 번에 여러 값을 반환할 수 있습니다. 반환 타입을 콤마로 나열하고, return (값1, 값2) 형태로 묶어서 돌려줍니다. 받는 쪽에서는 (uint256 s, uint256 p) = sumAndProduct(2, 3); 처럼 분해해서 받을 수 있습니다.
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;
contract ReturnDemo {
function square(uint256 x) public pure returns (uint256) {
return x * x;
}
// 합과 곱을 한 번에 반환합니다.
function sumAndProduct(uint256 a, uint256 b) public pure returns (uint256, uint256) {
return (a + b, a * b);
}
}이름 붙은 반환 변수
반환 변수에 이름을 주면 코드가 더 읽기 쉬워지기도 합니다. 아래 함수는 return 문 없이 이름 붙은 반환 변수에 값을 채우기만 해도 자동으로 반환됩니다.
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;
contract NamedReturn {
function divide(uint256 a, uint256 b) public pure returns (uint256 quotient, uint256 remainder) {
quotient = a / b; // 몫
remainder = a % b; // 나머지
// 별도의 return 문 없이 quotient, remainder 가 반환됩니다.
}
}view·pure 가 아닌 함수가 반환하는 값은, 실제로 블록체인에 보내는 트랜잭션에서는 직접 읽기
어렵습니다. 외부에서 값을 확인하려면 view 함수로 조회하는 패턴을 함께 씁니다.