Java Method Parameters
Java Method Parameters: 자바 메소드 매개변수 가이드
메소드 매개변수는 메소드가 호출될 때 외부에서 전달된 값을 받아서 메소드 안에서 사용할 수 있도록 하는 변수입니다. 매개변수는 메소드의 입력값을 전달하는 중요한 역할을 하며, 이를 통해 메소드는 동적인 데이터를 처리할 수 있습니다.
Java 메소드에서는 여러 가지 방식으로 매개변수를 정의하고 사용할 수 있으며, 이 가이드는 Java에서 매개변수를 사용하는 방법, 값 전달 방식, 가변인자, 기본 타입과 참조 타입의 차이를 설명합니다.
1. 기본 메소드 매개변수
메소드를 선언할 때 매개변수는 괄호 안에 정의되며, 각 매개변수는 데이터 타입과 이름으로 구성됩니다. 매개변수는 메소드가 호출될 때 호출하는 쪽에서 값을 전달받으며, 전달된 값으로 메소드 내부의 작업을 수행합니다.
사용 예:
public class MethodParameterExample {
// 두 정수를 더하는 메소드
public static int add(int a, int b) {
return a + b;
}
public static void main(String[] args) {
int result = add(5, 3); // 메소드 호출 시 5와 3을 전달
System.out.println("더한 값: " + result); // 출력: 더한 값: 8
}
}
설명:
int a, int b
: 두 개의 정수 매개변수를 받는 메소드입니다.- 메소드 호출:
add(5, 3)
을 호출하여 5와 3을 메소드에 전달합니다. - 결과: 메소드는 5와 3을 더한 값을 반환합니다.
2. 값에 의한 호출 (Call by Value)
Java는 값에 의한 호출 (call by value) 방식을 사용하여 매개변수를 전달합니다. 즉, 기본 타입의 변수는 값이 복사되어 전달됩니다. 메소드 내에서 매개변수의 값이 변경되더라도 원본 값은 변경되지 않습니다.
사용 예:
public class CallByValueExample {
// 값을 변경하는 메소드
public static void changeValue(int num) {
num = 100; // 메소드 내부에서 num 값 변경
}
public static void main(String[] args) {
int value = 50;
changeValue(value); // 50을 전달
System.out.println("변경 후 값: " + value); // 출력: 변경 후 값: 50 (원본 값은 변경되지 않음)
}
}
설명:
- 값에 의한 호출:
value
의 복사본이changeValue
메소드로 전달되므로, 메소드 내에서 값을 변경하더라도 원본 변수는 영향을 받지 않습니다. - 결과: 메소드 내에서
num
의 값이 변경되었지만,value
는 여전히 50입니다.
3. 참조에 의한 전달 (Reference Types)
참조 타입(객체나 배열 등)의 경우, 매개변수로 **객체의 참조(주소)**가 전달됩니다. 즉, 메소드 내부에서 객체나 배열의 내용을 변경하면 원본 객체에도 그 변화가 반영됩니다.
사용 예:
public class CallByReferenceExample {
// 배열의 첫 번째 요소 값을 변경하는 메소드
public static void changeArray(int[] arr) {
arr[0] = 100; // 배열의 첫 번째 요소 값 변경
}
public static void main(String[] args) {
int[] numbers = {1, 2, 3};
changeArray(numbers); // 배열의 참조가 전달됨
System.out.println("변경 후 배열의 첫 번째 요소: " + numbers[0]); // 출력: 변경 후 배열의 첫 번째 요소: 100
}
}
설명:
- 참조 타입의 배열
numbers
가changeArray
메소드로 **참조(주소)**가 전달됩니다. - 메소드 내에서 배열의 값을 변경하면, 원본 배열의 값도 변경됩니다.
4. 여러 개의 매개변수
메소드는 여러 개의 매개변수를 가질 수 있으며, 매개변수는 **쉼표(,)**로 구분합니다. 각 매개변수는 메소드 호출 시 전달된 값으로 처리됩니다.
사용 예:
public class MultipleParametersExample {
// 이름과 나이를 받아서 인사 메시지를 출력하는 메소드
public static void greet(String name, int age) {
System.out.println("안녕하세요, " + name + "! 나이는 " + age + "살입니다.");
}
public static void main(String[] args) {
greet("홍길동", 25); // 출력: 안녕하세요, 홍길동! 나이는 25살입니다.
}
}
설명:
String name, int age
: 두 개의 매개변수를 받는 메소드입니다.- 메소드 호출:
greet("홍길동", 25)
를 호출하여 이름과 나이를 전달합니다.
5. 가변인자 (Varargs)
가변인자를 사용하면 메소드가 여러 개의 인자를 받을 수 있습니다. 가변인자는 인자의 개수가 유동적일 때 유용하며, 메소드에서 배열처럼 처리됩니다. 가변인자는 마지막 매개변수로만 사용할 수 있습니다.
구문:
반환타입 메소드이름(데이터타입... 변수명) {
// 메소드 내용
}
사용 예:
public class VarargsExample {
// 여러 개의 정수를 받아서 합계를 계산하는 메소드
public static int sum(int... numbers) {
int total = 0;
for (int num : numbers) {
total += num;
}
return total;
}
public static void main(String[] args) {
System.out.println("합계: " + sum(1, 2, 3)); // 출력: 합계: 6
System.out.println("합계: " + sum(10, 20, 30, 40)); // 출력: 합계: 100
}
}
설명:
int... numbers
: 가변인자를 사용하여 정수 여러 개를 받을 수 있습니다.- 결과: 전달된 인자의 합계를 계산하여 각각 6과 100을 반환합니다.
6. 매개변수의 기본값 (Java는 지원하지 않음)
Java는 기본 매개변수 값을 지원하지 않습니다. 대신, 메소드 오버로딩을 사용하여 비슷한 기능을 구현할 수 있습니다.
메소드 오버로딩을 사용한 기본 매개변수 구현:
public class DefaultParameterExample {
// 두 수를 더하는 메소드 (세 번째 매개변수의 기본값은 0으로 가정)
public static int add(int a, int b) {
return add(a, b, 0); // 세 번째 매개변수는 0
}
// 세 수를 더하는 메소드
public static int add(int a, int b, int c) {
return a + b + c;
}
public static void main(String[] args) {
System.out.println("두 수의 합: " + add(10, 20)); // 출력: 30
System.out.println("세 수의 합: " + add(10, 20, 30)); // 출력: 60
}
}
설명:
add(int a, int b)
메소드가 세 번째 매개변수의 기본값으로 0을 전달하여 오버로딩된 메소드를 호출합니다.- 결과: 두 수 또는 세 수의 합을 계산할 수 있습니다.
7. 패스 바이 값과 패스 바이 참조 요약
값에 의한 호출:
- 기본 타입은 값이 복사되어 전달됩니다.
- 메소드 내에서 매개변수를 변경하더라도 원본 변수는 변경되지 않습니다.
참조에 의한 전달:
- 참조 타입은 객체의 **참조(주소)**가 전달됩니다.
- 메소드 내에서 객체의 값을 변경하면, 원본 객체도 변경됩니다.
8. Java 메소드 매개변수 활용 예시
8.1. 원의 넓이를 계산하는 메소드
public class CircleAreaExample {
// 원의 반지름을 받아서 넓이를 계산하는 메소드
public static double calculateArea(double radius) {
return Math.PI * radius * radius;
}
public static void main
(String[] args) {
System.out.println("반지름 5의 원 넓이: " + calculateArea(5)); // 출력: 78.53981633974483
}
}
8.2. 최대값을 찾는 메소드 (가변인자 사용)
public class MaxValueExample {
// 여러 개의 정수 중에서 최대값을 찾는 메소드
public static int findMax(int... numbers) {
int max = numbers[0];
for (int num : numbers) {
if (num > max) {
max = num;
}
}
return max;
}
public static void main(String[] args) {
System.out.println("최대값: " + findMax(1, 2, 3, 4, 5)); // 출력: 5
}
}
요약
Java에서 메소드 매개변수는 메소드에 데이터를 전달하는 중요한 역할을 합니다. Java는 값에 의한 호출을 사용하여 기본 타입을 전달하고, 참조에 의한 호출로 참조 타입을 전달합니다. 가변인자를 사용하면 여러 개의 매개변수를 유연하게 처리할 수 있으며, Java는 기본 매개변수 값을 직접적으로 지원하지 않으므로 메소드 오버로딩을 사용하여 이를 구현할 수 있습니다. 매개변수를 적절히 사용하면 유연하고 재사용 가능한 코드를 작성할 수 있습니다.