자바 메소드(Method) 개념
자바 메소드는 클래스 내부에서 기능(behavior) 을 구현하는 핵심 단위입니다. 메소드를 적절히 설계하면 중복 코드를 줄이고 프로그램을 모듈화해 유지보수를 크게 향상시킬 수 있습니다.
메소드란 무엇인가? — 정의와 목적
메소드는 명령문의 집합으로, 한 번 정의한 로직을 여러 곳에서 재사용할 수 있습니다.
- 중복 제거 → 반복 코드를 한 곳에 모아 관리
- 가독성 향상 → 프로그램 흐름을 작은 블록으로 분할
- 유지보수 용이 → 요구 사항이 변해도 메소드만 수정하면 됨
핵심 개념: “입력(매개변수) → 처리(구현부) → 출력(반환값)” 구조를 갖춘 블랙박스.
메소드 선언부 구조 파헤치기
선언 형식
[접근제어자] 반환타입 메소드이름(매개변수…){
// 구현부
}
| 요소 | 설명 | 예시 |
|---|---|---|
| 접근제어자 | 호출 가능 범위 | public, private |
| 반환 타입 | 결과 자료형 | int, void |
| 메소드 이름 | 소문자 동사형 권장 | calculateSum |
| 매개변수 | 입력 데이터 | (int a, int b) |
| 구현부 | 실제 로직 | return a + b; |
시그니처는 “메소드 이름 + 매개변수 목록”으로, 오버로딩을 판별하는 기준이 됩니다(반환 타입은 포함되지 않음).
메소드 호출·반환 메커니즘
- 호출 →
객체.메소드(인수...) - 스택 프레임 생성 → 매개변수·지역변수 저장
- 실행 & return → 결과값을 호출자에게 전달
- 스택 프레임 제거 → 메모리 자동 회수
class Calculator {
int add(int a, int b){ // 반환값 O
return a + b;
}
void print(String msg){ // 반환값 X
System.out.println(msg);
}
}
메소드 오버로딩으로 유연성 높이기
오버로딩은 동일 이름 메소드를 매개변수 타입·개수만 달리해 여러 번 정의하는 기법입니다.
int add(int a, int b) { return a + b; }
double add(double a, double b) { return a + b; }
int add(int a, int b, int c) { return a + b + c; }
- 장점 → 메소드 이름 절약, 호출부 코드 간결
- 주의 → 반환 타입만 다르고 매개변수가 같으면 컴파일 오류
메소드 설계 원칙 & 베스트 프랙티스
- 단일 책임 원칙(SRP) → 메소드는 하나의 일만 한다.
- 의미 있는 이름 →
getTotalPrice()처럼 동사+명사 형태. - 매개변수 최소화 → 4개 이상이면 DTO(데이터 객체)로 묶기.
- 사이드 이펙트 방지 → 입력 값 변경보다 Immutable 선호.
- Javadoc 주석 → 사용 방법·예외·반환값 명확히 기술.
마무리: 메소드 핵심 체크포인트
- 정의 → 클래스 내부 기능 단위
- 구성 → 접근제어자·반환타입·이름·매개변수·구현부
- 장점 → 재사용성·가독성·유지보수성
- 오버로딩 → 시그니처 다르게 여러 버전 구현
질문 정리
Q1. 메소드 이름은 동사로 시작해야 하나요?
네, 행동을 나타내므로 print, calculateSum처럼 동사형이 권장됩니다.
Q2. 반환 타입이 void인데 return;을 써도 되나요?
가능합니다. 실행을 즉시 종료하고 싶을 때 return;만 사용하세요.
Q3. 매개변수가 너무 많으면 어떻게 하나요?
DTO 객체나 Builder 패턴으로 묶어 가독성과 확장성을 확보하세요.
Q4. static 메소드는 언제 쓰나요?
인스턴스 상태에 의존하지 않는 순수 기능(예: Math.abs) 구현 시 적합합니다.
Q5. 재귀 호출은 지양해야 하나요?
깊이가 크면 StackOverflowError 위험이 있으니, 꼬리 재귀 최적화나 반복문으로 대체하세요.
댓글남기기