이전 포스팅에서는 객체 지향 프로그래밍(OOP)의 개념과 Java에서의 주요 개념에 대해 살펴보았습니다. 이번 포스팅에서는 실제 예제 코드를 통해 상속과 다형성의 실전 활용 방법을 알아보도록 하겠습니다.
1. 상속의 활용:
- 상속은 기존 클래스를 확장하여 새로운 클래스를 만드는 개념입니다. 이를 통해 코드의 재사용성과 확장성을 높일 수 있습니다.
- 예제로는 "동물(Animal)" 클래스를 상속받아 "고양이(Cat)" 클래스와 "강아지(Dog)" 클래스를 만들어보겠습니다.
- 동물 클래스에는 공통적인 속성과 메서드를 정의하고, 고양이와 강아지 클래스에서는 각각의 특성에 맞는 추가적인 메서드를 정의할 수 있습니다.
2. 다형성의 활용:
- 다형성은 객체가 여러 가지 타입을 가질 수 있는 특성입니다. 이를 통해 유연한 코드 작성과 객체 간의 상호교환성을 제공할 수 있습니다.
- 예제로는 "동물(Animal)" 클래스를 다형성을 활용하여 "동물 배열"에 고양이와 강아지 객체를 함께 저장하고, 공통적인 메서드를 호출해보겠습니다.
- 동물 배열에서 각 객체의 실제 타입에 따라서 다른 동작을 수행할 수 있습니다. 이를 통해 동물의 종류에 상관없이 일관된 코드를 작성할 수 있습니다.
다음은 실전 예제 입니다.
// 동물 클래스
class Animal {
protected String name;
public Animal(String name) {
this.name = name;
}
public void sound() {
System.out.println("동물이 소리를 내고 있습니다.");
}
}
// 고양이 클래스
class Cat extends Animal {
public Cat(String name) {
super(name);
}
public void sound() {
System.out.println(name + "가 야옹 소리를 내고 있습니다.");
}
public void sleep() {
System.out.println(name + "가 잠자는 중입니다.");
}
}
// 강아지 클래스
class Dog extends Animal {
public Dog(String name) {
super(name);
}
public void sound() {
System.out.println(name + "가 멍멍 소리를 내고 있습니다.");
}
public void run() {
System.out.println(name + "가 달리고 있습니다.");
}
}
public class Main {
public static void main(String[] args) {
Animal[] animals = new Animal[2];
animals[0] = new Cat("나비");
animals[1] = new Dog("뽀삐");
for (Animal animal : animals) {
animal.sound();
if (animal instanceof Cat) {
Cat cat = (Cat) animal;
cat.sleep();
} else if (animal instanceof Dog) {
Dog dog = (Dog) animal;
dog.run();
}
}
}
}
이 예제는 동물을 나타내는 Animal 클래스를 상속받은 고양이 클래스(Cat)와 강아지 클래스(Dog)를 구현한 후, 이들을 동물 배열에 저장하고 공통 메서드를 호출하는 내용입니다.
실행 결과는 다음과 같습니다:
나비가 야옹 소리를 내고 있습니다.
나비가 잠자는 중입니다.
뽀삐가 멍멍 소리를 내고 있습니다.
뽀삐가 달리고 있습니다.
위의 예제를 통해 상속과 다형성이 어떻게 활용되는지 살펴볼 수 있습니다. 고양이와 강아지는 각각 다른 메서드를 가지고 있지만, 동물 배열을 통해 공통 메서드를 호출할 수 있습니다. 이렇게 상속과 다형성을 활용하면 코드의 유연성과 확장성을 높일 수 있습니다.
위의 예제를 통해 상속과 다형성이 실전에서 어떻게 활용되는지 살펴보았습니다. 다음 포스팅에서는 인터페이스와 추상 클래스에 대해 알아보고, 이를 활용한 실전 예제를 다루어보도록 하겠습니다.
[Java] 예외 처리에 대해 알아보기 (0) | 2023.07.03 |
---|---|
[Java] 인터페이스와 추상 클래스 이해하기 (0) | 2023.07.03 |
[Java] 객체 지향 프로그래밍(OOP)과 Java의 주요 개념 (0) | 2023.07.02 |
[Java] 배열, 클래스, 메서드, 예외 처리 예제와 활용 방법 (0) | 2023.07.02 |
[Java] 조건문과 반복문 예제 코드와 활용 방법 (0) | 2023.07.02 |