🔧 Java 메서드(Method) — 객체의 동작을 정의한다
핵심 개념 : 메서드는 객체가 수행할 동작을 정의한 실행 블록이다. 객체 간 상호작용의 수단이 된다.
1️⃣ 메서드 선언 — 4가지 구성 요소
리턴타입 메서드명(매개변수) { // ← 선언부
// 실행 블록 // ← 구현부
return 값;
}
| 구성 요소 | 설명 | 예시 |
|---|---|---|
| 리턴타입 | 메서드 실행 후 반환할 값의 타입 (없으면 void) | int, double, void |
| 메서드명 | 소문자로 시작, camelCase 스타일 | run(), setSpeed() |
| 매개변수 | 호출 시 전달받을 값 (없으면 생략) | (int x, int y) |
| 실행 블록 | 메서드 호출 시 실행되는 코드 | { ... } |
예시 — Calculator 클래스
public class Calculator {
void powerOn() {
System.out.println("전원을 켭니다.");
}
int plus(int x, int y) {
return x + y; // int 타입 리턴
}
double divide(int x, int y) {
return (double)x / (double)y; // double 타입 리턴
}
}
2️⃣ 메서드 호출 — 내부 vs 외부
메서드는 객체가 생성된 후에 호출할 수 있다.
외부 객체에서 호출
참조변수와 도트(.) 연산자를 사용한다.
Calculator calc = new Calculator();
calc.powerOn(); // 리턴값 없음
int result1 = calc.plus(3, 5); // 리턴값을 변수에 저장
double result2 = calc.divide(10, 4);
객체 내부에서 호출
메서드명만으로 직접 호출 가능하다.
class Calculator {
void method() {
powerOn(); // 다른 메서드 호출
int r = plus(3, 5); // 리턴값 받기
}
}
3️⃣ 가변길이 매개변수 — 개수 제한 없이 받기
타입... 문법으로 매개값을 개수 제한 없이 받을 수 있다.
int sum(int... values) {
int sum = 0;
for (int i = 0; i < values.length; i++) {
sum += values[i];
}
return sum;
}
// 호출 방법 3가지 (모두 가능)
sum(1, 2, 3); // 개별 값
sum(1, 2, 3, 4, 5); // 개수 제한 없음
sum(new int[]{1, 2, 3}); // 배열도 가능
💡 가변길이 매개변수는 내부적으로 배열로 처리된다.
4️⃣ return 문 — 메서드 종료와 값 반환
return 은 두 가지 역할을 한다.
① 메서드 실행을 즉시 종료
② 호출한 곳으로 값을 반환 (리턴타입이 있는 경우)
Unreachable Code 에러
return 이후의 코드는 절대 실행되지 않는다.
int plus(int x, int y) {
int result = x + y;
return result;
System.out.println(result); // ❌ Unreachable code 에러
}
조건부 return은 가능
boolean isLeftGas() {
if (gas == 0) {
System.out.println("gas가 없습니다.");
return false; // 여기서 종료
}
System.out.println("gas가 있습니다.");
return true; // 또는 여기서 종료
}
⚠️ if-else 분기에서는 각 경로마다
return이 있어야 컴파일 에러가 발생하지 않는다.
5️⃣ 메서드 오버로딩(Overloading)
같은 이름의 메서드를 매개변수만 다르게 해서 여러 개 선언하는 것이다.
오버로딩 조건
매개변수의 타입, 개수, 순서 중 하나라도 달라야 한다.
// ✅ 올바른 오버로딩
int plus(int x, int y) { ... }
double plus(double x, double y) { ... }
// ❌ 오버로딩 아님 (매개변수 이름만 다름)
int plus(int x, int y) { ... }
int plus(int a, int b) { ... } // 컴파일 에러
실전 예시 — println()
System.out.println()이 대표적인 오버로딩 메서드다.
println() // 매개변수 없음
println(int x) // int 출력
println(double x) // double 출력
println(String x) // String 출력
활용 예시 — 정사각형 vs 직사각형
class Calculator {
// 정사각형 넓이 (매개변수 1개)
double areaRectangle(double width) {
return width * width;
}
// 직사각형 넓이 (매개변수 2개)
double areaRectangle(double width, double height) {
return width * height;
}
}
// 호출
calc.areaRectangle(10); // 100.0 (정사각형)
calc.areaRectangle(10, 20); // 200.0 (직사각형)
📌 핵심 요약
| 개념 | 설명 |
|---|---|
| 메서드 선언 | 리턴타입 + 메서드명 + 매개변수 + 실행블록 |
| 메서드 호출 | 외부는 참조변수.메서드(), 내부는 메서드() |
| 가변길이 매개변수 | 타입... 변수명 → 배열로 처리됨 |
| return | 메서드 종료 + 값 반환 (이후 코드는 실행 안 됨) |
| 오버로딩 | 같은 이름, 다른 매개변수로 여러 메서드 선언 |