# method

* 타 언어의 함수 function 과 같은 개념&#x20;
* 자바는 모든 것이 클래스의 요소이므로 메소드 method 라 부름



main() 메소드

* 자바 응용프로그램의 실행 시작 메소드
* 반드시 static, public, void, 매개 변수 타입은 문자열 배열&#x20;

<figure><img src="https://3814826491-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FJyHOwztPxBT3bLpisjCt%2Fuploads%2FdidcmbAIIVDeurGTXIIh%2FScreenshot_78.png?alt=media&#x26;token=e4454d6a-9a59-4efa-a25e-dd2fc1b058bb" alt=""><figcaption></figcaption></figure>

```java
package sec04.chap05;

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

        String a = args[0];
        String b = args[1];
        String c = args[2];
        String d = args[3];

    }
}

```

<figure><img src="https://3814826491-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FJyHOwztPxBT3bLpisjCt%2Fuploads%2FtyMwWPslsvHeCLrzxhRe%2FScreenshot_82.png?alt=media&#x26;token=12e2d920-492a-4a5c-b514-38536c6fbe56" alt=""><figcaption></figcaption></figure>



<figure><img src="https://3814826491-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FJyHOwztPxBT3bLpisjCt%2Fuploads%2FYawf4Kn1SBmjP0tNnz7w%2FScreenshot_81.png?alt=media&#x26;token=0400a8e3-16f6-4709-a9da-f9bc4cf26984" alt=""><figcaption></figcaption></figure>



<figure><img src="https://3814826491-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FJyHOwztPxBT3bLpisjCt%2Fuploads%2FMdk0RKAmRiTf5CU8HavM%2FScreenshot_83.png?alt=media&#x26;token=7da34d09-8c9a-4943-920d-e1544cf826c1" alt=""><figcaption></figcaption></figure>

<figure><img src="https://3814826491-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FJyHOwztPxBT3bLpisjCt%2Fuploads%2F4YJ3cnElMl05M1R9REla%2FScreenshot_84.png?alt=media&#x26;token=9c2d7bda-f118-4cc4-a397-665b816daea1" alt=""><figcaption></figcaption></figure>

예제 3-13





### 메소드의 의미 1 . 반복을 최소화

```java
	double x = 3, y = 4;

        System.out.printf("%f + %f = %f%n", x, y, x + y);
        System.out.printf("%f - %f = %f%n", x, y, x - y);
        System.out.printf("%f * %f = %f%n", x, y, x * y);
        System.out.printf("%f / %f = %f%n", x, y, x / y);

        x = 10; y = 2;

        System.out.printf("%f + %f = %f%n", x, y, x + y);
        System.out.printf("%f - %f = %f%n", x, y, x - y);
        System.out.printf("%f * %f = %f%n", x, y, x * y);
        System.out.printf("%f / %f = %f%n", x, y, x / y);

        x = 7; y = 5;

        System.out.printf("%f + %f = %f%n", x, y, x + y);
        System.out.printf("%f - %f = %f%n", x, y, x - y);
        System.out.printf("%f * %f = %f%n", x, y, x * y);
        System.out.printf("%f / %f = %f%n", x, y, x / y);
```



```java
package sec04.chap05;

public class Ex01 {
    public static void main(String[] args) {
        double xx = 3, yy = 4;
        addSubtMultDiv(xx, yy);

        xx = 10; yy = 2;
        addSubtMultDiv(xx, yy);

        xx = 7; yy = 5;
        addSubtMultDiv(xx, yy);
    }

    //  ⭐️ 메인 메소드 외부에 선언할 것
    static void addSubtMultDiv (double a, double b) {
        System.out.printf("%f + %f = %f%n", a, b, a + b);
        System.out.printf("%f - %f = %f%n", a, b, a - b);
        System.out.printf("%f * %f = %f%n", a, b, a * b);
        System.out.printf("%f / %f = %f%n", a, b, a / b);
    }
}

```



### 메소드의 의미2. 값을 받고 연산하여 결과값을 반환 - 함수

```java
package sec04.chap05;

public class Ex02 {
    public static void main(String[] args) {
        //  ⭐️ 반환한다는 것: 바꿔 쓸 수 있다는 것
        //  메서드 실행문을 메서드의 반환값으로 치환
        int int1 = add(2, 3);
        System.out.println(int1);

        System.out.println(add(4, 5));

        int int2 = add(add(6, 7), add(8, 9));
        System.out.println(int2);
    }


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

```





```java
static boolean checkIfContain (String text, String token) {
    return text.toLowerCase().contains(token.toLowerCase());
}
```

```java
        System.out.println("\n- - - - -\n");
    if (checkIfContain("Hello World","hello")){
            System.out.println("포함됨");
    }else {
            System.out.println("포함 안 됨");
    }
```

<figure><img src="https://3814826491-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FJyHOwztPxBT3bLpisjCt%2Fuploads%2F5IdfzR7FZDcrIw2OXm5K%2Fadd.png?alt=media&#x26;token=f80387b9-92be-437d-a7ef-00b5a52cbbb8" alt=""><figcaption></figcaption></figure>

* `static` : 정적 메소드 _(클래스 메소드)_ 에서 호출하려면(main 등) 붙어야 함
  * 정적이 아닌 메소드 _(인스턴스 메소드)_ 는 객체지향 섹션에서 배울 것
* **매개변수** _parameter_ : 각각 자료형과 변수명을 적음. 없을 시 빈 괄호
  * 호출할 때 넣는 값 (`add(3, 4)` 의 3과 4)을 **인자&#x20;**_**argument**_ 라고 함
* `return` : 반환하는 값이 있을 때, **맨 마지막에** 붙임





### 메소드 사용 예시

```java
package sec04.chap05;

public class Ex03 {
    public static void main(String[] args) {
        sayHello();

        int count1 = getCount();
        int count2 = getCount();
        int count3 = getCount();
        int count4 = getCount();

    }


    //  매개변수도, 반환값도 없는 메소드
    static void sayHello () {
        System.out.println("안녕하세요!");
    }

    static int count = 0;

    //  매개변수 없이 값만 반환하는 메소드
    //  외부 변수 값을 변화시킴 (static이므로 static 변수만 가능)
    static int getCount () {
        System.out.println("카운트 증가");
        return ++count;
    }

}

```

* `return` 을 `println` 윗줄로 옮겨 볼 것
  * `return` 은 블록을 종료하므로 이후의 코드 무효화 - 컴파일 에러 발생
* 반환값의 자료형을 바꿔 볼 것 \*(`short`, `long`, 기타…)
  * 반환값이나 인자의 자료형에 어긋날 경우 컴파일 에러 발생
* ⚠️ 외부의 변수 값을 바꾸는 것은 좋은 메서드가 아님



```java
package sec04.chap05;

public class Ex04 {

    public static void main(String[] args) {
        double avg = getAverage(new int[] {3, 5, 4, 13, 7});
    }

    static double getAverage (int[] nums) {

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

        return sum / nums.length;
    }
}
```



```java
package sec04.chap05;

public class Ex05 {

    public static void main(String[] args) {
        int[] numbers = {3, 5, 9, 2, 8, 1, 4};

        //  변수에 담아 보다 효율적으로 바꿔볼 것
        int maxOfNumbers = getMaxAndMin(numbers)[0];
        int minOfNumbers = getMaxAndMin(numbers)[1];
    }

    //  자바의 메소드는 하나의 값만 반환 가능
    //  여러 값을 반환하려면 배열 또는 이후 배울 객체를 활용
    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};
    }

}

```

