본문 바로가기
Java

자바(Java) 메서드

by 임혁진 2024. 10. 22.

메소드

메소드는 클래스 내부에 정의된 함수로, 특정 작업을 수행합니다. 메소드는 코드의 재사용을 가능하게 하고, 프로그램의 논리를 구조화하는 데 중요한 역할을 합니다.

메소드 기본 구조:

  1. 접근 제어자: 메소드의 접근 범위를 결정 (public, private, protected, etc.)
  2. 반환 유형: 메소드가 반환하는 값의 데이터 타입 (없으면 void)
  3. 메소드 이름: 메소드의 고유 이름
  4. 매개변수: 메소드가 받을 수 있는 입력값 (없을 수도 있음)
public int sum(int a, int b) {
    return a + b;  // a와 b를 더한 값을 반환
}

메소드 생성

메소드를 선언할 때는 접근 제어자, 반환 타입, 메소드 이름, 매개변수 목록을 정의합니다.

메소드 예제:

public class MyClass {
    // 메소드 선언
    public int addNumbers(int num1, int num2) {
        return num1 + num2;  // 두 숫자의 합을 반환
    }
}

메소드 호출

메소드를 생성한 후, 메소드를 호출하여 실행할 수 있습니다. 메소드를 호출할 때는 메소드 이름매개변수를 사용하여 호출합니다.

메소드 호출 예제:

public class MyClass {
    public int addNumbers(int num1, int num2) {
        return num1 + num2;
    }

    public static void main(String[] args) {
        MyClass myObj = new MyClass();  // 객체 생성
        int result = myObj.addNumbers(5, 3);  // 메소드 호출
        System.out.println(result);  // 결과 출력: 8
    }
}
  • addNumbers() 메소드는 두 숫자의 합을 계산하고, result에 값을 반환합니다.

매개변수와 반환

메소드에 여러 개의 매개변수를 전달할 수 있으며, 매개변수의 개수, 타입, 순서는 메소드 선언에 맞춰야 합니다.

매개변수 여러 개 사용:

public class MyClass {
    public void printInfo(String name, int age) {
        System.out.println("이름: " + name + ", 나이: " + age);
    }

    public static void main(String[] args) {
        MyClass myObj = new MyClass();
        myObj.printInfo("홍길동", 25);  // 이름: 홍길동, 나이: 25
    }
}

return 문

메소드는 값을 반환할 수 있습니다. 반환 값은 메소드의 반환 타입과 일치해야 하며, 반환된 값은 다른 메소드의 매개변수로 사용할 수 있습니다.

반환 값 사용 예제:

public class MyClass {
    public int multiply(int a, int b) {
        return a * b;  // 곱한 결과를 반환
    }

    public static void main(String[] args) {
        MyClass myObj = new MyClass();
        int product = myObj.multiply(4, 5);  // 곱셈 결과를 변수에 저장
        System.out.println(product);  // 결과 출력: 20
    }
}

void 메소드:

반환 값이 없는 경우, **void**를 반환 타입으로 사용하며, return 문은 메소드 종료를 의미합니다.

public void sayHello() {
    System.out.println("Hello!");
    return;  // 메소드 종료
}

재귀 메소드

재귀 메소드는 메소드가 자기 자신을 호출하는 방식으로 동작합니다. 주로 반복적인 작업이나 재귀적인 구조에서 사용됩니다.

재귀 메소드 예제 (팩토리얼 계산):

public int factorial(int n) {
    if (n == 1) {
        return 1;
    } else {
        return n * factorial(n - 1);  // 재귀 호출
    }
}
  • 재귀는 종료 조건이 반드시 필요합니다. 그렇지 않으면 무한 호출에 빠질 수 있습니다.

배열 추가 메소드 (Push)

배열은 고정 크기를 가지므로, 값을 추가하려면 새로운 배열을 생성해야 합니다.

배열 추가 메소드:

public int[] addElement(int[] arr, int newElement) {
    int[] newArr = Arrays.copyOf(arr, arr.length + 1);  // 배열 크기 증가
    newArr[newArr.length - 1] = newElement;  // 새로운 값 추가
    return newArr;
}

배열 삭제 메소드 (Pop)

배열에서 요소를 삭제하려면 배열 크기를 줄인 새로운 배열을 생성해야 합니다.

배열 삭제 메소드:

public int[] removeLastElement(int[] arr) {
    if (arr.length > 0) {
        return Arrays.copyOf(arr, arr.length - 1);  // 마지막 요소 제거
    } else {
        return arr;  // 배열이 비어 있으면 그대로 반환
    }
}

메소드의 이해

메소드 내에서 기본형 변수는 값이 복사되므로, 메소드 안에서 값이 변경되어도 원본 값에는 영향을 미치지 않습니다. 반면, 참조형 변수는 배열이나 객체를 참조하므로, 메소드 안에서 값을 변경하면 원본에도 영향을 미칩니다.

기본형 vs 참조형 예제:

public void changeValue(int a) {
    a = 10;  // 기본형은 값 복사
}

public void changeArray(int[] arr) {
    arr[0] = 10;  // 참조형은 참조
}