본문 바로가기
-- 오늘 있었던 개발 일기

매개변수(Parameter)란?

by code study 2026. 4. 11.

들어가며

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)는 호출 시 실제로 전달하는 값이다.
  • 매개변수는 스택 프레임에 저장되며 메서드가 끝나면 자동으로 사라지는 지역 변수이다.
  • 기본 타입 매개변수는 값이 복사되어 원본에 영향이 없고, 참조 타입 매개변수는 주소가 복사되어 원본 객체에 영향을 줄 수 있다.