6개월 대장정/JAVA 개념

15일차 - 상속(타입 변환과 다형성)

pitang 2021. 9. 2. 19:09
반응형

안녕하세요. pitang입니다.

타입 변환과 다형성에 대해 알아보겠습니다.

 

다형성

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

다형성을 위해 자바는 부모 클래스로 타입 변환을 허용한다.

즉, 부모 타입에 모든 자식 객체가 대입될 수 있다. 이것을 이용하면 객체는 부품화가 가능하다.

 

자동 타입 변환은 프로그램 실행 도중에 자동적으로 타입 변환이 일어나는 것을 말한다.

예를 들어, 동물(부모) - 고양이(자식)이라고 한다면 고양이는 동물이다. 가 될 수 있다.

 

ex1)

s070701.Parent - s070701.Child

                                                                                                              Child - method2는 오버 라이딩되었다.

s070701.ChildExample(MainClass)
MainClass console

 

ex2)

다형성이란 동일한 타입을 사용하지만 다양한 결과가 나오는 성질을 말한다.

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

필드의 타입은 변함이 없지만, 실행 도중에 어떤 객체를 필드로 저장하느냐에 따라 결과가 달라지고,

이것이 필드의 다형성이다.

s070702.Tire(KumhoTire, HankookTire의 부모클래스)
HankookTire(Tire의 자식클래스)
KumhoTire(Tire의 자식클래스)
Car
s070702.CarExample MainClass
MainClass console

 

ex3)

ex2와 비슷하지만 배열로 관리하여 코드를 깔끔하게 만들어 줄 수 있다. 

Tire와 그 자식 클래스는 ex2의 클래스를 import 해서 사용하자.

s070703.Car
s070703.CarExample MainClass
MainClass console

 

ex4)

자동 타입 변환은 필드의 값을 대입할 때에도 발생하지만, 주로 메서드를 호출할 때 많이 발생한다.

s070704.Driver - Vehicle(Bus, Taxi 의 부모클래스)

Driver클래스는 Vehicle을 이용하는 클래스이다.

drive() 메서드에서 Vehicle 타입의 매개 값을 받아서 run() 메서드를 호출한다.

Bus - Taxi

Vehicle의 run() 메소드를 오버 라이딩 한 Bus와 Taxi이다.

DriverExample MainClass
MainClass console

 

타입 변환

강제 타입 변환은 부모 타입을 자식 타입으로 변환하는 것을 말한다.

하지만, 모든 부모 타입을 자식 클래스 타입으로 강제 변환할 수 있는 것은 아니다.

자식 타입 -> 부모 타입 자동 변환 후, 다시 자식 타입으로 변환할 때 강제 타입 변환을 사용할 수 있다.

 

ex1)

s070705.Parent(부모 클래스) - Child(자식 클래스)
s070705.ChildExample MainClass
MainClass console

 

객체 타입 확인(instanceof)

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

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

 

어떤 객체가 어떤 클래스의 인스턴스인지 확인하는 방법은 instanceof 연산자를 사용할 수 있다.

객체가 타입으로 객체가 생성되었다면 true를 그렇지 않으면 false를 산출한다.

 

사용방법은 

객체 instanceof 타입

이다.

 

매개 값의 타입을 조사할 때 주로 사용하고 어떤 객체인지 확인하고 안전하게 강제 타입 변환을 한다.

 

ex1)

s070706.Parent(부모 클래스) - Child(자식 클래스)
s070706.InstanceofExample MainClass
MainClass console

Parent 객체를 매개 값으로 전달하면 method2()에서는 무조건 변환하려고 했기 때문에 프로그램이 즉시 종료되었다.

이러한 상황을 막기 위해 instanceof 연산자로 변환시킬 타입의 객체인지 조사해야 하는 것이다.

 

 

감사합니다.

 

*m1맥북을 사용 중입니다.*

728x90
반응형