본문 바로가기
back-end/JAVA

16)객체지향-오버로딩(overloading)

by 모두의 향연 2021. 5. 20.
728x90
반응형

16-1) 오버 로딩이란?

한 클래스 안에 같은 이름의 메서드 여러 개를 정의하는 것(메서드:메서드 이름=n:1)

overloading:과적하다

대표적인 예로 println을 들 수 있습니다. 

void println()

void println(boolean x)

void println(char x)

void println(char [] x) 

등등..

 

 

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

①메서드 이름이 같아야 한다.

②매개변수의 개수 or 타입이 달라야 한다.

반환 타입은 영향 없다.

 

<예시 1>

오버로딩 예시1

① 메서드 이름 같음

② 개수는 같으니 타입이 달라야 하는데 int로 타입도 똑같음(오류)

③ 반환 타입 상관없음

 

 

 

<예시 2>

오버로딩 예시2

① 메서드 이름 같음

② 개수는 같으니 타입이 달라야 하는데 int로 타입도 똑같음(오류)

③ 반환 타입 상관없음(하나는 int/하나는 long이든 상관없음)

 

 

 

<예시 3>

오버로딩 예시3

 메서드 이름 같음

 개수는 같으니 타입이 달라야 하는데 타입이 다름

 반환타입 상관없음

->오버로딩 성립!

잠깐!!!!

add(3,3L)을 호출하면 윗줄이 호출되겠죠.

그럼 add(3,3)을 호출하면 윗줄이 호출될까요? 아랫줄이 호출될까요?

둘 다 되잖아요. 그래서 오류가 납니다. 그걸 'ambiguous(모호한)하다'라고 합니다.

에러 메시지: 'The method add(int, long) is ambiguous for the type...'

 

 

 

<정리 퀴즈>

1. 오버로딩이란?

같은 이름의 메서드를 여러 개 정의하는 것

2. 오버로딩이 성립하기 위한 세 가지 조건

타입 상관 x, 같은 이름의 메서드, 매개변수의 개수가 다르거나 타입이 다르거나

 

 

*유튜브 남궁성 선생님의 `자바의 정석`을 참고하여 만들었습니다*
*자세히 보고 싶은 분들은 유튜브 가서 보시면 됩니다*

728x90
반응형