객체 지향 프로그래밍(OOP)을 처음 접하면 꼭 나오는 개념이 바로 객체(Object)와 인스턴스(Instance)입니다. 많은 개발자들이 이 두 용어를 혼용해서 사용하지만, 사실은 미묘하지만 중요한 차이가 존재합니다.
이 글에서는 이 둘의 개념을 비유와 예시를 통해 명확히 정리해 드립니다.
객체는 현실 세계에 존재하는 사물을 소프트웨어 안에서 추상화한 개념입니다. 객체는 항상 상태(state)와 행동(behavior)이라는 두 가지 속성을 가집니다.
상태 (State): 객체가 가지고 있는 정보나 데이터
예: 자동차 → 색상, 모델, 속도 등
행동 (Behavior): 객체가 할 수 있는 동작이나 기능
예: 자동차 → 가속, 정지, 방향 전환 등
객체는 단독으로 존재하는 것이 아니라 클래스(class)라는 설계도를 기반으로 만들어집니다.
인스턴스는 클래스를 기반으로 실제 메모리에 생성된 구체적인 실체입니다.
즉, 클래스가 설계도라면, 인스턴스는 그 설계도를 바탕으로 만들어진 진짜 제품입니다.
📌 "인스턴스화(instantiation)"란?
클래스로부터 실제 객체(인스턴스)를 생성하는 과정입니다.
| 구분 | 객체(Object) | 인스턴스(Instance) |
|---|---|---|
| 정의 | 상태와 행동을 가진 추상적 개념 | 클래스로부터 생성된 구체적인 실체 |
| 관계 | 클래스의 개념적 표현 | 특정 클래스에 속하는 객체 |
| 비유 | '자동차'라는 개념 자체 | '현대 쏘나타, 파랑, 속도 60km/h'처럼 구체화된 자동차 |
| 사용 문맥 | 일반적인 OOP 맥락에서 사용 | 클래스와의 관계를 명확히 하고 싶을 때 사용 |
class Animal {
String name;
void makeSound() {
System.out.println("동물이 소리를 냅니다.");
}
}
위 코드는 Animal이라는 클래스를 정의한 것으로, '동물'이라는 개념을 담고 있습니다.
이제 이 클래스를 기반으로 인스턴스를 생성해 보겠습니다:
Animal dog = new Animal();
Animal cat = new Animal();
dog는 Animal 클래스의 인스턴스입니다.cat도 Animal 클래스의 또 다른 인스턴스입니다.👉 요약하면:
✅
dog는 객체입니다.
✅dog는Animal클래스의 인스턴스입니다.
🔄 두 문장은 모두 맞지만, '클래스와의 관계'를 강조하고 싶을 때는 인스턴스라는 용어가 더 적합합니다.
🧾 모든 인스턴스는 객체이지만, 모든 객체가 항상 '인스턴스'라고 명시될 필요는 없습니다.