클래스, 오브젝트, 인스턴스
객체지향 프로그래밍에서 클래스, 오브젝트, 인스턴스 개념 정리
프로그래밍 언어론
클래스
객체를 만들어내기 위한 설계도 또는 템플릿
- 연관되어있는 변수와 메소드의 집합
- 클래스 자체에는 데이터가 들어있지 않음
- 한 번 선언되면 여러 번 사용할 수 있는 템플릿 역할
class Person {
constructor(name, age) {
this.name = name; // field
this.age = age; // field
}
speak() {
// method
console.log(`${this.name}: hello!`);
}
}
객체
소프트웨어 세계에 구현할 대상, 클래스로부터 만들어진 실체
- 클래스에 선언된 모양 그대로 생성된 실체
- 상태와 동작을 가짐
- 클래스의 인스턴스라고도 부름
인스턴스
객체를 실체화한 것, 메모리에 실제로 할당된 구체적인 실체
- 설계도를 바탕으로 소프트웨어 세계에 구현된 구체적인 실체
- 실체화된 인스턴스는 메모리에 할당
- 어떤 원본(추상적인 개념)으로부터 생성된 복제본을 의미
객체 vs 인스턴스
거의 같은 의미로 쓰이나 강조하는 관점이 다르다고 한다.
- Object: 현실 세계에 가깝고, 실체에 초점
- Instance: 소프트웨어 세계에 가깝고, 관계에 초점
JS에서의 구현
// Class 정의
class Person {
constructor(name, age) {
this.name = name;
this.age = age;
}
speak() {
console.log(`${this.name}: hello!`);
}
}
// Object/Instance 생성
const ellie = new Person("ellie", 20); // ellie는 Person 클래스의 인스턴스
const steve = new Person("steve", 25); // steve는 Person 클래스의 인스턴스
// 사용
console.log(ellie.name); // 'ellie'
ellie.speak(); // 'ellie: hello!'
차이점 비교
| 구분 | Class | Object | Instance |
|---|---|---|---|
| 역할 | 설계도/템플릿 | 구현할 대상 | 실체화된 구체적 객체 |
| 데이터 | 데이터 없음 | 실제 데이터 포함 | 메모리에 할당된 데이터 |
| 생성 횟수 | 한 번 선언 | 여러 번 생성 가능 | 여러 번 생성 가능 |
| 메모리 | 메모리 할당 없음 | 개념적 존재 | 실제 메모리 할당 |