오버로딩 overloading

Heejeong Choi·2021년 9월 18일
0

Java의 정석 기초편

목록 보기
18/19
post-custom-banner
해당 글은 '자바의 정석 기초편'을 보고 작성되었습니다.

메서드도 변수와 마찬가지로 같은 클래스 내에서 서로 구별될 수 있어야 하기 때문에 각기 다른 이름을 가져야 하지만!!! 자바에서는 한 클래스에서 매개변수의 개수 또는 타입이 다르면 동일한 이름이라도 그 이름으로 메서드를 가질 수 있다.

이렇게 한 클래스 내에 같은 이름의 메서드를 여러개 정의하는 것을 오버로딩(overloading)이라고 한다

하지만, 같은 이름이라고 무조건 오버로딩은 아니다. 오버로딩은 아래 조건들을 만족해야한다.

  1. 메서드 이름이 동일해야 한다.
  2. 매개변수의 개수 또는 타입이 달라야 한다.

자!!!! 그러면 여기서 오버로딩을 성립한 예제는?

int add(int a, int b) { return a+b; }
int add(int x, int y) { return x+y; }
메서드의 이름은 같지만 매개변수의 이름만 다를 뿐 매개변수의 타입은 동일하다. 이 경우에는 이미 완전히 같은 메서드로 읽히기 때문에 이미 정의 된 메서드로 오류가 생길 것이다.
int add(int a, int b) { return a+b; }
long add(int a, int b) { return (long) a+b; }
해당 경우는 리턴 타입만 다른 경우이다. 매개변수의 타입은 여전히 동일하기 때문에, 해당 메서드를 호출 했을 때, 어떤 메서드가 호출되어야 할지 결정될 수 없기 때문에 오버로딩이 아니다.
long add(int a, long b) { return a+b; }
long add(long a, int b) { return a+b; }
두 메서드 모두 int형과 long형 매개변수가 하나씩 선언되었을지라도 매개변수 값에 구분될 수 있기 때문에 중복된 메서드가 아닌 오버로딩으로 간주된다.
profile
Welcome to my velog! I love learning something new to build up my ability in development field. I don't think it is shame not to know, but it is shame to pretend to know about something you don't know.
post-custom-banner

0개의 댓글