자바에서는 하나의 클래스로부터: 여러 개의 인스턴스를 생성할 수 있다.
이렇게 생성된 인스턴스는: 독립된 메모리 공간에 저장된 자신만의 필드를 가질 수 있다.
하지만 해당 클래스의 모든 메소드(method)는: 해당 클래스에서 생성된 모든 인스턴스가 공유하게 된다.
1. 클래스
class
- 연관되어 있는 변수와 메서드의 집합
- 객체를 만들어 내기 위한 설계도라 볼 수 있다.
- 특징
- 실체가 없다.
- 객체가 가지는 공통된 속성과 기능을 정의한다.
- 객체를 생성할 수 있는 생성자를 가진다.
- 객체를 해제하는 메서드를 가진다. [ 현대 언어에서는 GC가 호출해준다. ]
- class
- 필드(field)
- 객체의 상태를 나타냄
- 클래스에 포함된 변수(variable)
- 메소드(method)
- 객체의 행동을 나타냄
- 어떠한 특정 작업을 수행하기 위한 명령문의 집합
- 필드(field)
Java에서의 클래스 = 필드(속성을 표현) + 메소드(기능을 표현)
2. 객체
Object
- 소프트웨어 세계에 구현할 대상
- 클래스에 선언된 모양 그대로 생성된 실체
- 객체는 모든 인스턴스를 대표하는 포괄적인 의미를 갖는다.
- 특징
- 클래스를 통해 생성할 대상이다.
- 소프트웨어적인 관점에서 보면 생성자를 통해 구현체가 되지 않았으며 클래스의 타입으로 명시된 상황이다.
- 메모리에 올라올 구현체를 위한 참조만 가진다.
- 이해관계자를 위한 현실세계의 문제점을 소프트웨어로 해결하기 위한 매개체이다.
3. 인스턴스
Instance
자바에서 클래스를 사용하기 위해서는 우선 해당 클래스 타입의 객체(object)를 선언해야 한다.
이렇게 클래스로부터 객체를 선언하는 과정을 클래스의 인스턴스화라고 한다.
- 설계도인 클래스를 바탕으로 구현된 구체적인 실체/객체
- 객체가 메모리에 할당되어 실제 사용될 때 인스턴스라고 부른다.
이때 인스턴스는 힙 영역의 메모리에 할당 된다. - 개념적으로 인스턴스는 객체와 같거나 객체에 포함된다고 봐도 틀린말이 아니다.
- 특징
- new 연산자를 통해 생성자를 호출해서 메모리에 올라온 객체의 상태를 의미한다.
- 세부적인 속성값, 유일 값을 지니며 소프트웨어의 생애주기에 참여하여 동작한다.
(꼭 유일해야 하는 것은 아니다) - 객체는 인스턴스보다 더 포괄적인 단계이다.
- 런타임에 작동하는 객체를 인스턴스라고 말할 수 있다.
- 객체는 인스턴스의 묶음이라고 볼 수 있다.
✔️ 런타임 컴퓨터 과학에서 컴퓨터 프로그램이 실행되고 있는 동안의 동작
1
2
3
4
5
6
7
8
9
10
/* 객체와 인스턴스 */
public class Main {
public static void main(String[] args) {
Phone Galaxy20, IPhone11; // '객체'
// 인스턴스화
Galaxy20 = new Phone(); // Galaxy20은 Phone 클래스의 '인스턴스'(객체를 메모리에 할당)
IPhone11 = new Phone(); // IPhone11은 Phone 클래스의 '인스턴스'(객체를 메모리에 할당)
}
}
4. 비교
4-1. 클래스(Class) VS 객체(Object)
클래스 | 객체 |
---|---|
‘설계도’ | ‘설계도로 구현한 모든 대상’ |
4-2. 객체(Object) VS 인스턴스(Instance)
클래스의 타입으로 선언되었을 때 객체라고 부르고, 그 객체가 메모리에 할당되어 실제 사용될 때 인스턴스라고 부른다.
객체 | 인스턴스 |
---|---|
현실 세계에 가깝다. | 소프트웨어 세계에 가깝다. |
‘실체’에 초점 | 인스턴스는 ‘관계’에 초점 |
‘클래스의 인스턴스’ | ‘방금 인스턴스화하여 레퍼런스를 할당한’ 객체 : 이는 원본(추상적인 개념)으로부터 생성되었다는 것에 의미를 부여하는 것일 뿐 엄격하게 객체와 인스턴스를 나누긴 어렵다. |
4-3. 클래스(Class) VS 인스턴스(Instance)
클래스 | 인스턴스 |
---|---|
객체를 만들어 내기 위한 설계도 | 설계도인 클래스를 바탕으로 구현된 구체적인 실체 |
실체가 없음 | 구체적인 실체 |
4-4. 클래스(Class) VS 객체(Object) VS 인스턴스(Instance)
객체 | 실세계의 엔티티(Entity)를 대표한다. |
인스턴스 | 소프트웨어에서 활동하는 객체의 실재이다. |
클래스 | 실세계의 엔티티를 추상화한 속성과 기능을 가지며 객체를 생성하기 위한 생성자를 제공한다. |
(참고)
- 클래스의 개념
- [Java] 클래스, 객체, 인스턴스의 차이
- 클래스(class), 객체(Object), 인스턴스(Instance)의 차이점. [ Java & OOP 면접 질문1]
- 클래스, 객체, 인스턴스 차이 구분
- [자바, Java] 클래스(class), 객체(object), 인스턴스(instance) 차이
공부한 내용을 여러글과 책 읽은 내용을 바탕으로 정리하고 있습니다.
좋은 글로 저의 공부에 도움을 주시는 분들께 감사드립니다.