Programming/Java

[JAVA] 오버로딩(Overloading)

Supreme_YS 2021. 10. 11. 18:45

남궁성님의 자바의 정석을 기반으로 작성했습니다.


- 오버로딩 (Overloading) : 과적하다. 한 클래스 안에 같은 이름의 메서드를 여러개 작성한 것. 대표적인 예로 Java의 println() 메서드가 있습니다. 아래의 코드처럼 println()이라는 이름으로 다양한 데이터 형에 따른 println() 로직처리를 할 수 있게 됩니다.

void println()
void println(boolean x)
void println(int x)
void println(float x)
void println(double x)
void println(String x)
void println(Object x)
void println(char x)
void println(char[] x)
void println(long x)

- 오버로딩이 성립하기 위한 조건 

1. 메서드 이름이 같아야 합니다.

2. 매개변수의 갯수 또는 데이터 타입이 달라야 합니다.

3. 반환타입은 영향이 없습니다.

/* 오버로딩이 아닌 경우 */

// 중복 정의 예시 1
// 메서드 이름은 같지만 매개변수 갯수 및 타입이 일치하기 때문에 중복 정의
int add(int x, int y) { return x + y; }
int add(int a, int b) { return a + b; }

// 중복 정의 예시 2
// 메서드 이름은 같지만 매개변수 갯수 및 타입이 일치하기 때문에 중복 정의
// 반환타입(int, long)은 영향을 미치지 않기 때문에 중복 정의
int add(int x, int y) { return x + y; }
long add(int x, int y) { return (long)(x + y); }

/* 오버로딩이 성립하는 경우 */
int add(int x, long y) { return x + y; }
int add(long x, int y) { return x + y; }
// 단, add(3,3)으로 메서드를 호출한다면 어느 메서드를 호출해야 하는지 컴파일러가 구분하지 못한다.
// 따라서, ambiguous 에러를 발생시킨다.