다형성(polymorphism)은 객체 지향 프로그래밍(OOP)에서 중요한 개념 중 하나입니다. 다형성이란 하나의 코드가 여러 가지 방식으로 동작할 수 있는 것을 의미합니다.
자바에서 다형성은 크게 두 가지 방법으로 구현됩니다. 첫째는 상속(inheritance)을 이용한 다형성이고, 둘째는 인터페이스(interface)를 이용한 다형성입니다.
상속을 이용한 다형성은 부모 클래스에 정의된 메서드를 자식 클래스에서 오버라이딩(overriding)하여 다양한 구현을 제공하는 것을 말합니다. 자식 클래스는 부모 클래스의 타입을 상속받기 때문에 부모 클래스 타입으로 자식 클래스의 객체를 참조할 수 있습니다.
public class Animal {
public void makeSound() {
System.out.println("Some sound");
}
}
public class Dog extends Animal {
@Override
public void makeSound() {
System.out.println("Bark bark");
}
}
public class Cat extends Animal {
@Override
public void makeSound() {
System.out.println("Meow meow");
}
}
public class Main {
public static void main(String[] args) {
Animal dog = new Dog();
Animal cat = new Cat();
dog.makeSound(); // Output: Bark bark
cat.makeSound(); // Output: Meow meow
}
}
위 예제에서 Animal 클래스는 makeSound() 메소드를 가지고 있고, Dog와 Cat 클래스는 Animal 클래스를 상속받아 makeSound() 메소드를 오버라이딩하여 각각 다른 동작을 수행하도록 구현되어 있습니다.
main() 메소드에서 Dog와 Cat 객체를 Animal 타입으로 선언하고 초기화하였습니다. 이렇게 하면 다형성 개념이 적용됩니다. Animal 타입으로 선언되었지만, Dog와 Cat 클래스의 makeSound() 메소드를 호출하면 각자 오버라이딩한 메소드가 호출되어 각각 다른 출력값이 나타납니다.
인터페이스를 이용한 다형성은 인터페이스를 구현한 클래스가 서로 다른 구현을 제공할 수 있는 것을 말합니다. 인터페이스를 구현한 클래스는 인터페이스의 타입으로 참조될 수 있습니다.
interface Animal {
void makeSound();
}
class Dog implements Animal {
public void makeSound() {
System.out.println("멍멍");
}
}
class Cat implements Animal {
public void makeSound() {
System.out.println("야옹");
}
}
public class PolymorphismExample {
public static void main(String[] args) {
Animal dog = new Dog();
Animal cat = new Cat();
dog.makeSound(); //멍멍
cat.makeSound(); //야옹
}
}
위 코드에서 Animal 인터페이스를 구현한 Dog 클래스와 Cat 클래스가 있습니다. 이 두 클래스는 Animal 타입으로 참조될 수 있기 때문에, Animal 타입의 변수 dog와 cat을 선언하고 각각 new 연산자를 이용해 Dog 객체와 Cat 객체를 생성했습니다. 이후, 각 객체의 makeSound 메서드를 호출해보면, 각 객체가 가지고 있는 다른구현이 실행됩니다. 이것이 다형성이라는 개념입니다.
'Programming > Java' 카테고리의 다른 글
[Java] Hashtable vs Map (0) | 2023.02.26 |
---|---|
[Java] Hashtable (0) | 2023.02.26 |
[Java] 팩토리얼 계산하는 코드 만들기 (0) | 2023.02.23 |
[Java] 버전 크기를 비교하는 코드 만들기 (Semantic version) (0) | 2023.02.23 |
map과 list 중 검색 속도가 빠른 것은? (0) | 2023.02.23 |