본문 바로가기

JAVA

[ JAVA ] 다형성(polymorphism) - 서로 다른 타입의 값으로 다양한 결과를 도출하는 성질

 

 

 재정의와 타입 변환을 이용하면 객체 지향 프로그래밍의 매우 중요한 특징인 다형성을 구현할 수 있다.

 참조를 어떻게 시켜주느냐에 따라 다양한 형태를 가질 수 있다.

 

다형성

 

객체 사용 방법을 동일하지만 실행결과가 다양하게 나오는 성질을 말한다. 다형성을 구현하는 기술은 메소드 재정의와 타입 변환이다. 자식 객체가 재정의된 메소드를 가지고 있을 경우, 부모 타입으로 자동 타입 변환 후 메소드를 호출하면 재정의된 자식 메소드가 호출되면서 다양한 실행결과를 가져올 수 있다.

 

 

자동타입변환

 

부모타입 변수 = 자식타입;

 

 

 

필드의 다형성

 

 다형성 구현을 위해 자식 타입으로 사용해도 될 것을 부모 타입으로 변환해서 사용할 수 있다. 필드의 타입을 부모 타비으로 선언하면 다양한 자식 객체들이 저장될 수 있기 때문에 필드 사용 결과가 달라질 수 있다.

 

 

 

매개변수의 다형성 

 

 메소드를 호출할 때 매개 변수의 타입과 동일한 매개값을 지정하는 것이 정석이지만 매개값을 다양화 하기 위해 매개 변수에 자식 객체를 지정할 수도 있다.

 

 

강제 타입 변환

 

자식타입 변수 = (자식타입)부모타입; // downCasting, 명시적형변환

강제 타입 변환은 자식 타입이 부모 타입으로 인스턴스화 되어있는 상태에서만 가능하다.

처음부터 부모 타입으로 선언되어 생성된 객체는 자식 타입으로의 변환이 불가하다.

 

 

객체 타입 확인

 

부모 변수가 참조하는 객체가 부모 객체인지 자식 객체인지 확인 할 수 있는 방법으로 instanceof 연산자를 쓸 수 있다.

 

boolean result = 좌향(객체) instanceof 우항(타입)

주로 강제 타입 변환 전 변환이 가능한지 조사할 때 사용된다.