오버로딩(Overloading)과 오버라이딩(Overriding)
오버로딩(Overloading)
- 오버로딩은 같은 이름의 메서드를 여러 개 정의할 수 있게 해주는 기능이다.
- 각 메서드는 매개변수의 유형이나 개수가 달라야 한다.
- 즉, 메서드 이름은 같지만 매개변수 목록이 다른 경우를 말한다.
- 오버로딩(Overloading)의 사전적 의미는 과적하다는 뜻을 가진다.
조건
- 메서드의 이름이 같아야 한다.
- 매개변수의 타입과 개수가 달라야 한다.
- 반환 타입은 다를 수 있지만, 반환 타입만 다르고 매개 변수가 동일하다면 오버로딩이 아니다.
장점
- 같은 작업을 수행하는 메서드들의 이름을 중복하지 않고 하나의 이름으로 정의할 수 있기 때문에 코드가 직관적이고 그에 따라 코드의 가독성이 향상된다.
- 이로 인해 오류의 가능성을 줄일 수 있다.
오버로딩(Overloading)의 예시
public class MathUtil {
// 정수 두 개를 더하는 메서드
public int add(int a, int b) {
return a + b;
}
// 실수 두 개를 더하는 메서드
public double add(double a, double b) {
return a + b;
}
// 정수 세 개를 더하는 메서드
public int add(int a, int b, int c) {
return a + b + c;
}
}
매개변수의 타입과 개수를 달리해서 add() 메서드를 오버로딩하였다.
오버라이딩(Overriding)
- 상위 클래스(부모 클래스)에서 정의된 메서드를 하위 클래스(자식 클래스)에서 재정의하는 것을 말한다.
- 오버라이딩(overriding)의 사전적 의미는 ~위에 덮어쓰다는 뜻을 가진다.
조건
- 상위 클래스(부모 클래스)의 메서드와 이름이 같아야 한다.
- 상위 클래스(부모 클래스)와 메서드의 이름, 매개변수의 개수와 타입, 반환 타입이 같아야 한다.
- 접근 제어자는 상위 클래스(부모 클래스)의 메드보다 더 좁은 범위로 변경할 수 없다.
- 예외(Exception)는 상위 클래스(부모 클래스)의 메서드보다 더 많이 선언할 수 없다.
상위 클래스(부모 클래스)와 하위 클래스(자식 클래스)의 메서드의 선언부가 서로 일치해야 한다.
장점
- 상위 클래스(부모 클래스)를 참조하여 하위 클래스(자식 클래스)의 메서드를 호출할 수 있다.
- 상속을 통해 기존의 코드를 수정하지 않고 기능을 확장할 수 있다.
오버라이딩(Overriding)의 예시
class Animal {
public void sound() {
System.out.println("Animal makes a sound");
}
}
class Dog extends Animal {
public void sound() { // 오버라이딩
System.out.println("Dog barks");
}
}
public class Main {
public static void main(String[] args) {
Animal myAnimal = new Dog();
myAnimal.sound();
}
}
출력
오버로딩 VS 오버라이딩
오버로딩 : 기존에 없는 새로운 메서드를 추가하는 것 (생성)
오버라이딩 : 기존에 있던 메서드를 자식 클래스에서 수정하는 것 (변경, 수정)
'Java' 카테고리의 다른 글
일급 컬렉션(First Class Collection) (3) | 2024.09.13 |
---|---|
JAVA 소수점 반올림 (0) | 2024.07.08 |