[Java] 상속 ③

kiteB·2022년 1월 4일
0

Java

목록 보기
15/35
post-thumbnail
post-custom-banner

[ 타입 변환과 다형성 ]

다형성은 하나의 타입에 여러 객체를 대입할 수 있는 성질을 말한다. 자바에서는 다형성을 위해 부모 클래스로 타입 변환을 허용한다. 즉 부모 타입에 모든 자식 객체가 대입될 수 있다.

예를 들어, 자동차를 설계할 때 타이어 클래스 타입을 적용했다면 이 클래스를 상속한 실제 타이어들은 종류에 상관없이 장착이 가능하다.

public Class Tire {
    ...
}
public Class starTire extends Tire {
    ...
}
public class koreaTire extends Tire {
    ...
}

starTirekoreaTire 클래스는 Tire 클래스를 상속 받았으므로, 다음과 같이 Tire 인스턴스 생성 시 자식 타입 객체 적용이 가능하다.

public class Car {
    Tire t1 = new starTire();
    Tire t2 = new koreaTire();
}
  • 타입 변환이란 데이터 타입을 다른 데이터 타입으로 변환하는 행위를 말한다.
  • 클래스 타입 변환은 상속 관계에 있는 클래스 사이에서 발생한다.
  • 자식 타입은 부모 타입으로 자동 타입 변환이 가능하다. (starTire, koreaTireTire)

1. 자동 타입 변환 ( Promotion )

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

자동 타입 변환은 다음과 같은 조건에서 일어난다.

자동 타입 변환이 되면 자식은 부모의 특징과 기능을 상속받기 때문에 부모와 동일하게 취급될 수 있다.

예를 들어 Animal 클래스를 Cat 클래스가 상속 받았다고 할 때,
Cat 클래스로부터 Cat 객체를 생성하고 이것을 Animal 변수에 대입하면 자동 타입 변환이 일어난다.

Cat cat = new Cat();
Animal animal = cat;

catanimal 변수는 타입만 다를 뿐, 동일한 Cat 객체를 참조한다.

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

  • 비록 변수는 자식 객체를 참조하지만, 변수로 접근 가능한 멤버는 부모 클래스 멤버로 한정된다.
  • 📌 예외 | 메소드가 자식 클래스에서 오버라이딩 되었다면 자식 클래스의 메소드가 대신 호출된다!

2. 강제 타입 변환 ( Casting )

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

모든 부모 타입이 자식 타입으로 강제 변환될 수 있는 것은 아니다.
자식 타입이 부모 타입으로 자동 변환한 후, 다시 자식 타입으로 변환할 때 강제 타입 변환을 사용할 수 있다!

자식 타입이 부모 타입으로 자동 변환하면 부모 타입에 선언된 필드와 메소드만 사용 가능하다는 제약 사항이 따른다. 만약 자식 타입에 선언된 필드와 메소드를 꼭 사용해야 한다면 강제 타입 변환해서 다시 자식 타입으로 변환한 다음 자식 타입의 필드와 메소드를 사용하면 된다.


3. 객체 타입 확인 ( instanceof )

강제 타입 변환을 할 때, 타입을 확인하지 않고 강제 타입 변환을 시도한다면 ClassCastException 예외가 발생할 수 있다! 그렇다면 부모 변수가 참조하는 객체가 부모 객체인지 자식 객체인지 확실하게 파악 확인하기 위해서는 어떻게 해야할까?

어떤 객체가 어떤 클래스의 인스턴스인지 확인하려면 instanceof 연산자를 사용하면 된다.

instanceof 연산자의 좌항에는 객체가 오고, 우항에는 타입이 오는데,
좌항의 객체가 우항의 인스턴스이면 true를 산출하고 아니면 false를 산출한다.

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

instanceof 연산자는 매개값의 타입을 조사할 때 주로 사용된다.
메소드 내에서 강제 타입 변환이 필요할 경우 반드시 매개값이 어떤 객체인지 instanceof 연산자로 확인하고 안전하게 강제 타입 변환을 해야 한다.


[ 참고자료 ]

이것이 자바다 책

profile
🚧 https://coji.tistory.com/ 🏠
post-custom-banner

0개의 댓글