JAVA/객체지향 프로그래밍 (OOP) 기초

부모 타입으로 자식 객체 다루기

DEVLIB 2025. 4. 13. 18:25
728x90

개념 요약: 부모 타입으로 자식 객체를 다루기

부모클래스 참조변수 = new 자식클래스();
  • **업캐스팅(Upcasting)**이라고도 부르며, 자동으로 형변환됩니다.
  • 부모 클래스에 정의된 공통 기능만 사용 가능
  • 오버라이딩된 메서드는 자식 클래스의 메서드가 실행됨 → 동적 바인딩

예제: Animal → Dog, Cat

부모 클래스

public class Animal {
    void sound() {
        System.out.println("동물이 소리를 냅니다.");
    }
}

자식 클래스

public class Dog extends Animal {
    @Override
    void sound() {
        System.out.println("멍멍!");
    }
}

public class Cat extends Animal {
    @Override
    void sound() {
        System.out.println("야옹~");
    }
}

메인 클래스

public class Main {
    public static void main(String[] args) {
        Animal a1 = new Dog();   // 부모 타입으로 자식 객체 참조
        Animal a2 = new Cat();

        a1.sound();   // 멍멍!
        a2.sound();   // 야옹~
    }
}

 

오버라이딩된 메서드는 자식 클래스의 메서드가 호출됨


다형성을 활용한 배열 예제

Animal[] animals = new Animal[3];
animals[0] = new Dog();
animals[1] = new Cat();
animals[2] = new Dog();

for (Animal a : animals) {
    a.sound();  // 각각의 자식 객체에 맞는 sound() 실행
}

instanceof + 다운캐스팅

자식 클래스 고유 기능을 사용하려면 **형변환(다운캐스팅)**이 필요해요.

Animal a = new Dog();

if (a instanceof Dog) {
    Dog d = (Dog) a;   // 다운캐스팅
    d.sound();         // 멍멍!
}

부모 타입으로 자식 객체를 다루는 이유


이유 설명
코드 재사용 공통 로직은 부모 타입으로 처리
다형성 구현 서로 다른 객체를 같은 타입으로 처리
확장성 향상 자식 클래스가 늘어나도 부모 인터페이스로 관리 가능
실전 예 List<String> list = new ArrayList<>(); (컬렉션에서도 활용)

마무리 요약


개념 설명
업캐스팅 부모 = new 자식(); 자동 변환
다형성 하나의 부모 타입으로 다양한 자식 객체 처리
동적 바인딩 오버라이딩된 자식 메서드가 실행됨
다운캐스팅 자식 고유 기능 사용 시 필요 ((자식) 부모)

실습 아이디어

  • Shape → Circle, Rectangle 클래스에서 draw() 오버라이딩
  • Employee[] 배열에 Manager, Engineer 담고 work() 호출
  • Vehicle 타입으로 Bus, Taxi 객체 제어하기
LIST