1. 객체 (Object)


- 객체는 데이터 혹은 기능을 가지고 있어, 그 목적을 수행하는 것이다. 


1) 객체와 클래스

- 클래스가 JVM의 메모리를 할당받아서 생성되었을 때 비로소 클래스에서 객체로 호칭이 변화된다. 

- 즉, 객체와 클래스를 구별하는 것은 JVM 메모리에 생성되었는지 여부이다. 

- 하나의 클래스를 사용하여 여러 개의 객체를 만들 수 있다.

- 객체를 제품으로, 클래스를 설계도라고 볼 수 있다. 




2. 클래스 (Class)


- 객체를 만들기 위해 데이터와 기능을 정의해놓은 일종의 기능 명세서 또는 설계도이다. 


- 클래스 선언: 제어자 + class(키워드) + 클래스 이름 

- 클래스 생성: 보통 new 




3. 인스턴스 (Instance)


- 어떤 클래스를 사용해서 만들어진 객체가, 메모리에 할당되어 실제 메모리를 차지 하는 것이다. 


- 인스턴스는 객체보다 큰 의미이며 즉, 객체는 인스턴스의 한 종류가 된다. 



1) String 클래스형을 가진 coffeeBean 객체는 실제 메모리에 문자열 데이터가 할당되지 않은 상태 

- 아직 메모리에 생성되지는 않았지만 '데이터가 없는 비어 있는 객체'가 생성된 것


2) new 키워드를 사용해서 JVM 메모리에 데이터 생성 


3) 이렇게 클래스로부터 객체를 실제로 메모리에 할당하는 과정을 '객체의 인스턴스화' 라고 한다. 

- coffeeBean 이라는 객체는 'Arabica' 라는 문자열을 할당하여 인스턴스화된 것이다.