[JAVA] 메소드

728x90

자바에서 메소드(Method)는 클래스 내에서 특정 작업을 수행하는 코드 블록입니다. 메소드는 객체지향 프로그래밍에서 기능을 캡슐화하고 코드의 재사용성을 높이는 중요한 요소입니다.

 

1. 자바 메소드의 구조

메소드는 일련의 문장들로 이루어진 코드 블록입니다. 메소드는 다음과 같은 구조를 가지고 있습니다.

[접근 제어자] [기타 제어자] 반환타입 메소드이름([매개변수 목록]) {
    // 메소드의 실행 코드
    return 반환값; // 반환타입이 void가 아닌 경우
}

1. 접근 제어자: 메소드에 접근할 수 있는 범위를 지정합니다. 일반적으로 public, private, protected, default 중 하나를 사용합니다.
2. 기타 제어자: 메소드의 특성을 추가적으로 제어하기 위한 키워드입니다. 예를 들어 static, final 등이 있습니다.
3. 반환타입: 메소드가 실행을 완료한 후 반환하는 값의 데이터 타입입니다. 메소드가 반환값이 없는 경우에는 void로 지정합니다.
4. 메소드 이름: 메소드를 호출할 때 사용되는 식별자입니다.
5. 매개변수 목록: 메소드에 전달되는 값을 저장하기 위한 변수입니다. 매개변수가 필요 없는 경우 비워둘 수도 있습니다.
6. 메소드 실행 코드: 메소드가 실제로 수행하는 작업을 구현하는 코드입니다.
7. 반환값: 메소드의 실행 결과로 반환되는 값입니다. 반환타입이 void가 아닌 경우 메소드는 반드시 해당 타입의 값을 반환해야 합니다.


2. 자바 메소드의 특징

1) 코드의 재사용성

메소드를 사용하면 동일한 기능을 여러 곳에서 호출하여 재사용할 수 있습니다. 이로 인해 코드의 중복을 줄이고 유지 보수성을 향상시킬 수 있습니다.

2) 모듈화

메소드를 사용하여 프로그램을 작은 단위로 분할하고 조립할 수 있습니다. 각 메소드는 특정 기능을 수행하므로 전체적인 코드의 가독성과 이해도를 높여줍니다.

3) 매개변수와 인자

메소드는 매개변수를 통해 외부로부터 데이터를 전달받을 수 있습니다. 이를 통해 메소드의 작업을 유연하게 조정할 수 있습니다.

5) 반환값

메소드는 실행 결과로 값을 반환할 수 있습니다.

 

3. 메소드 예제

public class Main {
    public static void main(String[] args) {


        //메소드 실행 메소드 밖에서 '선언'하고 실행메소드 안에서 '실행'한다.

        //add 메소드 실행
        int addValue = add(1,2);
        System.out.println(addValue); //출력: 3

        //  메소드 중첩
        int int2 = add(add(6, 7), add(8, 9)); // add(13,17) -> 30
        System.out.println(int2);

        if (checkIfContain("Hello World","hello")) {//Hello World에 hello가 포함되므로 true 반환
            System.out.println("포함됨"); //출력
        } else {
            System.out.println("포함 안 됨"); //출력안됨
        }

        double avg = getAverage(new int[] {3, 5, 4, 13, 7});
        System.out.println("평균: "+avg); //출력: 평균: 6.4

        int[] numbers = {3, 5, 9, 2, 8, 1, 4};

        // getMaxAndMin의 반환값은 {max, min}이므로 0번 인덱스의 값은 max, 1번인덱스의 값은 min이 됨
        int maxNumbers = getMaxAndMin(numbers)[0]; //
        int minNumbers = getMaxAndMin(numbers)[1];
        System.out.println("maxNumbers: "+maxNumbers); //출력: maxNumbers: 9
        System.out.println("minNumbers: "+minNumbers); //출력: minNumbers: 1

        //...연산자 활용 예제
        double avg2 = getAverage2(3, 91, 14, 27, 4);
        System.out.println("avg2: "+avg2); //출력: avg2: 27.8
        //  배열을 넣으면 자동으로 펼쳐져 인식됨
        int[] numbers2 = {3, 91, 14, 27, 4};
        double avg3 = getAverage2(numbers2);
        System.out.println("avg3: "+avg3); //출력: avg3: 27.8 -> 배열로 넣어도 위와 동일한 값이 나타남

        String s = spotTest2("a","b","c");
        System.out.println("s: "+s); //출력: s: abc
    }

    //메인 메소드 외부

    static int add (int num1, int num2) {
        return num1 + num2;
    }

    static boolean checkIfContain (String text, String token) {
        //text와 token을 모두 소문자로 바꾼 후 token이 text에 포함되는지 확인 -> 포함하면 true 반환, 포함하지 않으면 false반환
        return text.toLowerCase().contains(token.toLowerCase());
    }

    static double getAverage (int[] nums) {

        double sum = 0;
        for (int num : nums) {
            sum += num;
        }

        return sum / nums.length;
    }

    //  자바의 메소드는 하나의 값만 반환 가능
    //  여러 값을 반환하려면 배열 또는 객체를 활용
    static int[] getMaxAndMin (int[] nums) {

        int max = nums[0];
        int min = nums[0];
        for (int num : nums) {
            max = max > num ? max : num;
            min = min < num ? min : num;
        }

        return new int[] {max, min};
    }

    //  ... 연산자 : 해당 위치 뒤로 오는 연산자들을 배열로 묶음
    //  매개변수가 몇개인지 확실하지 않을 때 사용
    static double getAverage2(int... nums) {
        double result = 0.0;
        for (int num : nums) {
            result += num;
        }
        return result / nums.length;
    }

    // ...연산자는 두개 이상의 매개변수에 사용할 수 없고 두개 이상의 매개변수가 있다면 가장 마지막에만 사용할 수 있다.
//    static String spotTest(String... first, String... second){ //컴파일 오류 발생
//        String sumString = "";
//
//        return sumString;
//    }

//    static String spotTest2(String... first, String second){ // 컴파일 오류 발생
//        String sumString = "";
//
//        return sumString;
//    }

    static String spotTest2(String first, String... second){ // 컴파일 오류 발생

        String secondResult = String.join("", second);

        return first+ secondResult;
    }

}

4. 메소드 오버로딩

메소드 오버로딩이란 같은 이름의 메소드나 생성자를 여러 개 정의하는 것을 말합니다.

오버로딩을 사용하면 동일한 이름을 가진 다양한 매개변수를 가진 메서드를 정의할 수 있으며, 매개변수의 개수, 타입 또는 순서가 다를 때 해당 메서드를 구별하여 호출할 수 있습니다.

 

이러한 메소드 오버로딩을 사용하는 이유는 자바가 정적타입이기 때문입니다.  따라서 동일한 동작을 수행하지만 다른 데이터 유형을 다루는 경우, 메서드를 오버로딩하여 같은 이름으로 다양한 데이터 유형을 처리할 수 있습니다.


public class Main {
    public static void main(String[] args) {

        int result = add(1, 2);
        System.out.println(result);// 출력: 3
        int result2 = add(3, 4, 5);
        System.out.println(result2); //출력: 12
        double result3 = add(1.2, 3.4);
        System.out.println(result3); // //출력: 4.6
        String result4 = add("ctrl+", 'V'); //출력: ctrl+V
        System.out.println(result4);
        String result5 = add('X', "-mas");
        System.out.println(result5);//출력: X-mas

    }

    //메인 메소드 외부
    static int add(int a, int b) { return a + b; }

    //  매개변수의 개수가 다름
    static int add(int a, int b, int c) { return a + b + c; }

    //  매개변수의 자료형이 다름
    static double add(double a, double b) { return a + b; }

    //  매개변수의 자료형 순서가 다름
    static String add(String a, char b) { return a + b; }
    static String add(char a, String b) { return a + b; }

    //  매개변수가 동일하면서 반환 자료형만 다른 것은 오버로딩이 되지 않는다.
    //  static double add(int a, int b) { return (double) (a + b); }

}

 

 

 

'JAVA Programming > Java' 카테고리의 다른 글

[JAVA] 좋은 객체지향 설계의 5가지 원칙(SOLID)  (0) 2024.12.12
[JAVA] 키보드 입력 받기(Scanner)  (0) 2024.07.14
[JAVA] 제어문  (0) 2024.07.09
[JAVA] 타입 추론  (0) 2024.07.09
[JAVA] 배열  (0) 2024.07.09