다형성 (Polymorphism)

기록하는 용도·2022년 8월 7일
0

다형성 (Polymorphism)

다양한 형태를 가지는 성질
하나의 소통 방식으로 다양한 객체들이 각자의 방식으로 동작하는 성질



불가능한 예제)

package step1;

public class TestPolymorphism1 {
	public static void main(String[] args) {
		Animal a = new Animal();
		a.eat();
//		Animal c = new Car(); -> compile error 
//		타입이 다르므로 Car 객체를 Animal 타입의 변수에 참조시킬 수 없다.
		
		
		
	}
}



package step1;

public class Animal {
	public void eat() {
		System.out.println("먹다");
	}
}
//		Animal c = new Car(); -> compile error 

타입이 다르므로 Car 객체를 Animal 타입의 변수에 참조시킬 수 없다.



가능한 예제)

Animal a2 = new Person();
Animal a2 = new Person();
a2.eat(); //-> 오버라이드된 Person의 eat 메서드 실행

Person 자식 객체를 Animal 부모 타입의 변수에 참조시킬 수 있다.

Polymorphism 다형성 지원을 위해서는 계층 구조 형성이 필수적이다.



예제) 자식 객체를 부모 타입의 변수로 참조시켜 보는 연습을 하는 이유

다형성을 적용하지 않은 예제)

상품의 종류가 추가되면 새로 메소드를 오버로딩해서 처리해야함을 볼 수 있다.
cart.put(new ~) 텍스트으로 객체를 전달하면 실행됨으로 class와 cart.put(~) 코드를 매번 추가해줘야한다는 것이다.

이는 상품의 종류가 추가될수록 처리하는 쇼핑카트의 메소드가 함께 추가되는 비효율적인 구조로
결합도가 높은 구조 -> 유지보수성이 낮다. 라고 볼 수 있다.


다형성을 적용한 예제)

다형성(Polymorphism) 적용하기 위해 계층 구조 형성

다형성이 적용되므로 put 장바구니에 추가하는 메소드는 하나만 정의하면된다.

부모 타입의 매개변수에 다양한 자식 객체들을 전달받을 수 있다.
새로운 상품이 추가되어도 별도의 메소드 추가 작업은 필요없다.
다형성을 적용하여 유지보수성을 향상 시킬 수 있다.



Polymorphism 다형성 적용시

- Object Casting ( Object Down Casting )

부모 타입의 변수로 자식 객체를 참조할 경우

부모로부터 상속받은 멤버(속성,기능)와 오버라이드한 메소드는 바로 접근 가능하지만 자식의 독자적 멤버(속성, 기능)는 접근이 불가하다.
참조 변수가 부모타입이기 때문이다.

예)

Animal a = new Person();
a.study(); 

study메서드는 Animal에는 존재하지않고 Person에만 존재하는 독자적 멤버로 위 코드는 컴파일 에러가 난다.
자식의 독자적 멤버에 접근하기 위해서는 Object Down Casting이 필요하다.
예) ((Person) a).study();

별도의 과정 필요 : a라는 참조변수를 Person클래스로 묶어줌

0개의 댓글