Java - Classes, Objects and Instances
- 우리가 클래스, 객체, 인스턴스라고 부르는데 어떤 차이가 있을까?
1. 클래스 (Class)
- 자바에서 가장 작은 단위이며, 상태(필드)와 동작(메서드)으로 구분된다.
- 객체를 생성하기 위한 설계도이며 틀이다. 붕어빵을 예시로 들면 붕어빵을 굽기 위한 틀이라고 보면 된다.
- 런타임 시 JVM의 클래스 영역 메모리에 바로 로딩된다.
- 사람과, 아이유를 예시로 들면 사람이 클래스이다. 사람의 키를 161이라고 말하지는 않는다.
2. 객체 (Object)
- 클래스를 기반으로 생성되며, 추상적인 개념이다.
- 인스턴스와 혼용되어 사용되기도 하지만, 명확하게 분류하자면 JVM의 Heap 메모리에 아직 할당되지 않은 상태를 객체라고 이야기한다.
- 붕어빵을 예시로 들면, 틀로 구워낸 붕어빵 그 자체를 객체라고 한다.
3. 인스턴스 (Instances)
- 클래스를 기반으로 생성되어 Heap 메모리에 할당된 상태를 인스턴스라고 한다.
Car c1 = new Car(); Car c2 = new Car();
- 이렇게 생성되었다고 치면, Car 클래스에 대한 c1, c2라는 인스턴스가 생성되었다고 말한다.
- 이러면 c1, c2라는 인스턴스의 참조주소는 Stack 메모리에 생성되고, 해당 인스턴스의 값들은 Heap 메모리에 생성된다.
- 붕어빵을 예시로 들면, 틀로 구워낸 붕어빵 하나하나를 인스턴스라고 부른다.
- 사람과, 아이유를 예시로 들면 아이유가 인스턴스이다. 사람의 키를 160이라고는 안하지만 아이유의 키를 161이라고는 할 수 있다.