본문 바로가기

Java 공부/신용권의 이것이 자바다

Casting & instanceof, 강제타입변환과 객체 타입 확입

반응형

Casting(강제타입변환)이란 부모 타입을 자식 타입으로 변환하는 것을 말한다.
부모클래스객체는 자식클래스타입으로 자동 변환되지 않는다.
그래서 자식클래스타입으로 변환을 강제적으로 한다는 뜻에서 ()속에 Castng 기호를 넣어 준다.
즉,
자식클래스 변수 = (자식클래스) 부모클래스타입;
이렇게 코드를 작성한다.
강제 캐스팅할 수 있는 조건은
자식 타입이 부모 타입으로 자동 변환된 이후, 다시 자식 타입으로 변환할 때만 유효하다.
강제 타입변환이 필요한 경우는
자식 타입이 부모 타입으로 자동변환되면, 부모 타입에 선언된 필드와 메소드만 사용 가능하다. 그런데 자식 타입에 선언된 메소드를 다시 사용해야 한다면, 강제타입변환(Casting)이 필요하다.
그렇다고 해서 부모 타입이면, 모두 자식 타입으로 강제 타입변환 할 수 있는 것도 아니다.
잘못된 강제 변환을 시도했을 때는 ClassCastExcetion 예외가 발생할 수 있다.
예를 들어,
Parent parent = new Parent();
Child child = (Child) parent;
이 경우에는 강제 타입 변환을 할 수 없다.
따라서 먼저 자식타입인지 확인한 후에 Casting을 하는 것이 필요하다.
이때, instanceof라는 연산자를 활용해서 확인한다.
instanceof 연산자는 좌측의 객체가 우측의 타입으로 만들어졌는가를 묻고 그것이 맞다면, true를 리턴하고 그렇지 않다면, false를 리턴한다.(boolean result = 좌항(객체) instanceof 우항(타입))
이것을 간단한 코드로 작성하면, 아래와 같다.
public void method(Parent parent) {
if(parent instanceof Child) { //바로 이 부분분이 parent 매개변수가 참조하는 객체가 Child 인지 조사한다.
Child child = (Child)parent;
}
}
그럼, 이제 이 코드에 맞춰 구체적인 코드를 작성해 보자!

콘솔창 결과를 함께 확인하면, 어떤 식으로  instanceof 연산자가 작동하는지 이해가 잘 갈 것이다.

 

반응형