# method overloading

#### 메소드 오버로딩

* 같은 메소드 이름, 다른 매개변수
* 다른 자료형의 값들로 같은 성질의 작업을 정의할 때



```java
package sec04.chap06;

public class Ex01 {
    public static void main(String[] args) {
        int res1 = add(1, 2); // 🔴 스텝인투로 들어가 볼 것
        int res2 = add(3, 4, 5);
        double res3 = add(1.2, 3.4);
        String res4 = add("로보트 태권", 'V');
        String res5 = add('X', "Men");
    }

    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); }
}

```



### 재귀 메소드

* 스스로를 호출하는 메소드
* 호출시마다 메모리에 스택이 축적 - 초과시 스택오버플로우 _stack overflow_ 에러

```java
package sec04.chap06;

public class Ex02 {

    public static void main(String[] args) {
        upTo5(0);
//        upTo5(2);
//        upTo5(4);
    }
    static void upTo5 (int start) {
        System.out.println(start);
        if (start < 5) {
            upTo5(++start);
        } else {
            System.out.println("-- 종료 --");
        }
    }
}

```

<figure><img src="https://3814826491-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FJyHOwztPxBT3bLpisjCt%2Fuploads%2FUJXtNP7W6XV1zrS4VHTY%2FUntitled.png?alt=media&#x26;token=82fe9e16-09b5-40f0-aa5d-e73a088b6e82" alt=""><figcaption></figcaption></figure>

* 다른 메소드를 호출한 메소드는 호출된 메소드가 종료될 때까지 메모리에 남아 있음
* 호출이 반복될수록 위와 같이 메소드들이 쌓이게 됨
