오버로딩(Overloading)과 오버라이딩(Overriding)은 객체 지향 프로그래밍에서 다형성을 구현하는 두 가지 개념이다.
1. 오버로딩
1) 오버로딩은 같은 이름의 메서드를 여러 개 정의하는 것을 말한다.
2) 오버로딩은 메서드의 이름은 같지만 매개변수의 타입, 개수, 순서가 다른 메서드를 같은 이름을 사용해서 메서드를 정의할 수 있다.
3) 오버로딩은 메서드의 기능이 유사하면서 다양한 입력을 처리하는 데 사용된다.
4) 오버로딩은 반환 타입만 다른 메서드로는 구현되지 않는다.
public class Calculator { 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; } } |
위의 코드에서 Calculator 클래스는 add() 메서드를 오버로딩하고 있다. add() 메서드는 매개변수의 타입과 개수가 다르게 정의되어 있다. 이렇게 오버로딩된 add() 메서드는 정수형과 실수형, 그리고 다른 개수의 정수를 입력으로 받아 사용할 수 있다.
2. 오버라이딩
1) 오버라이딩은 상속 관계에서 부모 클래스의 메서드를 자식 클래스에서 재정의하는 것이다.
2) 오버라이딩은 부모 클래스의 메서드와 동일한 메서드 이름, 매개변수를 가지는 메서드를 자식 클래스에서 재정의 함.
3) 오버라이딩은 부모 클래스의 메서드를 자식 클래스에서 다양하게 구현하여 다형성을 구현할 수 있다.
4) 오버라이딩은 런타임에 동적으로 메서드가 선택되며, 동적 바인딩이라고도 한다.
class Animal { public void makeSound() { System.out.println("Animal is making a sound."); } } class Dog extends Animal { @Override public void makeSound() { System.out.println("Dog is barking."); } } class Cat extends Animal { @Override public void makeSound() { System.out.println("Cat is meowing."); } } public class Main { public static void main(String[] args) { Animal animal1 = new Dog(); Animal animal2 = new Cat(); animal1.makeSound(); // Dog is barking. animal2.makeSound(); // Cat is meowing. } } |
위의 코드에서 Animal 클래스의 makeSound() 메서드는 자식 클래스에서 오버라이딩되어 재정의한다.
Dog 클래스와 Cat 클래스에서 각각 makeSound() 메서드를 오버라이딩하여 각각 다르게 출력한다.
오버라이딩을 통해 Animal 타입의 변수에 대입된 실제 객체의 타입에 따라 동적으로 메서드가 선택된다.
상속 관계에서 부모 클래스의 메서드를 자식 클래스에서 다양하게 재정의하여 다형성을 구현할 수 있다.
'자바' 카테고리의 다른 글
자바 중첩 클래스 ( Nested Class ) (0) | 2023.07.18 |
---|---|
자바 final (0) | 2023.07.16 |
자바 접근 제어자 (0) | 2023.07.15 |
자바 OOP ( 객체 지향 프로그래밍 ) (0) | 2023.07.14 |
자바 Object 클래스와 다형성 (0) | 2023.07.14 |