본문 바로가기
Programing/JAVA (& 혼공자Java)

자바(Java) - 강제 타입 변환

by a.k.a DUKI 2020. 11. 5.
728x90
반응형

강제 타입 변환(casting)

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

 

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

혼공자 유툽 참고

자식타입 변수 = (자식타입) 부모타입;
			부모 타입을 자식 타입으로 변환
            
Parent parent = new Child();	//자동 타입 변환
Child child = (Child) parent;	//강제 타입 변환

혼공자 유툽 참고

 

예시1) 강제 타입 변환

부모 클래스

public class Parent {
	public String field1;

	public void method1() {
		System.out.println("Parent-method1()");
	}

	public void method2() {
		System.out.println("Parent-method2()");
	}
}

자식 클래스

public class Child extends Parent {
	public String field2;

	public void method3() {
		System.out.println("Child-method3()");
	}
}

강제타입변환

public class ChildEx {

	public static void main(String[] args) {
		//자동 타입 변환
		Parent parent = new Child();
		
		parent.field1 = "data1";
		parent.method1();
		parent.method2();
		
	/* 불가능	
		parent.field2 = data2;
		parent.method3();
	*/
		
		//강제 타입 변환
		Child child = (Child) parent;
		child.field2 = "yyy";
		child.method3();
	}

}

 

 

객체 타입 확인

instanceof 연산자

어떤 객체가 어느 클래스의 인스턴스인지 확인할 경우 사용한다.

메소드 내 강제 타입 변환이 필요한 경우 - 타입 확인 하지 않고 강제 타입 변환 시도하면, ClassCastException이 발생할 수 있다.

instanceof 연산자를 통해 확인 후 안전하게 실행 한다.

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



public void method(Parent parent){
	if(parent instanceof Child){ //Parent 매개 변수가 참조하는 객체가 Child인지 조사
    	Child child = (Child) parent;
     }
}

 

 

예시2) Instanceof 객체 타입 확인

부모 클래스

public class Parent {

}

자식 클래스 

public class Child extends Parent {

}

객체 타입 확인

public class InstanceofEx {

	public static void method1(Parent parent) {
		if (parent instanceof Child) { // Child 타입으로 변환 가능확인
			Child child = (Child) parent;
			System.out.println("method1 - Child로 변환 성공");
		} else {
			System.out.println("method1 - Child로 변환 실패");
		}
	}

	public static void method2(Parent parent) {
		Child child = (Child) parent; // ClassCastException이 발생할 가능성 있음
		System.out.println("method2 - Child로 변환 성공");
	}

	public static void main(String[] args) {
		Parent parentA = new Child();
		// Child 객체를 매개값으로 전달
		method1(parentA);
		method2(parentA);

		Parent parentB = new Parent();
		// Parent 객체를 매개값으로 전달
		method1(parentB);
		method2(parentB); // 예외 발생
	}

}

 

 

 

 


※용어 정리

  • instanceof 연산자: 객체가 어떤 타입인지 조사할때 사용. 주로 강제 타입 변환 전에 변환이 가능한지 조사할 때 사용한다.

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

 

본 내용은 #혼자공부하는자바 책을 참고해 공부하려 작성했습니다.

 

728x90
반응형

댓글