이름이 같은 메서드(method)를 여러개 정의하는걸 오버로딩(overloading)이라고 합니다.
오버로딩을 하기 위해선 아래 조건을 만족해야 합니다.
- 메서드 이름이 같아야 한다
- 매개변수 개수나 타입이 달라야 한다
- (반환 타입은 관계 없음)
즉, 메서드 시그니쳐(signature)가 달라야 합니다. 자바에서 메서드 시그니쳐는 메서드 이름과 매개변수 개수, 타입으로 구성됩니다.
void doSomething(String[] x); // doSomething(String[])
void doSomething(String x); // doSomething(String)
예제 1.
시그니처가 다르니 오버로딩입니다.
int doSomething(int x); // doSomething(int)
void doSomething(int y) throws Exception; // doSomething(int)
예제 2.
시그니처가 같으니 오버로딩이 되지 않습니다. 이 경우, 컴파일 시 'doSomething(int)' is already defined in 'Main' 이런 오류가 나오게 됩니다.
왜 안되는지 생각해보면, doSomething(1) 이런식으로 호출했을 때 두 메소드의 시그니쳐가 같기 때문에 어느 메소드를 호출해야할지 컴파일러가 결정할 수 없기 때문입니다.
반응형
'프로그래밍 > Java' 카테고리의 다른 글
[Java8] 매개변수 3개 이상인 함수형 인터페이스 만드는 법 (0) | 2022.01.08 |
---|---|
[Java] finally 블록 (0) | 2021.12.23 |
[Java] 배열(Array) (0) | 2021.12.18 |
[Java] Labeled statement (0) | 2021.12.18 |
[Intellij] No candidates found for method call ... 해결방법 (0) | 2021.10.14 |