다형성은 객체 지향 프로그래밍(OOP)의 중요한 개념 중 하나이다. 이는 여러 가지 형태를 가질 수 있는 능력을 의미한다. 자바에서는 다형성을 구현하기 위해 두 가지 주요한 방법을 사용한다.
메소드 오버라이딩과 오버로딩이 있다.
서브클래스에서 슈퍼클래스의 메소드를 다시 정의하는 것을 의미한다. 이것은 동일한 메소드 시그니처를 가진 서브클래스의 메소드가 슈퍼클래스의 메소드를 대체한다. 이를 통해 다형성을 구현 할 수 있다.
class Animal {
void sound() {
System.out.println("Animal makes a sound");
}
}
class Dog extends Animal {
void sound() {
System.out.println("Dog barks");
}
}
class Cat extends Animal {
void sound() {
System.out.println("Cat meows");
}
}
같은 메소드명을 가진 메소드가 서로 다른 매개변수 목록을 가질 수 있도록 하는 것이다.
컴파일러가 어떤 메소드를 호출할지를 결정하는데 사용한다.
class Calculator {
int add(int x, int y) {
return x + y;
}
double add(double x, double y) {
return x + y;
}
double add(int x, int y, int z) {
return x + y + z;
}
}
다형성을 활용하여 객체 생성하면서 코드를 설계하는게 아직은 어렵게 느껴진다.
계속 설계하면서 사용해보면서 연습을 좀 많이 해봐야 할 것 같다.