1. 오버로딩
오버로딩이란?
같은 클래스 내에 하나의 메서드 이름으로 다양한 매개변수를 가진 여러 개의 메서드를 만드는 것이다.
int add(int a) {}
int add(int a, int b) {}
int add(int a, double b) {}
1.1. 오버로딩의 조건
- 매서드 이름이 같아야 한다.
- 매개변수의 개수 또는 타입이 달라야 한다.
int add(int a, long b) {}
int add(long a, int b) {}
오버로딩의 예로 println이 있다 참고하길 바란다.
1.2. 오버로딩의 장점
- 같은 기능을 하는 여러 메서드 들을 하나의 이름으로 만들 수 있다.
- 메서드 네이밍 시간을 단축시킬 수 있다.
1.3. 가변 인자와 오버로딩
가변인자란?
매개변수의 개수를 자유자재로 받을 수 있는 것을 말한다.
- 가변인자는 매개변수들 중 가장 마지막에 선언해야 한다.
- 가변인자는 내부적으로 배열을 사용한다.
- 가변인자 대신 배열을 사용하면 매개변수가 필수여서 주의해야 한다.
- 가변인자를 사용하면 오버로딩에 구분이 되지 않아 에러가 발생한다.
int add(int a, int... arg) {}
int add(int... arg) {}
위의 예제는 오버로딩이 구분되지 않는 예제이다.
2. 오버라이딩
오버라이딩이란?
상속받은 메서드의 내용을 변경하는 것이 오버라이딩이다.
class Parent {
public int get() {
...
}
}
class Child extends Parent {
public int get() { // 오버라이딩
...
}
}
Parent의 get메서드와 비슷한 기능을 기대할 수 있어 오버라이딩을 사용한다.
2.1. 오버라이딩의 조건
- 하위 클래스와 상위 클래스의 메서드 명이 같아야 한다.
- 하위 클래스와 상위 클래스의 메서드 매개변수가 같아야 한다.
- 하위 클래스와 상위 클래스의 메서드 반환 타입이 같아야 한다.
한마디로 메서드의 선언부가 같아야 오버라이딩이 된다.
2.2. 제한 딘 조건하에 변경 가능한 것
- 접근 제어 가는 상위 클래스의 메서드 보다 좁은 번위로 변경 불가
넓은 범위로 변경이 가능하며 범위 순서는 public > protected > default > private이다. - 상위 클래스의 메서드보다 많은 예외를 선언할 수 없다.
class Parent { public int get() throws IOException, SQL... {} } class Child { public int get() throws IOException {} }
2.3. 오버라이딩의 제한
- 접근 제어자를 상위 클래스의 메서드 보다 좁은 범위로 변경 불가능하다.
- 예외는 상위 클래스의 메서드보다 많이 선언하는 것은 불가능하다.
- 인스턴스 메서드를 static 메서드로 또는 static 메서드를 인스턴스 메서드로 변경 불가능하다.
* 상위 클래스에 정의된 static 메서드를 하위 클래스에 똑같은 선언부로 정의 가능하다. 이것은 오버라이딩이 아닌 각 클래스의 static 메서드이다.
3. 오버로딩 & 오버라이딩 정리
오버로딩 : 중복되는 메서드 이름을 이용해 새로운 메서드를 만드는 것
오버라이딩 : 상위 클래스의 메서드를 하위 클래스의 메서드에서 변경하는 것
'개발 언어 > Java' 카테고리의 다른 글
[Java] 변수의 초기화 (0) | 2021.08.24 |
---|---|
[Java] 생성자 (0) | 2021.08.24 |
[Java] 클래스와 객체 (0) | 2021.08.20 |
[Java] 객체 지향 프로그래밍 (0) | 2021.08.20 |
[Java] 배열 (0) | 2021.08.19 |