자바

객체(Object)와 타입(Type)의 차이

Blue_bull 2025. 2. 9. 20:45

좋은 질문이야! 객체(Object)와 타입(Type)의 차이를 확실히 이해하면 다형성을 더 잘 활용할 수 있어.


객체와 타입의 차이

  1. 객체(Object)란?

    • 클래스의 인스턴스(실제 메모리에 생성된 것).
    • 생성된 객체는 클래스에서 정의한 필드(변수)와 메서드(동작)를 가짐.
    • 예) new Dog() → Dog 클래스의 객체 생성.
  2. 타입(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