Java - 메서드(Method)

develkkm·2025년 9월 9일

0부터 시작하는 Java

목록 보기
9/27

메서드(Method)


메서드가 필요한 이유

프로그램에서 같은 코드를 반복 작성하면 불편하고 유지보수도 어렵다.
예를 들어, 두 수를 더하는 연산을 여러 번 반복해야 한다고 해보자.

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

int x = 10;
int y = 20;
System.out.println(x + "+" + y + " 연산 수행");
int sum2 = x + y;

같은 연산 로직이 중복되어 코드가 지저분해진다.
이 문제를 해결하는 방법이 바로 메서드(Method)다.


메서드 기본 개념

수학의 함수(Function)처럼, Java의 메서드도 입력을 받아 어떤 처리를 하고 결과를 반환한다.

예시: 두 수를 더하는 함수

add(1,2) → 3  
add(5,6) → 11  

Java에서는 함수를 메서드라고 부른다.


메서드 정의와 사용

public static int add(int a, int b) {
    System.out.println(a + "+" + b + " 연산 수행");
    int sum = a + b;
    return sum;
}
  • 선언부 : public static int add(int a, int b)

    • public static : 지금은 기본적으로 붙여서 사용한다.
    • int : 반환 타입(Return Type)
    • add : 메서드 이름
    • (int a, int b) : 매개변수(Parameter)
  • 본문 : { ... } 안의 실행 코드


메서드 호출

메서드는 이름을 통해 호출할 수 있다.

int result1 = add(5, 10);
int result2 = add(15, 20);

호출하면 입력값(Argument)이 매개변수에 복사되고, 실행 후 결과를 반환한다.


매개변수와 인수

  • 매개변수(Parameter) : 메서드 정의 시 사용하는 변수
  • 인수(Argument) : 메서드 호출 시 전달하는 실제 값
public static int call(String name, int age) { ... }

call("Kim", 26); // "Kim", 26 → 인수 / name, age → 매개변수

반환(Return)

메서드 실행 후 결과를 반환하려면 return문을 사용한다.

public static boolean isOdd(int number) {
    if (number % 2 == 1) {
        return true;
    } else {
        return false;
    }
}
  • 반환 타입이 있으면 반드시 값을 반환해야 한다.
  • return을 만나면 메서드는 즉시 종료된다.
  • 반환 타입이 없으면 void를 사용한다.
public static void printHeader() {
    System.out.println("= 프로그램 시작 =");
}

값 전달 방식

Java는 항상 값을 복사해서 전달한다.

public static void main(String[] args) {
    int num1 = 5;
    changeNumber(num1);
    System.out.println("호출 후 num1: " + num1); // 5
}

public static void changeNumber(int num2) {
    num2 = num2 * 2;
}

num1의 값 5가 복사되어 num2에 들어간다.
따라서 num2를 바꿔도 num1에는 영향을 주지 않는다.

값을 바꾸려면 반환값을 받아야 한다.

num1 = changeNumber(num1);

메서드와 형변환

메서드를 호출할 때, 매개변수 타입과 인수 타입이 다르면 형변환이 필요하다.

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

public static void printNumber(int number) {
    System.out.println("정수 출력: " + number);
}

public static void main(String[] args) {
    double d = 1.5;
    printNumber((int) d); // double → int 강제 변환
}

출력:

정수 출력: 1

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

public static void printNumber(double number) {
    System.out.println("실수 출력: " + number);
}

public static void main(String[] args) {
    int n = 100;
    printNumber(n); // int → double 자동 변환
}

출력:

실수 출력: 100.0

메서드 오버로딩

같은 이름의 메서드를 매개변수 타입이나 개수로 구분할 수 있다.

int add(int a, int b)
int add(int a, int b, int c)
double add(double a, double b)
  • 가능: 이름 같고 매개변수 다름
  • 불가능: 이름 같고 반환 타입만 다름

메서드 구분을 시그니처(Signature: 이름 + 매개변수 타입/순서)라 한다.


메서드 사용의 장점

  • 코드 재사용 : 중복 제거
  • 가독성 향상 : 이름으로 역할이 드러남
  • 모듈화 : 기능 단위로 분리 가능
  • 유지보수 용이 : 특정 기능만 수정 가능
  • 테스트 용이성 : 독립적으로 테스트 가능
profile
알던것을 더 확실하게

0개의 댓글