타입변환

오가람·2022년 12월 22일

타입 변환이란 타입을 다른 타입으로 변환하는 것을 말한다.
클래스도 타입변환이 있는데 클래스의 타입 변환은 상속 관계에 있는 클래스 사이에서 발생한다.

자동 타입 변환

의미 그대로 자동적으로 타입 변환이 일어나는 것을 말한다.

부모타입 변수 = 자식타입 객체;

class Parent {
	void method1() {...}
    void method2() {...}
}


class Child extends Parent {
	void method2() {...}	// 오버라이딩
    void method3() {...}
}


class ChildExample {
	public static void main(String[] args) {
    Child child = new Child();
    Parent parent = child;
    parent.method1();
    parent.method2(); //오버라이딩한 child 메소드가 호출댐
    parent.method3(); //호출불가능
}

강제 타입 변환

자식 타입은 부모 타입으로 자동 변환되지만, 반대로 부모 타입은 자식 타입으로 자동 변환되지 않는다. 대신 캐스팅 연산자로 강제 타입 변환을 할수 있다.

자식타입 변수 = (자식타입) 부모타입객체;

그렇다고 해서 부모 타입 객체를 자식 타입으로 무조건 강제 변환할 수 있는 것은 아니다. 자식 객체가 부모 타입으로 자동 변환된 후 다시 자식 타입으로 변환할 때 강제 타입 변환을 사용할 수 있다.

parent parent = new Child(); //자동 타입 변환
Child child = (Child) parent; //강제 타입 변환

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

class Parent {
	String field1;
    void method1() {...}
    void method2() {...}
}

class Child extends Parent {
	String field2;
    void method3() {...}
}


class ChildExample {
	public static void main(String[] args) {
    Parent parent = new Child();
    parent.field1 = "xxx";
    parent.method1();
    parent.method2();
    parent.field2 = "yyy";	// 불가능
    parent.method3();	// 불가능
    
    Child child = (Child) parent;
    child.field2 = "yyy";	// 가능
    child.method3();	// 가능
profile
개발자준비생

0개의 댓글