[Java] 객체의 형변환

전우석·2024년 4월 1일

Java

목록 보기
23/24

객체의 형변환(Casting)

특정 객체의 타입을 다른 타입으로 변환하는 것

  • Java를 비롯한 객체 지향 프로그래밍 언어에서는, 주로 상속 관계에 있는 클래스 간의 형변환을 의미한다.
  • 객체 형변환에는 업캐스팅(Upcasting)다운캐스팅(Downcasting)이 있다.
  • 객체의 형변환을 통해 다형성을 구현하고, 유연한 코드 작성을 가능하게 할 수 있다.

업캐스팅(Upcasting)

업캐스팅은 자식 클래스 타입의 객체를 부모 클래스 타입으로 변환하는 것을 말한다.(자식 → 부모)

  • 업캐스팅어떠한 경우에서도 안전하며, 자바에서는 자동으로 수행된다.
  • 업캐스팅을 통해 자식 클래스의 객체부모 클래스 타입의 참조 변수로 참조할 수 있게 된다.
  • 또한, 특정 객체를 더 일반적인 타입으로 다룰 수 있게 된다.

업캐스팅 예시

Parent parent = child;
parent.method1();  // Parent 클래스의 메서드 호출
parent.method2();  // Child 클래스에서 오버라이드된 메서드 호출
  • 위 예시에서 parent 변수는 Parent 클래스 타입이지만, Child 클래스의 인스턴스를 참조한다.
  • 따라서 Parent 클래스에 정의된 method1을 호출하고, Child 클래스에서 오버라이드된 method2를 호출한다.

다운캐스팅(Downcasting)

다운캐스팅은 업캐스팅의 반대 과정으로, 부모 클래스 타입의 객체를 자식 클래스 타입으로 변환하는 것을 말한다.(부모 → 자식)

  • 다운캐스팅은 명시적으로 형변환 연산자를 사용해야 하며, 항상 안전하지는 않다.
  • 다운캐스팅은 제한적인 상황에서만 이루어질 수 있다. 만약 이 조건을 만족하지 못한다면 런타임에 **ClassCastException**에러가 발생한다.
    • 다운캐스팅에 필요한 조건은, 변환하려는 객체가 실제로 해당 자식 클래스 타입의 인스턴스여야 한다.

다운캐스팅 예시

Parent parent = new Child();  // 자식을 부모로 형변환
Child child = (Child) parent;  // 부모에서 자식으로 명시적 형변환
child.method1();  // Parent 클래스의 메서드 호출
child.method2();  // Child 클래스의 메서드 호출
child.method3();  // Child 클래스의 메서드 호출
  • 위 예시에서, parentChild 클래스의 인스턴스를 참조하는 Parent 타입의 변수입니다.
  • 이 경우, parentChild 타입으로 다운캐스팅하는 것이 가능하며, child를 통해 Child 클래스에만 존재하는 method3에 접근할 수 있게 된다.

주의사항

  • 다운캐스팅은 형변환 대상 객체가 실제로 해당 자식 클래스의 인스턴스일 때만 안전하게 수행된다.
  • 잘못된 다운캐스팅은 ClassCastException을 발생시킬 수 있다. 따라서, instanceof 연산자를 사용하여 형변환 대상 객체의 타입을 확인하는 것이 필요할 수 있다.

0개의 댓글