티스토리 뷰

반응형

29. 다형성 - 1

| 다형성(polymorphism)이란?

하나의 코드가 여러 자료형으로 구현되어 실행되는 것

같은 코드에서 여러 실행결과가 나온다.

 

정보 은닉, 상속과 더불어 객체 지향 프로그래밍의 가장 큰 특징 중 하나이다.

객체 지향 프로그래밍의 유연성, 재활용성, 유지보수성에 기본이 되는 특징이다.

 

package polymorphism;

class Animal {
	public void move() {
		System.out.println("동물이 움직입니다.");

	}
}

class Human extends Animal {
	public void move() {
		System.out.println("사람이 두 발로 걷습니다.");

	}
}

class Tiger extends Animal {
	public void move() {
		System.out.println("호랑이가 네 발로 뜁니다.");

	}
}

class Eagle extends Animal {
	public void move() {
		System.out.println("독수리가 하늘을 날아갑니다.");

	}
}

public class AnimalTest {

	public static void main(String[] args) {
		Animal hAnimal = new Human();
		Animal tAnimal = new Tiger();
		Animal eAnimal = new Eagle();

		AnimalTest test = new AnimalTest();
		test.moveAnimal(hAnimal);
		test.moveAnimal(tAnimal);
		test.moveAnimal(eAnimal);
		/*
		 * 사람이 두 발로 걷습니다. 호랑이가 네 발로 뜁니다. 독수리가 하늘을 날아갑니다.
		 * 
		 */

	}

	public void moveAnimal(Animal animal) {
		animal.move();
	}

}

 

30. 다형성 - 2

package polymorphism;

import java.util.ArrayList;

class Animal {
	public void move() {
		System.out.println("동물이 움직입니다.");

	}
}

class Human extends Animal {
	public void move() {
		System.out.println("사람이 두 발로 걷습니다.");

	}
}

class Tiger extends Animal {
	public void move() {
		System.out.println("호랑이가 네 발로 뜁니다.");

	}
}

class Eagle extends Animal {
	public void move() {
		System.out.println("독수리가 하늘을 날아갑니다.");

	}
}

public class AnimalTest {

	public static void main(String[] args) {
		Animal hAnimal = new Human();
		Animal tAnimal = new Tiger();
		Animal eAnimal = new Eagle();

		AnimalTest test = new AnimalTest();
		test.moveAnimal(hAnimal);
		test.moveAnimal(tAnimal);
		test.moveAnimal(eAnimal);
		/*
		 * 사람이 두 발로 걷습니다. 호랑이가 네 발로 뜁니다. 독수리가 하늘을 날아갑니다.
		 * 
		 */

		ArrayList<Animal> animalList = new ArrayList<Animal>();
		animalList.add(hAnimal);
		animalList.add(tAnimal);
		animalList.add(eAnimal);
		System.out.println("=================");
		for (Animal animal : animalList) {
			animal.move();
		}
	}

	public void moveAnimal(Animal animal) {
		animal.move();
	}

}

 

| 다형성을 사용함으로써 갖는 장점

다양한 여러 클래스를 하나의 자료형( 상위 클래스)로 선언하거나, 형변환해서 각 클래스가 동일한 메서드를 오버라이딩 한 경우, 하나의 코드가 다양한 구현을 실행할 수 있음.

 

유사한 클래스가 추가되는 경우 유지보수에 용이하고,

각 자료형마다 다른 메서드를 호출하지 않음으로 코드에서 많은 if 문이 사라진다.

 

| 상속은 언제 사용할까?

IS-A 관계( is  a relationship: inheritance)

일반적인 개념과 구체적인 개념과의 관계

상위 클래스: 일반적인 개념 클래스( 예, 포유류)

하위 클래스: 구체적인 개념 클래스( 예, 사람 원숭이, 고래..)

단순히 코드를 재사용하는 목적으로 사용하지 않음

 

HAS-A 관계( composition) : 한 클래스가 다른 클래스를 소유한 관계

코드 재사용의 한 방법

Student 가 Subject 를 포함한 관계

 

 

 

바 인강이 듣고 싶다면 => https://bit.ly/3ilMbIO

반응형
댓글