좋은 질문이야! 객체(Object)와 타입(Type)의 차이를 확실히 이해하면 다형성을 더 잘 활용할 수 있어.
✅ 객체와 타입의 차이
객체(Object)란?
- 클래스의 인스턴스(실제 메모리에 생성된 것).
- 생성된 객체는 클래스에서 정의한 필드(변수)와 메서드(동작)를 가짐.
- 예)
new Dog()
→ Dog 클래스의 객체 생성.
타입(Type)이란?
- 변수가 참조할 객체의 데이터 유형을 결정.
- 변수가 접근할 수 있는 필드와 메서드를 제한함.
- 예)
Animal myDog = new Dog();
→myDog
변수의 타입은Animal
이므로,Animal
클래스에서 정의된 필드와 메서드만 사용 가능.
✅ 객체 vs. 타입의 동작 차이
객체는 실제로 Dog
인스턴스이지만, 참조 타입(Animal)에 따라 사용할 수 있는 기능이 제한됨.
class Animal {
String type = "동물"; // 필드
void makeSound() { // 메서드
System.out.println("동물이 소리를 냅니다.");
}
}
class Dog extends Animal {
String breed = "불독"; // 자식 클래스에만 있는 필드
@Override
void makeSound() {
System.out.println("멍멍!");
}
void wagTail() { // 자식 클래스에만 있는 메서드
System.out.println("꼬리를 흔듭니다.");
}
}
public class Main {
public static void main(String[] args) {
Animal myDog = new Dog(); // 업캐스팅
System.out.println(myDog.type); // ✅ "동물" (Animal에 정의된 필드 사용 가능)
myDog.makeSound(); // ✅ "멍멍!" (오버라이딩된 메서드는 호출 가능)
// System.out.println(myDog.breed); // ❌ 오류! (Animal에는 breed 필드 없음)
// myDog.wagTail(); // ❌ 오류! (Animal에는 wagTail() 없음)
Dog realDog = (Dog) myDog; // 다운캐스팅
System.out.println(realDog.breed); // ✅ "불독"
realDog.wagTail(); // ✅ "꼬리를 흔듭니다."
}
}
✅ 정리
✔ 객체(Object) = 실제 생성된 인스턴스
✔ 타입(Type) = 변수가 참조할 수 있는 필드와 메서드를 결정
✔ 업캐스팅(Animal myDog = new Dog();)
- 부모 타입 변수는 부모 클래스에 정의된 필드와 메서드만 접근 가능
- 오버라이딩된 메서드는 호출 가능 (동적 바인딩)
✔ 다운캐스팅(Dog realDog = (Dog) myDog;) - 자식 클래스의 필드와 메서드를 사용하려면 다운캐스팅 필요
이제 업캐스팅과 타입의 개념이 더 명확해졌을 거야! 😊
'자바' 카테고리의 다른 글
다형성이란? (0) | 2025.02.09 |
---|---|
상속(Inheritance)이란? (0) | 2025.02.09 |
Object 클래스란? (0) | 2025.02.09 |
super() 정리2 (0) | 2025.02.09 |
매개변수가 없는 메서드와 매개변수가 없는 생성자 비교를 통한 생성자 이해 (0) | 2025.02.08 |