독도갈매기의 개발 블로그
[JS] 객체지향프로그래밍(OOP)의 핵심 개념 인스턴스와 객체 본문
용어정리
Class
객체의 특성을 정의
Object
Class의 인스턴스
Constructor
인스턴화 되는 시점에서 호출되는 메서드
Merhod
객체의 능력 Ex) 걷기, 짖기, 달리기
위 내용은 Mozilla에서 정의한 용어입니다.
Class생성 간단한 설명
class Person { // 클래스 정의
constructor(name, age) { // 생성자 함수 생성 (Constructor)
this.name = name; // 클래스 field 구성
this.age = age; // 클래스 field 구성
}
say() { // 클래스 Method 생성
if (this.name) {
console.log(`안녕 나는 ${this.name}이야`);
} else {
console.log(`안녕하세요!`);
}
}
}
let Kim = new Person('김철수', 18); // Kim이라는 이름의 Person 인스턴스 생성
Kim.say(); // Method 사용
위 코드는 아래의 내용의 이해를 돕기위한 JS 클래스정의 코드입니다.
오늘은 객체지향을 공부하면서 제일 중요한 개념이면서 딱 잘라 정의하기 어려운 객체와 인스턴스의 차이를
제가 이해한 개념으로 최대한 설명해보려합니다.
객체와 인스턴스의 차이점
둘의 차이점을 얘기 할때 객체는 붕어빵 틀이고 인스턴스는 그 틀로 찍어낸 붕어빵이다라고 하기도 합니다.
먼저 객체는 메모리에 할당되지 않은 상태, 즉 메모리에 없는 존재인 경우 객체라고 합니다.
아래와 같은 경우를 말하는거죠
let Kim; // 객체
그와 반대로 new키워드를 사용하여 Person이라는 Class를 변수에 담는 경우 실제로 Heap영역에 메모리가 할당되기 때문에
이를 인스턴스라고 부르는 것이죠
let Kim = new Person('김철수', 18); // 인스턴스
Mozilla의 경우 Javascript에서 객체(Object)를 Class의 인스턴스로 정의한 것으로 보아
Javascript에서 객체는 인스턴스와 같다라고 말하는 것 같습니다.
하지만 이 글을 읽어보시면서 '어? 인스턴스가 아니라 객체아닌가?'싶을 수도 있다고 생각됩니다.
이 포스팅을 위해 자료들을 찾아보면서 알게됐던 것은 인스턴스를 객체로, 객체를 Class로 이해한 사람들도 있고,
아니면 객체와 인스턴스를 같은 의미로 생각하는 사람들도 있다는 것입니다.
제 경우는 메모리의 할당의 초점을 두고 구분을 했지만 사람마다 이해한 내용이 다를 것이라고 생각되며
누구는 틀리다 누구는 맞다고 정의할 수 없는 개념이라고 생각합니다.
객체와 인스턴스의 차이는 이해한 사람들마다 다르니 자신만의 방법으로 구분을 짓어 이해를 하는 것을 추천드립니다.
다음 포스팅은 var, let, const
의 차이점을 준비하고 있습니다. 어떻게 설명할지 애매해서 글이 많이 짧았네요
오늘도 읽어주셔서 감사하며 잘못된 개념이 있다면 얘기해주시면 감사하겠습니다. 읽어주셔서 감사합니다.
'Javascript' 카테고리의 다른 글
[JS] 정규 표현식이 뭐길래 배우는걸까? (0) | 2020.11.28 |
---|---|
[JS] var, let, const 왜 쓸까? 변수 선언방법 차이점 (0) | 2020.10.11 |
[JS] 알아두면 좋은 JS개념 spread와 rest 전개구문 (0) | 2020.09.27 |
[JS] 프레임워크에서 많이 쓰는 JS개념 구조분해할당 (0) | 2020.09.26 |
[JS] 자바스크립트가 어려운 이유 Prototype 편 -끝- (0) | 2020.09.24 |