메소드 오버로딩

Moom2n·2024년 2월 22일
0

Java

목록 보기
3/26

- 정의

static int add(int i, int j) {
    return i + j;
}

static int add(int i, int j, int k) {
    return i + j + k;
}

public static void main(String[] args) {
    int i = Add(1, 2);
    int j = Add(1, 2, 3);
    System.out.println(i + j);
}

같은 이름의 메소드여도, 파라미터 개수에 맞는 메소드로 실행된다.
만약 파라미터 개수가 같은데, 서로 타입이 다르다면 파라미터 타입이 같은 메소드로 실행된다.
=> 이를 메소드 오버로딩이라고 한다. 이는 다형성 중 하나의 방법이다.

정적 바인딩 : 컴파일 타이밍에 로딩 다 됨.
얼리 바인딩(메소드 오버로딩) VS 레이트 바인딩(메소드 오버라이딩)

- 메소드 시그너처

컴파일러는 시그너처를 사용하여 클래스의 메소드를 구분합니다. 각 클래스에서 각 메소드의 시그너처는 유일해야 합니다.
메소드 시그너처는 메소드의 이름, 파라미터의 타입, 파라미터의 개수로 구성됩니다.

static int doSomething (int n) {
}

static String doSomething (int n) {
}

메소드 시그너처는 return 타입을 포함하지 않습니다. 위 두 메소드는 같은 시그너처로 판단되어 컴파일시에 오류를 출력합니다.

- 오버로드 된 메소드 사용

public class Greetings {
    enum TimeOfDay {Morning, Afternoon, Evening}

    static void greet() {
        System.out.println("Hello");
    }

    static void greet(String name) {
        System.out.println("Hello " + name);
    }

    static void greet(String name, TimeOfDay timeOfDay) {
        String message = "";

        switch(timeOfDay) {
            case Morning:
                message = "Good morning, ";
                break;
            case Afternoon:
                message = "Good Afternoon, ";
                break;
            case Evening:
                message = "Good evening";
                break;
        }
        System.out.println(message + name);
    }

    public static void main(String[] args) {
        greet();
        greet("Kitty");
        greet("Crab", TimeOfDay.Morning);
    }
}

디버깅과 유지 보수가 어려움

0개의 댓글

관련 채용 정보