들어가며
Java에서 메서드를 만들다 보면 괄호 안에 변수를 적는 경우가 많습니다.
이 변수가 바로 매개변수(Parameter) 입니다.
이 글에서는 매개변수가 무엇인지, 어떻게 사용하는지 정리해보겠습니다.
매개변수란?
매개변수는 메서드나 생성자에 값을 전달하기 위해 괄호 안에 적는 변수입니다.
호출하는 쪽에서 값을 넘겨주면, 메서드 내부에서 그 값을 받아 사용합니다.
// 매개변수
// ↓ ↓
public int add(int a, int b) {
return a + b;
}
매개변수 vs 인수(Argument)
용어를 헷갈리기 쉬운데, 두 가지를 구분해두면 좋습니다.
// 매개변수(Parameter) - 메서드 정의 시 괄호 안의 변수
public int add(int a, int b) { ... }
// ↑ ↑
// 매개변수
// 인수(Argument) - 메서드 호출 시 실제로 전달하는 값
add(3, 5);
// ↑ ↑
// 인수
| 구분 | 위치 | 설명 |
|---|---|---|
| 매개변수 (Parameter) | 메서드 정의부 | 값을 받기 위해 선언한 변수 |
| 인수 (Argument) | 메서드 호출부 | 실제로 전달하는 값 |
코드로 이해하기
메서드 매개변수
class Calculator {
// a, b가 매개변수
public int add(int a, int b) {
return a + b;
}
// name이 매개변수
public void greet(String name) {
System.out.println("안녕하세요, " + name + "님!");
}
}
Calculator calc = new Calculator();
calc.add(3, 5); // 3, 5가 인수 → a=3, b=5로 전달
calc.greet("홍길동"); // "홍길동"이 인수 → name="홍길동"으로 전달
생성자 매개변수
생성자도 동일하게 매개변수를 사용합니다.
객체를 생성할 때 초기값을 전달하는 용도로 자주 쓰입니다.
class Member {
String name;
int age;
// 생성자 매개변수
public Member(String name, int age) {
this.name = name; // 전달받은 값을 인스턴스 변수에 저장
this.age = age;
}
}
Member member = new Member("홍길동", 25); // "홍길동", 25가 인수
매개변수는 스택에 저장된다
매개변수는 메서드가 호출될 때 스택 프레임에 생성되고, 메서드가 끝나면 자동으로 사라집니다.
즉, 매개변수는 해당 메서드 안에서만 사용할 수 있는 지역 변수입니다.
public int add(int a, int b) {
return a + b;
} // 메서드 종료 → a, b 스택에서 제거
[스택]
┌──────────────────┐
│ add 스택 프레임 │
│ a = 3 │ ← 매개변수
│ b = 5 │ ← 매개변수
└──────────────────┘
메서드 종료 시 제거
기본 타입 vs 참조 타입 매개변수
매개변수의 타입에 따라 전달 방식이 달라집니다.
기본 타입 - 값 복사 (Call by Value)
public static void change(int a) {
a = 100; // 복사된 값만 변경
}
int num = 10;
change(num);
System.out.println(num); // 10 - 원본 그대로
기본 타입은 값이 복사되어 전달되므로 메서드 안에서 변경해도 원본에 영향이 없습니다.
참조 타입 - 주소 복사
public static void change(Member m) {
m.name = "김철수"; // 주소를 통해 실제 객체 수정
}
Member member = new Member("홍길동", 25);
change(member);
System.out.println(member.name); // "김철수" - 원본도 바뀜
참조 타입은 주소가 복사되어 전달되므로, 같은 객체를 가리켜 원본도 함께 바뀝니다.
| 구분 | 전달 방식 | 원본 영향 |
|---|---|---|
| 기본 타입 | 값 복사 | 없음 |
| 참조 타입 | 주소 복사 | 있음 |
매개변수 활용 - 다양한 형태
매개변수가 없는 경우
public void sayHello() {
System.out.println("안녕하세요!");
}
sayHello(); // 인수 없이 호출
매개변수가 여러 개인 경우
public void register(String name, int age, String email) {
System.out.println(name + " / " + age + " / " + email);
}
register("홍길동", 25, "hong@test.com");
가변 매개변수 (varargs)
개수가 정해지지 않은 인수를 받을 때 사용합니다.
public int sum(int... numbers) { // 개수 제한 없이 받음
int total = 0;
for (int n : numbers) {
total += n;
}
return total;
}
sum(1, 2, 3); // 6
sum(1, 2, 3, 4, 5); // 15
정리
- 매개변수는 메서드나 생성자에 값을 전달하기 위해 괄호 안에 선언하는 변수이다.
- 매개변수(Parameter)는 메서드 정의 시의 변수이고, 인수(Argument)는 호출 시 실제로 전달하는 값이다.
- 매개변수는 스택 프레임에 저장되며 메서드가 끝나면 자동으로 사라지는 지역 변수이다.
- 기본 타입 매개변수는 값이 복사되어 원본에 영향이 없고, 참조 타입 매개변수는 주소가 복사되어 원본 객체에 영향을 줄 수 있다.
'-- 오늘 있었던 개발 일기' 카테고리의 다른 글
| 인터프리터 언어란? (0) | 2026.04.13 |
|---|---|
| 컴파일 언어란? - 그리고 Java는 어떻게 다를까? (0) | 2026.04.12 |
| static 메서드란? - 객체 생성 없이 바로 호출 (0) | 2026.04.09 |
| 참조변수는 주소를 가져야 한다! (0) | 2026.04.08 |
| Object 클래스 - Java 최상위 클래스 (0) | 2026.04.06 |