자바/객체지향 프로그래밍(OOP)

실체(Instance)와 객체(Object), 정의(metadata)에 대한 이해

Blue_bull 2025. 1. 3. 19:17

실체(Instance), 객체(Object), 정의(Metadata)에 대한 차이점

구분 실체 (Instance) 객체 (Object) 정의 (Metadata)
정의 클래스의 설계도를 기반으로 Heap 메모리에 생성된 실체 상태(필드)와 행동(메서드)를 가지는 자바에서의 모든 데이터 구조 클래스나 데이터의 구조와 속성을 설명하는 데이터
범위 구체적으로 메모리에 할당된 인스턴스 더 넓은 범위로, 실체뿐만 아니라 인터페이스, 배열, 리터럴 등도 포함 클래스 이름, 필드, 메서드, 상속 관계, 인터페이스 등의 메타데이터를 포함
메모리 Heap 메모리에 존재 메모리 영역에 국한되지 않음 메서드 영역(Method Area)에 저장
역할 클래스 정의를 기반으로 생성된 실체로, 구체적인 데이터를 담음 데이터와 동작을 통합하여 실제로 사용 가능한 형태로 표현 클래스 구조, 필드, 메서드의 시그니처와 같은 정보를 제공
포함 관계 객체의 한 구체적인 형태 실체(Instance)를 포함하는 상위 개념 객체 생성에 필요한 설계 정보
생명 주기 객체가 생성될 때 생성되며, 참조되지 않으면 GC에 의해 소멸 프로그램 실행 중 생성 및 제거 가능 클래스 로드 시 생성되며, 프로그램 종료 시까지 유지

실체(Instance)와 객체(Object)의 요약

  1. 실체(Instance):
    • 클래스 설계도를 기반으로 메모리(Heap) 상에 생성된 구체적인 데이터 구조입니다.
    • 클래스의 속성(필드)과 메서드가 포함된 실체화된 데이터입니다.`
  2. 객체(Object):
    • 더 넓은 개념으로, 실체뿐만 아니라 배열, 리터럴, 인터페이스의 구현체 등을 포함합니다.
    • 상태(필드)와 행동(메서드)를 가지는 모든 데이터 구조를 포괄합니다.

정의(Metadata)와의 차이

  1. 정의(Metadata):
    • 클래스나 데이터의 구조와 속성에 대한 설명으로, "설계도"에 해당합니다.
    • 객체 생성 이전에 클래스의 구조와 동작에 대한 정보를 메서드 영역(Method Area)에 저장합니다.
  2. 실체(Instance)와의 차이:
    • 정의는 메모리에 실제로 데이터를 생성하지 않지만, 실체는 정의를 기반으로 힙 메모리에 데이터를 생성합니다.
  3. 객체(Object)와의 차이:
    • 정의는 객체의 구조와 동작을 기술하며, 객체는 이 정의를 기반으로 동작하는 실체입니다.

결론

  • 실체(Instance): 클래스 설계도로부터 힙 메모리에 생성된 구체적인 실체.
  • 객체(Object): 더 넓은 개념으로, 실체뿐만 아니라 배열, 리터럴, 인터페이스의 구현체도 포함.
  • 정의(Metadata): 클래스와 객체의 설계 정보로, 메모리의 메서드 영역에 저장되어 객체 생성을 지원합니다.