1 분 소요

자바 메소드는 클래스 내부에서 기능(behavior) 을 구현하는 핵심 단위입니다. 메소드를 적절히 설계하면 중복 코드를 줄이고 프로그램을 모듈화해 유지보수를 크게 향상시킬 수 있습니다.


메소드란 무엇인가? — 정의와 목적

메소드는 명령문의 집합으로, 한 번 정의한 로직을 여러 곳에서 재사용할 수 있습니다.

  • 중복 제거 → 반복 코드를 한 곳에 모아 관리
  • 가독성 향상 → 프로그램 흐름을 작은 블록으로 분할
  • 유지보수 용이 → 요구 사항이 변해도 메소드만 수정하면 됨

핵심 개념: “입력(매개변수) → 처리(구현부) → 출력(반환값)” 구조를 갖춘 블랙박스.


메소드 선언부 구조 파헤치기

선언 형식

[접근제어자] 반환타입 메소드이름(매개변수){
    // 구현부
}
요소 설명 예시
접근제어자 호출 가능 범위 public, private
반환 타입 결과 자료형 int, void
메소드 이름 소문자 동사형 권장 calculateSum
매개변수 입력 데이터 (int a, int b)
구현부 실제 로직 return a + b;

시그니처는 “메소드 이름 + 매개변수 목록”으로, 오버로딩을 판별하는 기준이 됩니다(반환 타입은 포함되지 않음).


메소드 호출·반환 메커니즘

  1. 호출객체.메소드(인수...)
  2. 스택 프레임 생성 → 매개변수·지역변수 저장
  3. 실행 & return → 결과값을 호출자에게 전달
  4. 스택 프레임 제거 → 메모리 자동 회수
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 위험이 있으니, 꼬리 재귀 최적화나 반복문으로 대체하세요.

카테고리:

업데이트:

댓글남기기