자바/객체지향 프로그래밍(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)의 요약
- 실체(Instance):
- 클래스 설계도를 기반으로 메모리(Heap) 상에 생성된 구체적인 데이터 구조입니다.
- 클래스의 속성(필드)과 메서드가 포함된 실체화된 데이터입니다.`
- 객체(Object):
- 더 넓은 개념으로, 실체뿐만 아니라 배열, 리터럴, 인터페이스의 구현체 등을 포함합니다.
- 상태(필드)와 행동(메서드)를 가지는 모든 데이터 구조를 포괄합니다.
정의(Metadata)와의 차이
- 정의(Metadata):
- 클래스나 데이터의 구조와 속성에 대한 설명으로, "설계도"에 해당합니다.
- 객체 생성 이전에 클래스의 구조와 동작에 대한 정보를 메서드 영역(Method Area)에 저장합니다.
- 실체(Instance)와의 차이:
- 정의는 메모리에 실제로 데이터를 생성하지 않지만, 실체는 정의를 기반으로 힙 메모리에 데이터를 생성합니다.
- 객체(Object)와의 차이:
- 정의는 객체의 구조와 동작을 기술하며, 객체는 이 정의를 기반으로 동작하는 실체입니다.
결론
- 실체(Instance): 클래스 설계도로부터 힙 메모리에 생성된 구체적인 실체.
- 객체(Object): 더 넓은 개념으로, 실체뿐만 아니라 배열, 리터럴, 인터페이스의 구현체도 포함.
- 정의(Metadata): 클래스와 객체의 설계 정보로, 메모리의 메서드 영역에 저장되어 객체 생성을 지원합니다.