블록체인 학습
0 XP

반환값 (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 함수로 조회하는 패턴을 함께 씁니다.

Code Editor
에디터를 불러오는 중...
실행 결과

Run 버튼을 눌러 코드를 실행하세요.