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