메소드 활용
메소드 활용
메소드는 클래스의 멤버 함수로서, 메소드 앞에 접근 지정자를 선언합니다.
접근 지정자는 public, private, protected, 디폴트의 4가지 유형으로, 메소드가 다른 클래스에서 호출될 수 있는지 지정하기 위해 사용됩니다.

인자 전달
자바의 메소드 호출 시 인자 전달 방식(argument passing)은 '값에 의한 호출'(call-by-value)입니다.
호출하는 살인자의 값이 복사되어 메소드의 매개 변수에 전달됩니다.
기본 타입의 값이 전달되는 경우
메소드의 매개변수가 기본 타입(byte, char, short, int, long, float, double, boolean)으로 선언된 경우, 호출자(caller)가 건네는 값이 매개변수에 복사되어 전달됩니다.
int n = 10;
increase(n);
increase(int m) 메소드가 호출되면, 매개변수 m이 생성되고 10으로 초기화됩니다.
그러고 나서 m값을 1 증가시킵니다.
increase()에서 리턴하여 main() 메소드로 돌아오면 변수 값은 여전히 10으로 남아 있습니다.

실행 결과
10

객체가 전달되는 경우
메소드의 매개변수가 클래스 타입의 경우, 객체가 아니라 객체의 레퍼런스 값이 전달됩니다.
increase(pizza);
메소드 호출 시 객체가 전달되는 경우, 객체에 대한 레퍼런스만 전달되지 객체가 통째로 복사되지 않는다는 점을 유념하기를 바랍니다.

배열이 전달되는 경우
배열이 메소드에 전달되는 경우도 객체 레퍼런스가 전달되는 경우와 동일합니다.
배열이 통째로 전달되는 것이 아니며 배열이 통째로 전달되는 것이 아니며 배열에 대한 레퍼런스만 전달됩니다.

인자로 배열이 전달되는 예
public class ArrayPassingEx {
static void replaceSpace(char a[]) { // 배열 a의 공백문자를 ','로 변경
for (int i = 0; i < a.length; i++) {
if (a[i] == ' ') {
a[i] = ',';
}
}
}
static void printCharArray(char a[]) { // 배열 a의 문자들을 화면에 출력
for (int i = 0; i < a.length; i++)
System.out.print(a[i]); // 배열 원소 문자 출력
System.out.println();
}
public static void main(String[] args) {
char c[] = {'T', 'h', 'i', 's', ' ', 'i', 's', ' ', 'a', ' ', 'p', 'e', 'n', 'c', 'i', 'l'};
printCharArray(c); // 원래 배열 원소 출력
replaceSpace(c); // 공백 문자 바꾸기
printCharArray(c); // 수정된 배열 원소 출력
}
}
실행 결과
This is a pencil
This,is,a,pencil
메소드 오버로딩
자바에서는 한 클래스 내에, 이름이 같지만 매개변수의 타입이나 개수가 서로 다른 여러 개의 메소드를 중복 작성할 수 있습니다.
이것을 메소드 오버로딩(method overloading) 혹은 메소드 중복이라고 부릅니다.
메소드 오버로딩은 자바 다형성의 한 경우입니다.
여러 개의 메소드가 오버로딩되려면 다음 두 조건을 모두 만족하여야 합니다.
- 메소드 이름이 동일하여야 합니다.
- 매개변수의 개수나 타입이 서로 달라야 합니다.
메소드의 리턴 타입이나 접근 지정자하는 메소드 오버로딩과 관계없습니다.
메소드 오버로딩 성공 사례
메소드 이름이 동일하고 매개변수의 개수가 서로 다르기 때문에, 두 메소드는 한 클래스 내에 공존하는데 아무 문제가 없습니다.
class MethodOverloading { // getSum() 메소드의 정상적인 오버로딩 사례
public int getSum(int i, int j) {
return i + j;
}
public int getSum(int i, int j, int k) {
return i + j + k;
}
}
메소드 오버로딩 실패 사례
메소드 오버로딩은 자바 컴파일러에 의해 판단되며, 컴파일러가 이름이 같은 메소드들을 구분할 수 있으면 메소드 오버로딩이 성공합니다.
class MethodOverloadingFail { // 메소드 오버로딩이 실패한 사례
public int getSum(int i, int j) {
return i + j;
}
public double getSum(int i, int j) {
return (double)(i + j);
}
}
이 두 메소드는 호출자의 입장에서 구분할 수 없으며 자바 컴파일러는 컴파일 오류를 발생시킵니다.
오버로딩된 메소드 호출

'프로그래밍 언어 > JAVA' 카테고리의 다른 글
| 접근 지정자 (0) | 2025.02.03 |
|---|---|
| 객체의 소멸과 가비지 컬렉션 (0) | 2025.02.02 |
| 객체 배열 (1) | 2025.01.31 |
| 생성자 (1) | 2025.01.30 |
| 자바 클래스 만들기 (0) | 2025.01.29 |