매개변수 (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 는 인자입니다.