코딩 스쿨 Java

언어선택 : HTMLCSSJAVAJAVASCRIPTMYSQLSQL PHP

Java Methods

Java Methods: 자바 메소드 가이드

  • *메소드(Method)**는 Java에서 특정 작업을 수행하는 코드 블록을 의미하며, 코드의 재사용유지보수를 용이하게 합니다. 메소드를 사용하면 프로그램의 여러 부분에서 같은 작업을 반복하지 않고, 메소드를 호출해 동일한 작업을 수행할 수 있습니다.

이 가이드는 Java에서 메소드를 선언하고 사용하는 방법, 그리고 다양한 메소드의 종류와 활용법을 설명합니다.


1. 메소드 선언

메소드는 반환 타입, 메소드 이름, 매개변수 목록으로 구성됩니다. 메소드는 호출되면 특정 작업을 수행하고, 작업이 끝나면 결과를 반환하거나 반환하지 않을 수 있습니다.

기본 구문:

반환타입 메소드이름(매개변수목록) {
    // 메소드가 수행할 작업
    return 반환값;  // 반환 타입이 void가 아니면 반환값 필요
}

사용 예:

public class MethodExample {
    // 정수를 두 개 받아서 더한 값을 반환하는 메소드
    public static int add(int a, int b) {
        int sum = a + b;
        return sum;  // 반환 타입이 int이므로 정수 반환
    }

    public static void main(String[] args) {
        int result = add(5, 3);  // 메소드 호출
        System.out.println("더한 값: " + result);  // 출력: 더한 값: 8
    }
}

설명:

  • 메소드 선언: public static int add(int a, int b)는 정수 두 개를 매개변수로 받아 그 합을 반환하는 메소드입니다.
  • 메소드 호출: add(5, 3)을 호출하여 5와 3을 더한 값을 반환받고 출력합니다.

2. 반환 타입

메소드는 작업을 수행한 후 값을 반환할 수 있으며, 이때 반환되는 값의 데이터 타입을 반환 타입으로 명시합니다. 반환값이 없는 경우 **void**를 사용합니다.

반환값이 있는 메소드:

public class MethodReturnExample {
    // 두 수를 더한 값을 반환하는 메소드
    public static int sum(int x, int y) {
        return x + y;
    }

    public static void main(String[] args) {
        int result = sum(10, 20);  // 메소드 호출
        System.out.println("합계: " + result);  // 출력: 합계: 30
    }
}

반환값이 없는 메소드 (void):

public class VoidMethodExample {
    // 메시지를 출력하는 메소드
    public static void printMessage() {
        System.out.println("안녕하세요, Java!");
    }

    public static void main(String[] args) {
        printMessage();  // 메소드 호출
    }
}

설명:

  • int sum(int x, int y): 두 수의 합을 반환하는 메소드입니다.
  • void printMessage(): 반환값이 없으며, 메시지를 출력하는 메소드입니다.

3. 매개변수 (Parameters)

메소드는 **매개변수(parameter)**를 받아서 작업을 수행할 수 있습니다. 매개변수는 메소드가 호출될 때 입력되는 값을 의미하며, 이를 통해 메소드에 데이터를 전달할 수 있습니다.

사용 예:

public class MethodParameterExample {
    // 이름을 받아서 인사 메시지를 출력하는 메소드
    public static void greet(String name) {
        System.out.println("안녕하세요, " + name + "!");
    }

    public static void main(String[] args) {
        greet("홍길동");  // 메소드 호출
        greet("이순신");  // 메소드 호출
    }
}

설명:

  • greet(String name): 이름을 매개변수로 받아 인사 메시지를 출력하는 메소드입니다.
  • 결과: 각각 "안녕하세요, 홍길동!", **"안녕하세요, 이순신!"**이 출력됩니다.

4. 메소드 오버로딩 (Method Overloading)

메소드 오버로딩같은 이름의 메소드를 여러 개 정의하는 것을 의미합니다. 단, 각 메소드는 매개변수의 타입, 개수, 순서가 달라야 합니다. 이를 통해 같은 기능을 수행하지만 입력이 다른 경우를 처리할 수 있습니다.

사용 예:

public class MethodOverloadingExample {
    // 정수 두 개를 더하는 메소드
    public static int add(int a, int b) {
        return a + b;
    }

    // 실수 두 개를 더하는 메소드 (오버로딩)
    public static double add(double a, double b) {
        return a + b;
    }

    public static void main(String[] args) {
        System.out.println("정수 더하기: " + add(5, 3));  // 출력: 8
        System.out.println("실수 더하기: " + add(5.5, 3.2));  // 출력: 8.7
    }
}

설명:

  • 메소드 오버로딩을 통해 같은 이름의 메소드 add를 두 개 정의했습니다.
  • 정수실수에 대해 각각 다른 메소드가 호출됩니다.

5. 가변인자 (Varargs)

Java에서는 **가변인자(varargs)**를 사용해 여러 개의 인자를 배열처럼 받을 수 있습니다. 가변인자는 **...**을 사용하여 선언하며, 인자의 개수가 유동적일 때 유용합니다.

사용 예:

public class VarargsExample {
    // 여러 개의 정수를 받아서 합계를 계산하는 메소드
    public static int sum(int... numbers) {
        int total = 0;
        for (int num : numbers) {
            total += num;
        }
        return total;
    }

    public static void main(String[] args) {
        System.out.println("합계: " + sum(1, 2, 3));  // 출력: 6
        System.out.println("합계: " + sum(10, 20, 30, 40, 50));  // 출력: 150
    }
}

설명:

  • int... numbers: 가변인자를 통해 여러 개의 정수를 받을 수 있습니다.
  • 결과: 입력된 인자의 합을 계산하여 각각 6150을 출력합니다.

6. 재귀 메소드 (Recursive Method)

재귀 메소드자기 자신을 호출하는 메소드입니다. 재귀는 주로 재귀적 구조를 가진 문제를 해결할 때 사용됩니다. 그러나 재귀를 사용할 때는 기저 조건을 명확히 설정하여 무한 루프를 방지해야 합니다.

사용 예: 팩토리얼 계산

public class RecursiveMethodExample {
    // n의 팩토리얼을 계산하는 재귀 메소드
    public static int factorial(int n) {
        if (n == 1) {
            return 1;  // 기저 조건
        }
        return n * factorial(n - 1);  // 재귀 호출
    }

    public static void main(String[] args) {
        System.out.println("5의 팩토리얼: " + factorial(5));  // 출력: 120
    }
}

설명:

  • factorial 메소드는 자기 자신을 호출하며, 기저 조건으로 n == 1일 때 1을 반환합니다.
  • 결과: 5의 팩토리얼인 120이 출력됩니다.

7. 메소드의 접근 제어자

Java 메소드는 접근 제어자를 사용하여 메소드의 접근 범위를 제어할 수 있습니다. 주요 접근 제어자는 다음과 같습니다:

  • public: 모든 클래스에서 접근 가능.
  • private: 선언된 클래스 내부에서만 접근 가능.
  • protected: 동일 패키지와 상속받은 클래스에서 접근 가능.
  • default: 동일 패키지 내에서 접근 가능.

사용 예:

public class AccessModifiersExample {
    // public 메소드: 어디서든 호출 가능
    public static void publicMethod() {
        System.out.println("Public method 호출됨.");
    }

    // private 메소드: 클래스 내부에서만 호출 가능
    private static void privateMethod() {
        System.out.println("Private method 호출됨.");
    }

    public static void main(String[] args) {
        publicMethod();  // 호출 가능
        privateMethod();  // 호출 가능 (같은 클래스 내이므로)
    }
}

설명:

  • public 메소드는 클래스 외부에서도 호출할 수 있습니다.
  • private 메소드클래스 내부에서만 호출이 가능합니다.

8. 메소드의 매개변수

전달 방식

Java에서 메소드는 값에 의한 호출 (call by value) 방식으로 매개변수를 전달합니다. 즉, 기본 타입은 값이 복사되어 전달되고, 참조 타입은 객체의 참조가 전달됩니다.

사용 예 (값에 의한 호출):

public class CallByValueExample {
    public static void changeValue(int num) {
        num = 100;  // num의 값 변경
    }

    public static void main(String[] args) {
        int value = 50;
        changeValue(value);  // 값이 복사되어 전달
        System.out.println("value: " + value);  // 출력: 50 (원본 값은 변경되지 않음)
    }
}

사용 예 (참조 타입 전달):

public class CallByReferenceExample {
    public static void changeArray(int[] arr) {
        arr[0] = 100;  // 배열의 첫 번째 요소 값 변경
    }

    public static void main(String[] args) {
        int[] numbers = {1, 2, 3};
        changeArray(numbers);  // 배열의 참조가 전달됨
        System.out.println("numbers[0]: " + numbers[0]);  // 출력: 100 (원본 배열이 변경됨)
    }
}

설명:

  • 기본 타입은 값이 복사되어 전달되므로 원본 값은 변경되지 않습니다.
  • 참조 타입은 객체의 참조가 전달되므로, 메소드 내에서 객체의 값이 변경됩니다.

요약

Java의 메소드는 특정 작업을 수행하는 코드 블록으로, 코드 재사용유지보수를 용이하게 합니다. 메소드는 반환 타입, 매개변수, 접근 제어자 등을 통해 다양한 방식으로 정의할 수 있으며, 오버로딩, 가변인자, 재귀 등을 사용하여 복잡한 문제를 효율적으로 처리할 수 있습니다. 또한, Java는 값에 의한 호출 방식으로 매개변수를 전달하므로, 기본 타입과 참조 타입의 차이를 이해하는 것이 중요합니다.


copyright ⓒ 스타트코딩 all rights reserved.
이메일 : startcodingim@gamil.com