[Java의 정석]Chapter6.객체지향 프로그래밍(30~31)

Hello_Wendy·2022년 4월 20일
0

자바의 정석

목록 보기
44/61
post-thumbnail

Chapter 6. 객체지향 프로그래밍

30. 오버로딩(overloading)

  • 오버로딩 : 한 클래스 내에 같은 이름의 메서드를 여러 개 정의하는 것
    <메서드 오버로딩(method overloading) || 오버로딩(overloading)>
  • 메서드도 변수와 마찬가지로 같은 클래스 내에서 서로 구별될 수 있어야 하기 떄문에 다른 이름을 가져야 함
  • 그러나 자바에서는 한 클래스 내에 같은 이름을 가진 메서드가 있더라도, 매개변수의 개수 또는 타입이 다르면 같은 이름 사용해서 메서드 정의 가능

🌵 오버로딩 성립 조건
1. 메서드 이름이 동일
2. 매개변수의 개수 또는 타입이 상이
3. 반환 타입은 관계 없음
▶ 조건 미충족시 메서드는 중복 정의로 간주되어 컴파일시에 에러 발생
▶ 오버로딩된 메서드들은 매개변수에 의해서만 구별가능하므로, 반환타임은 오버로딩을 구현하는데 아무런 영향을 주지 못함

  • 오버로딩의 대표적인 예)
→ println메서드
void println()
void println(boolean x)
void println(char x)
void println(char[] x)
void println(double x)
void println(float x)
void println(int x)
void println(long x)
void println(object x)
void println(String x)
: printStream 클래스에는 어떤 종류의 매개변수를 지정해도 출력할 수 있도록
위와 같이 10개의 오버로딩된 println메서드를 정의해놓음
println메서드를 호출할 때 매개변수로 넘겨주는 값의 타입에 따라서 오버로딩된 메서드들 중
하나가 선택되어 실행됨

🍰 보기

int add(int a, int b) { return a+b; }
int add(int x, int y) { return x+y; }
: 매개변수의 이름만 다를 뿐 매개변수의 타입이 같기 때문에 오버로딩 성립안됨
컴파일 시, 'add(int,int)is already defined(이미 같은 메서드가 정의되었다)' 메시지 출력

int add(int a, int b) { return a+b; }
long add(int a, int b) { return (long)(a+b); }
: 리턴타입만 다른 경우임. 매개변수의 타입과 개수가 일치하기 때문에 add(3,3)과 같이 호출하였을 때 
어떤 메서드가 호출된 것인지 결정할 수 없기에
오버로딩으로 간주하지 않음

long add(int a, long b) { return a+b; }
long add(long a, int b) { return a+b; }
: 모두 int형과 long형 매개변수가 하나씩 선언되어 있지만, 서로 순서가 다른 경우.
이 경우 호출시 매개변수의 값에 의해 호출될 메서드가 구분될 수 있으므로 중복된 메서드 정의가 아닌, 
오버로딩으로 간주
  • 단지 매개변수의 순서만을 다르게 하여 오버로딩을 구현하면 호출하는 곳에서 컴파일 에러 발생 가능함
  • add(3,3L)은 첫 번째 메서드가 호출, add(3L,3)은 두 번째 메서드가 호출됨
  • 이 경우, add(3,3)과 같이 호출할 수 없기에 메서드 호출하는 곳에서 컴파일 에러 발생 가능하므로 주의


profile
안녕 나의 새로운 세상

0개의 댓글