[JAVA] 오버로딩(Overloading)과 오버라이딩(Overriding)
2024. 4. 16. 15:48ㆍ카테고리 없음
자바(JAVA)는 객체 지향 프로그래밍 언어로, 다형성(polymorphism)을 지원하는 여러 기능 중에서 메소드 오버로딩(Method Overloading)과 오버라이딩(Method Overriding)이 주요한 개념입니다. 이 두 기능은 코드의 재사용성을 높이고, 가독성을 개선하는 데 도움을 줍니다.
메소드 오버로딩(Method Overloading)
메소드 오버로딩은 같은 이름의 메소드를 여러 개 정의할 수 있게 해주지만, 메소드의 매개변수의 타입이나 개수가 달라야 합니다. 이는 같은 작업을 수행하지만, 입력되는 매개변수의 타입이나 개수가 다를 때 유용합니다.
오버로딩의 규칙
- 메소드 이름이 같아야 합니다.
- 매개변수의 개수나 타입이 달라야 합니다.
- 반환 타입과 접근 제어자는 오버로딩을 구분하는 데 사용되지 않습니다.
public class OverloadingExample {
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 메소드는 오버로딩되어 있습니다. 같은 이름의 메소드이지만, 매개변수의 타입과 개수가 다릅니다.
메소드 오버라이딩(Method Overriding)
오버라이딩은 상속 관계에 있는 클래스에서 발생합니다. 자식 클래스가 부모 클래스로부터 상속받은 메소드를 재정의할 수 있게 해줍니다. 이는 자식 클래스가 부모 클래스의 메소드를 자신의 상황에 맞게 사용할 수 있게 만들어 줍니다.
오버라이딩의 규칙
- 오버라이딩하는 메소드는 부모 클래스의 메소드와 같은 이름, 매개변수 리스트, 반환 타입을 가져야 합니다.
- 접근 제어자는 부모 클래스의 메소드보다 더 제한적이거나 같아야 합니다.
- 오버라이딩하는 메소드는 부모 클래스의 메소드보다 더 많은 예외를 던질 수 없습니다.
오버라이딩의 예시
class Animal {
public void sound() {
System.out.println("동물이 소리를 낸다.");
}
}
class Dog extends Animal {
@Override
public void sound() {
System.out.println("강아지가 멍멍 소리를 낸다.");
}
}
public class Test {
public static void main(String[] args) {
Animal myDog = new Dog();
myDog.sound();
}
}
위 예시에서 Dog 클래스는 Animal 클래스로부터 상속받은 sound 메소드를 오버라이딩했습니다. 결과적으로 Dog 객체는 "강아지가 멍멍 소리를 낸다."라는 특정한 출력을 할 수 있게 됩니다.