본문 바로가기

JAVA/OOP

OOP : Polymorphism (상속/인터페이스에 의한 다형성)

객체지향을 하는 이유 : 유지보수 비용을 절감하기 위해
  • 캡슐화: 내부의 구현이 변경되더라도 외부에 영향을 최소화
  • 다형성: 구현체 변경의 유현함을 제공



두가지의 다형성 

상속에 의한 다형성 VS 인터페이스에 의한 다형성


1. 상속에 의한 다형성

Animal monkey = new Monkey();
Animal lion = new Lion();
Animal Rabbit = new Rabbit();

이렇게 부모인 Animal type으로 형태를 통일시켜준다면, Animal type의 메소드에 대한 특정한 처리를 할 수 있다.

	public void moveTest(Animal animal) {
		for (int i = 0; i < animal.length; i++) {
			if (animal[i] instanceof Lion)
				System.out.println("사자는 안됨");
			else
				animal[i].move();
		}
	}

이렇게 처리가 가능하다.


2. 인터페이스에 의한 다형성

public interface Animal()
{
	public void move();
	public void eat();
	public void sleep();
}

이런 인터페이스가 있을 때

Animal animal;이라는 변수가 선언되었다면

이 변수에는 Animal 인터페이스를 implements한 그 어떤 객체라도 참조할 수 있다.



이것이 다형성!!

다형 참조를 메소드의 형식 매개변수로 사용하는 것은 강력한 기법이다.

이것은 메소드가 전달되는 매개변수의 타입을 제어하는 것을 허용하고, 메소드에게 다양한 타입의 인자들을 받아들일 수 있는 유연성을 제공한다.



반응형

'JAVA > OOP' 카테고리의 다른 글

OOP : Inheritance (상속)  (0) 2015.02.05
OOP : Encapsulation (캡슐화)  (0) 2015.02.05
OOP : Abstraction (추상화)  (0) 2015.02.04
객체지향의 5원칙 (SOLID)  (0) 2015.02.04
OOP : Abstraction, Encapsulation, Inheritance and Polymorphism  (0) 2015.02.04