0Pricing
Java Academy · 강의

업캐스팅·다운캐스팅 및 instanceof

부모 타입으로 업캐스팅하는 방법, instanceof를 사용한 안전한 다운캐스팅, ClassCastException을 일으키는 흔한 실수를 이해합니다.

업캐스팅·다운캐스팅 및 instanceof은(는) CoddyKit의 무료 Java Academy 강의입니다. 이것은 3개 중 3번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 Java Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. Java Academy 강의에는 총 3개의 강의가 포함되어 있습니다.

업캐스팅과 다운캐스팅 비교

업캐스팅은 자식 객체를 부모 유형의 참조에 저장하는 것으로 항상 안전합니다. 다운캐스팅은 반대 방향으로 변환하는 것이므로 주의해야 합니다. 실행 시점에 실제 유형을 확인하여 안전성을 검사합니다.

코드: 업캐스팅 예제

업캐스팅은 암시적으로 이루어지며 안전합니다. Dog를 Animal로 다룰 수 있습니다. Animal에 선언된 메서드를 호출할 수 있고, 실행 시점에는 Dog 버전이 실행됩니다.

public class Main {
  static class Animal {
    void speak() { System.out.println("Animal sound"); }
  }
  static class Dog extends Animal {
    void speak() { System.out.println("Woof"); }
    void fetch() { System.out.println("Fetch!"); }
  }

  public static void main(String[] args) {
    // Upcasting: Dog stored in an Animal reference (safe, automatic)
    Animal a = new Dog();
    a.speak();  // calls Dog's speak() due to dynamic binding

    // a.fetch(); // Not allowed: reference is Animal, which does not declare fetch
    System.out.println("Upcasting hides Dog-only methods from the reference type.");
  }
}

다운캐스팅을 하는 이유

fetch()처럼 하위 클래스에만 있는 메서드가 필요할 때 다운캐스팅합니다. 다운캐스팅은 드물게 사용하고 충분히 검사해야 합니다. 가능하면 부모 유형이나 인터페이스를 대상으로 코드를 작성하세요.

코드: 안전한 다운캐스팅

캐스팅하기 전에 실제 객체의 유형을 확인하세요. 검사가 실패하면 캐스팅을 건너뛰고 다른 경로를 선택하여 ClassCastException을 방지합니다.

public class Main {
  static class Animal { void speak() { System.out.println("Animal sound"); } }
  static class Dog extends Animal { void speak() { System.out.println("Woof"); } void fetch() { System.out.println("Fetch!"); } }
  static class Cat extends Animal { void speak() { System.out.println("Meow"); } }

  public static void main(String[] args) {
    Animal a1 = new Dog();
    Animal a2 = new Cat();

    // Safe downcast using instanceof
    if (a1 instanceof Dog) {
      Dog d = (Dog) a1;
      d.fetch(); // OK
    }

    if (a2 instanceof Dog) {
      Dog d2 = (Dog) a2; // will not run
      d2.fetch();
    } else {
      System.out.println("a2 is not a Dog, skip casting.");
    }
  }
}

흔한 함정

함정: 확인하지 않고 캐스팅하면 ClassCastException이 발생할 수 있습니다. 또 다른 함정은 인터페이스를 기준으로 설계하는 대신 다운캐스팅을 지나치게 사용하는 것입니다. 캐스팅은 필요한 위치 가까이에 두고 다형성을 우선하세요.

코드: 잘못된 캐스팅과 안전한 캐스팅 비교

절대로 무작정 캐스팅하지 마세요. 실행 시 유형이 확실하지 않다면 캐스팅 전에 실제 유형을 확인하고, 일치하지 않을 경우 안전한 대안을 선택하세요.

public class Main {
  static class Animal { void speak() { System.out.println("Animal"); } }
  static class Dog extends Animal { void fetch() { System.out.println("Fetch!"); } }
  static class Cat extends Animal { }

  public static void main(String[] args) {
    Animal a = new Cat();

    // Bad: direct cast (would throw at runtime)
    // Dog dBad = (Dog) a; // ClassCastException if uncommented

    // Good: check first
    if (a instanceof Dog) {
      Dog d = (Dog) a;
      d.fetch();
    } else {
      System.out.println("Not a Dog; skipping cast.");
    }
  }
}

다운캐스팅 확인

빠른 확인: Animal 참조를 Dog로 안전하게 다운캐스팅하려면 어떻게 해야 하나요?

복습

복습: 업캐스팅은 안전하고 흔하게 사용됩니다. 다운캐스팅에는 충돌을 방지하기 위한 유형 확인이 필요합니다. 캐스팅을 줄이려면 부모 유형이나 인터페이스를 기준으로 설계하세요.

자주 묻는 질문

“업캐스팅·다운캐스팅 및 instanceof” 강의는 무료인가요?

네 — “업캐스팅·다운캐스팅 및 instanceof” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 Java Academy 강의 전체를 잠금 해제할 수 있습니다. Java Academy 강의에는 총 3개의 강의가 포함되어 있습니다.

“업캐스팅·다운캐스팅 및 instanceof”에서 뭘 배우나요?

부모 타입으로 업캐스팅하는 방법, instanceof를 사용한 안전한 다운캐스팅, ClassCastException을 일으키는 흔한 실수를 이해합니다. 브라우저에서 직접 실행하는 실습 코드로 Java Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.

Java Academy을(를) 시작하는 데 경험이 필요한가요?

사전 경험은 필요하지 않습니다. CoddyKit의 Java Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 3개 중 3번째 강의입니다.

“업캐스팅·다운캐스팅 및 instanceof” 강의는 얼마나 걸리나요?

대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.

이 Java Academy 강의에서 코드를 작성하고 실행할 수 있나요?

네. 모든 Java Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.

이 강의의 모든 강의

  1. 추상 클래스
  2. 인터페이스(소개 및 비교)
  3. 업캐스팅·다운캐스팅 및 instanceof
← Java Academy(으)로 돌아가기