Java 다형성 - 배열과 반복문으로 중복 코드 제거하기
다형성 다형적 참조와 메소드 오버라이딩으로 배열과 반복문을 사용한 코드 중복을 개선하는 시간이다.
이전에 작성한 Animal 추상화 클래스와 상속 받은 Dog, Cat, Bird 클래스를 이어서 사용하도록 한다.
AnimalMain.java
package sound;
public class AnimalMain {
public static void main(String[] args) {
Dog dog = new Dog();
Cat cat = new Cat();
Bird bird = new Bird();
Animal[] animals = new Animal[]{dog, cat, bird};
for (Animal animal : animals) {
System.out.println("동물 울음 소리: " + animal.sound());
}
}
}
Animal 배열을 만들어 각각의 클래스로 생성된 Dog, Cat, Bird 변수들을 배열 안으로 넣을 수 있었다.
이제 배열을 for문으로 방문하여 동물 울음 소리를 호출한다.
animal.sound() 호출로 배열에는 Dog,Cat,Bird 각 인스턴스가 있고, 메소드 오버라이딩에 의해 각각의 인스턴스 sound() 메소드를 호출한다.
soundAnimal 메소드 만들기
메시지를 호출하는 println 부분을 ctrl+alt+m 단축키로 새 메소드로 생성한다.
package sound;
public class AnimalMain {
public static void main(String[] args) {
Dog dog = new Dog();
Cat cat = new Cat();
Bird bird = new Bird();
Animal[] animals = new Animal[]{dog, cat, bird};
for (Animal animal : animals) {
soundAnimal(animal);
}
}
private static void soundAnimal(Animal animal) {
System.out.println("동물 울음 소리: " + animal.sound());
}
}
동물을 추가하고 호출하기
이번에도 Cow 클래스를 불려와 호출해보도록 한다.
AnimalMain.java
package sound;
public class AnimalMain {
public static void main(String[] args) {
Animal[] animals = { new Dog(), new Cat(), new Bird(), new Cow() };
for (Animal animal : animals) {
soundAnimal(animal);
}
}
private static void soundAnimal(Animal animal) {
System.out.println("동물 울음 소리: " + animal.sound());
}
}
추가하는 김에 코드를 줄였다. 호출하는 입장에서도 main 코드만 변경하고 메소드와 동물 클래스에서도 코드를 변경하지 않아도 바로 호출할 수 있었다.