남궁성님의 자바의 정석을 기반으로 작성했습니다.
- 오버로딩 (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 에러를 발생시킨다.
'Programming > Java' 카테고리의 다른 글
[JAVA] 생성자 this(), 참조변수 this (0) | 2021.10.11 |
---|---|
[JAVA] 생성자(constructor), 자바 생성자 (0) | 2021.10.11 |
[JAVA] return문, return, 리턴문, 호출스택 (0) | 2021.10.09 |
[JAVA] 자바의 메서드(Method) (0) | 2021.10.08 |
[JAVA] 클래스 변수와 인스턴스 변수 (0) | 2021.10.08 |