[Java] 메서드

손주현·2025년 4월 6일
0

Java 기초

목록 보기
11/13
post-thumbnail

자주 반복되는 작업을 하나의 코드 블록으로 정의해 재사용할 수 있게 해주는 메서드(method)는 가독성과 유지보수를 높이는 핵심 도구이다.

메서드가 필요한 이유

int a = 1, b = 2;
System.out.println(a + "+" + b + " 연산 수행");
int sum1 = a + b;

int x = 10, y = 20;
System.out.println(x + "+" + y + " 연산 수행");
int sum2 = x + y;
  • 위처럼 같은 연산을 반복해야 할 때, 코드 중복이 많고 유지보수가 어렵다

메서드의 기본 구조

public static int add(int a, int b) {
    int sum = a + b;
    return sum;
}
  • public static: 제어자
  • int: 반환 타입 (리턴값의 타입)
  • add: 메서드 이름 (호출 시 사용)
  • (int a, int b): 매개변수(파라미터) – 메서드에 전달하는 값
  • { ... }: 메서드 본문 – 실제 동작을 수행하는 코드 블록

사용 예시

int sum1 = add(5, 10);  // 결과: 15
int sum2 = add(15, 20); // 결과: 35
  • add(5, 10) 호출 → 메서드 내부 실행 → 결과 15 반환 → 변수에 저장
  • 메서드는 호출하는 쪽에서는 내부 동작을 몰라도 사용 가능 (블랙박스)

메서드와 형변환 (형이 다른 값을 메서드에 넘길 때)

자바에서는 메서드를 호출할 때, 전달하는 값(인수)의 타입이 메서드가 정의한 매개변수 타입과 다를 수 있음
이때 자바는 형변환(casting)을 자동 또는 명시적으로 처리해야 한다.

자동 형변환 (묵시적 형변환)

작은 타입 → 큰 타입으로 넘길 때는 자바가 자동으로 형을 맞춰준다.

public static void printDouble(double value) {
    System.out.println("실수: " + value);
}

int i = 10;
printDouble(i);  // int → double 자동 형변환
  • intdouble보다 작은 타입
  • 자바가 자동으로 1010.0으로 변환해서 넘겨줌

명시적 형변환 (강제 형변환)

큰 타입 → 작은 타입으로 넘기면 컴파일 에러 발생!
이 경우 개발자가 명시적으로 형변환을 해줘야 한다.

public static void printInt(int value) {
    System.out.println("정수: " + value);
}

double d = 3.14;
printInt((int) d); // 명시적 형변환 필요 → 결과: 3
  • 실수형 3.14는 정수형보다 크므로 자동 변환 불가능
  • (int)를 붙여서 강제로 정수로 변환해야 함
  • 소수점은 잘려서 정수 부분만 남음
printInt(3.14); // ❌ 컴파일 오류!
  • 손실 가능성이 있으므로 자동 변환을 허용하지 않음

메서드 오버로딩 (Overloading)

같은 이름의 메서드라도, 매개변수의 타입이나 개수가 다르면 여러 개 만들 수 있다.
이를 오버로딩(overloading)이라고 한다.

오버로딩 예제

  • 이름은 모두 add지만, 매개변수 개수 또는 매개변수 타입이 다르기 때문에 각각 별개의 메서드로 인식됨
public static int add(int a, int b) {
    return a + b;
}

public static double add(double a, double b) {
    return a + b;
}

public static int add(int a, int b, int c) {
    return a + b + c;
}

System.out.println(add(1, 2));        // int 버전 호출
System.out.println(add(1.0, 2.0));    // double 버전 호출
System.out.println(add(1, 2, 3));     // 파라미터 3개짜리 버전 호출

⚠️ 주의: 반환값만 다르면 오버로딩이 안 된다!

public static int test() {
    return 1;
}

// 아래 메서드는 에러 발생!
public static double test() {
    return 1.0;
}
  • 컴파일러는 메서드 이름과 매개변수 시그니처만 보고 구분
  • 반환값은 오버로딩 판별 기준이 아니기 때문에 위 코드는 중복 정의 오류가 발생

오버로딩이 왜 필요할까?

  • 같은 동작이지만 입력 방식이 다를 때
    print(String) vs print(int)처럼 다양한 타입을 처리 가능

  • 확장성 향상
    같은 이름으로 처리 가능하므로 메서드 이름을 외우기 쉬움

  • 코드 가독성 증가
    의미 있는 메서드 이름을 일관되게 사용할 수 있음

profile
Clarinetist.dev

0개의 댓글