Back-end/이것이 자바다[신용권 한빛미디어]

타입 변환과 다형성

Ho's log 2021. 10. 4. 18:03

다형성 : 같은 타입이지만 실행결과가 다양한 객체를 이용할수 있는 성질

하나의 타입에 여러 객체를 대입함 으로써 다양한 기능을 이용할 수 있도록 해줌

 

자바는 부모 클래스로 타입 변환을 허용 

* 부모 타입에 모든 자식 객체가 대입 될수 있다

-> 객체의 부품화 

 

자동 타입 변환(Promotion)

프로그램 실행 도중에 자동적으로 타입 변환이 일어나는 것

 

         (자동 타입 변환)

부모클래스 변수 = 자식클래스타입;

 

바로 위의 부모가 아니더라도 상속 계층에서 상위 타입 이라면 자동 타입 변환이 일어날 수있다. 

부모 타입으로 자동 타입 변환된 이후에는 부모 클래스에 선언된 필드와 메소드만 접근이 가능 

변수는 자식객체를 참조하지만 변수로 접근 가능한 멤버는 부모 클래스 멤버로만 한정 

* but 예외) 메소드가 자식 클래스에서 오버라이딩되었다면 자식 클래스 메소드가 대신 호출 

 


필드의 다형성

필드의 값을 다양화 함으로써 실행결과가 다르게 나오도록 구현,

필드의 타입은 변함이 없지만

실행 도중에 어떤 객체를 필드로 저장하느냐에 따라 실행 결과 달라짐 

-> 필드의 다형성

 

부모클래스의 메소드의 수정 없이도 자동타입 변환을 이용해서 다양한 실행 결과 도출  


매개 변수의 다형성

자동 타입 변환은 메소드를 호출 할때 많이 발생

메소드를 호출 할 때, 매개 변수의 타입과 동일한 매개값을 지정하는것이 정석

매개값을 다양화하기 위해 매개 변수에 자식 타입 객체를 지정 


강제 타입 변환(Casting)

부모 타입을 자식 타입으로 변환 하는 것 

모든 부모타입을 자식 클래스 타입으로 강제 변환 할 수 있는것 X

자식 타입이 부모타입으로 자동변환 후, 다시 자식 타입으로 변환 할 때

 

자식클래스 변수 = (자식클래스) 부모클래스타입;

                                             (자식타입이 부모 타입으로 변환된 상태 )

 

*Why?

   -> 자식 타입이 부모 타입 자동 변환 => 자식 타입 필드, 메소드 사용 불가 => 자식타입으로 형변환 


객체 타입 확인(instanceof)

강제 타입 변환은 자식 타입이 부모 타입으로 변환 되어 있는 상태에서만 가능

부모 타입의 변수가 부모 객체를 참조할 경우 자식 타입으로 변환 할 수 없다. 

부모 객체인지, 자식 객체인지 확인하는 방법 -> instanceof 연산자 

 

좌항 객체, 우항 타입, 우항 인스턴스 이면 true

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

 

instanceof 연산자는 매개값의 타입을 조사할 때 주로 사용

메소드 내에서 강제 타입 변환이 필요할 경우 반드시 매개값이 어떤 객체인지 instanceof 연산자로 확인하고 안전하게 강제 타입 변환  -> ClassCastException 예외 발생 

public void method(Parent parent){

   if(parent instanceof Child){

	 Child child = (Child)parent    

	}

}

 

'Back-end > 이것이 자바다[신용권 한빛미디어]' 카테고리의 다른 글

인터페이스  (0) 2021.10.09
추상 클래스  (0) 2021.10.04
상속  (0) 2021.10.04
어노테이션  (0) 2021.10.03
Getter 와 Setter 메소드  (0) 2021.10.03