안녕하세요! 오늘은 자바 프로그래밍의 핵심 개념 중 하나인 '다형성(Polymorphism)'에 대해 알아보겠습니다.
다형성은 객체지향 프로그래밍에서 상속과 함께 사용되며, 하나의 인터페이스로 여러 가지 구현을 사용할 수 있게 해줍니다.
이를 통해 코드의 유연성과 확장성이 높아집니다.
예시와 주석을 통해 다형성을 자세하게 알아봅시다.
예시: 동물 클래스를 상속받은 고양이와 개 클래스
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
|
public abstract class Animal {
abstract void makeSound();
}
public class Cat extends Animal {
@Override
void makeSound() {
System.out.println("고양이가 냥냥거린다.");
}
}
public class Dog extends Animal {
@Override
void makeSound() {
System.out.println("개가 멍멍 짖는다.");
}
}
public class Main {
public static void main(String[] args) {
// 다형성을 사용하여 상위 타입의 변수로 하위 타입의 객체를 참조
Animal myAnimal = new Cat();
myAnimal.makeSound(); // 고양이가 냥냥거린다.
myAnimal = new Dog();
myAnimal.makeSound(); // 개가 멍멍 짖는다.
}
}
|
cs |
이 예제에서는 Animal이라는 추상 클래스를 선언하고, 추상 메소드 makeSound()를 정의했습니다. Cat과 Dog 클래스는 Animal 클래스를 상속받아 makeSound() 메소드를 오버라이딩하여 각각 고양이와 개의 소리를 출력하는 구현을 제공합니다.
다형성을 사용하는 부분은 main() 메소드에서 확인할 수 있습니다. Animal 타입의 변수 myAnimal은 Cat 인스턴스와 Dog 인스턴스를 참조할 수 있습니다. 이를 통해 makeSound() 메소드를 호출하면, 참조하는 인스턴스에 따라 다른 결과를 출력합니다.
이 예제를 통해 다형성의 장점을 확인할 수 있습니다. 하나의 상위 타입 변수로 여러 하위 타입 객체를 참조할 수 있으며, 동일한 메소드 호출로 다양한 구현을 실행할 수 있습니다. 이를 통해 코드의 유연성과 확장성이 향상되며, 유지 관리가 용이해집니다.
이어서 다형성의 사용에 대해 더 알아봅시다.
다형성은 인터페이스를 사용할 때도 유용합니다.
인터페이스를 구현하는 여러 클래스를 동일한 인터페이스 타입 변수로 참조할 수 있기 때문입니다.
이를 통해 다양한 구현을 쉽게 교체할 수 있습니다.
예시: 동물 인터페이스와 구현하는 포유류, 조류 클래스
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
|
public interface Animal {
void makeSound();
}
public class Mammal implements Animal {
@Override
public void makeSound() {
System.out.println("포유류가 소리를 낸다.");
}
}
public class Bird implements Animal {
@Override
public void makeSound() {
System.out.println("조류가 소리를 낸다.");
}
}
public class Main {
public static void main(String[] args) {
// 다형성을 사용하여 인터페이스 타입의 변수로 구현체를 참조
Animal myAnimal = new Mammal();
myAnimal.makeSound(); // 포유류가 소리를 낸다.
myAnimal = new Bird();
myAnimal.makeSound(); // 조류가 소리를 낸다.
}
}
|
cs |
위 예제에서는 Animal 인터페이스를 선언하고, makeSound() 메소드를 정의했습니다. Mammal과 Bird 클래스는 Animal 인터페이스를 구현하여 각각 포유류와 조류의 소리를 출력하는 구현을 제공합니다.
main() 메소드에서는 인터페이스 타입의 변수 myAnimal로 Mammal 인스턴스와 Bird 인스턴스를 참조할 수 있습니다. 이를 통해 makeSound() 메소드를 호출하면, 참조하는 인스턴스에 따라 다른 결과를 출력합니다.
이 예제를 통해 인터페이스를 사용하는 다형성의 장점을 확인할 수 있습니다. 다형성을 통해 인터페이스를 구현하는 다양한 클래스를 동일한 인터페이스 타입 변수로 참조할 수 있으며, 동일한 메소드 호출로 다양한 구현을 실행할 수 있습니다. 이를 통해 코드의 유연성과 확장성이 향상되며, 유지 관리가 용이해집니다.
다형성은 객체지향 프로그래밍에서 꼭 알아야 할 중요한 개념입니다.
이를 이해하고 코드에 적용하면, 프로그램의 구조가 간결해지고 유연성과 확장성이 향상되어 효율적인 개발이 가능해집니다.
'[JAVA] > ┃ⓑ KEYWORDS' 카테고리의 다른 글
[JAVA] static (0) | 2023.03.30 |
---|---|
[JAVA] void (0) | 2023.03.20 |
[JAVA] 추상화 (Abstraction) (0) | 2023.03.19 |
[JAVA] 오버로딩(Overloading) vs 오버라이딩(Overriding) (0) | 2023.03.19 |
[JAVA] 상속 (Inheritance) (0) | 2023.03.19 |