블록체인 학습
0 XP

매개변수 (parameters)

매개변수(parameter) 는 함수가 외부에서 전달받는 입력값으로, "어떤 데이터로 작업할지"를 함수에 넘겨주는 통로입니다. 함수 이름 뒤 괄호 안에 타입 이름 형태로 선언하며, 콤마로 구분해 여러 개를 받습니다.

기본 선언과 사용

매개변수는 반드시 타입을 명시해야 합니다. 함수 안에서는 일반 지역 변수처럼 자유롭게 사용할 수 있습니다.

function add(uint256 a, uint256 b) public pure returns (uint256) {
    return a + b;
}

위 함수는 a, b 두 개의 uint256 매개변수를 받아 합을 돌려줍니다. 호출하는 쪽에서 add(3, 5) 처럼 값을 넘기면, 함수 안의 a 는 3, b 는 5 가 됩니다.

매개변수 이름은 함수 안에서만 유효한 지역 이름입니다. uint256, string, address, bool 등 어떤 타입이든 매개변수로 받을 수 있습니다.

참조 타입과 데이터 위치

string, bytes, 배열, 구조체 같은 참조 타입을 매개변수로 받을 때는 데이터 위치(memory, calldata)를 함께 적어야 합니다. uint256 같은 값 타입에는 적지 않습니다.

외부에서 들어오는 읽기 전용 입력에는 calldata 를 쓰면 가스가 덜 들고, 함수 안에서 값을 수정해야 하면 memory 를 씁니다.

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.20;
 
contract ParamDemo {
    // 값 타입 매개변수: 데이터 위치를 적지 않습니다.
    function add(uint256 a, uint256 b) public pure returns (uint256) {
        return a + b;
    }
 
    // 참조 타입 매개변수: 데이터 위치(calldata)를 반드시 적습니다.
    function echo(string calldata text) public pure returns (string memory) {
        return text; // 받은 문자열을 그대로 돌려줍니다.
    }
}

매개변수 vs 인자

용어를 정리해두면 헷갈리지 않습니다. 함수를 정의할 때 선언하는 변수를 매개변수(parameter), 함수를 호출할 때 실제로 넘기는 값을 인자(argument) 라고 부릅니다. add(uint256 a, uint256 b) 에서 a, b 는 매개변수이고, add(3, 5) 에서 3, 5 는 인자입니다.

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

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