독도갈매기의 개발 블로그

[JS] 객체지향프로그래밍(OOP)의 핵심 개념 인스턴스와 객체 본문

Javascript

[JS] 객체지향프로그래밍(OOP)의 핵심 개념 인스턴스와 객체

독도갈매기 2020. 9. 29. 13:19

용어정리

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의 차이점을 준비하고 있습니다. 어떻게 설명할지 애매해서 글이 많이 짧았네요
오늘도 읽어주셔서 감사하며 잘못된 개념이 있다면 얘기해주시면 감사하겠습니다. 읽어주셔서 감사합니다.

Comments