객체지향언어를 배우게 되면 가장 먼저 접하게 되는 것이 바로 객체와 인스턴스(instance)입니다. 여기서는 인스턴스가 무엇이고 어떻게 생성되는지 알아보고 왜 인스턴스가 중요한지도 함께 알아보도록 하겠습니다. 먼저 인스턴스는 무엇일까요?



# 자바스크립트 인스턴스(instance)란 무엇인가?
먼저 인스턴스를 설명하기 위해서는 객체가 무엇인지 알아야하겠죠... 인스턴스를 쉽게 설명하자면 비슷한 성질(?)을 가진 여러개의 객체를 만들기 위해서 생성자 함수, Constructor를 만들어 찍어내듯이 사용하는데 이렇게 생성된 객체를 인스턴스라 부를 수 있습니다. 객체지향언어에서 흔히 사용되는 클래스(Class)가 자바스크립트에서는 프로토타입(prototype)이며 생성자 함수가 사용됩니다. 다시 말하면 클래스나 프로토타입을 사용하여 만들어 낸 것이 인스턴스라고 볼 수 있습니다.


! 클래스(Class)? 프로토타입(Prototype)?
여기서 클래스는 객체지향언어에서 가장 중요한 부분 중 하나로 다른 객체를 만드는 틀이라고 생각하면됩니다. 자바스크립트는 객체지향언어이지만 클래스 방식이 아닌 프로타입 방식의 객체지향언어입니다. 즉 인스턴스를 만드는 방법이 클래스를 사용하지 않는 것만 다르며 거의 동일합니다.

이렇게 만들어진 인스턴스는 어떤 특징을 가지고 있을까요? 그 이유가 바로 인스턴스를 사용하는 이유겠죠... 가장 큰 이유는 기본적으로 생성된 인스턴스는 원래의 객체인 클래스나 프로토타입이 가지고 있는 프로퍼티(property)와 메소드(method)를 모두 상속받기 때문입니다.

상속(inheritence) !!!

객체지향에서 가장 중요한 부분이 상속입니다. 상속을 통해 객체가 가지고 있는 프로퍼티와 메소드를 인스턴스에서도 동일하게 사용이 가능할 수 있기 때문입니다. 물론 인스턴스는 기존 객체에서 확장하여 추가된 다른 개별 속성들을 가질 수도 있을 것입니다. 예를들어 티셔츠라는 객체가 인스턴스를 통해 만들어져 티셔츠1이 생겨난 경우 이 티셔츠1이 빨간 티셔츠가 될 수도 있는 것이죠.

아래는 참고하기 위한 인스턴스를 생성하는 과정의 코드로 자바스크립트의 생성자 함수를 사용하였습니다.
// 객체를 만들기 위한 생성자함수(Class)를 생성함
Shirt = function(color) {
   this.color = color;
}


var Shirt1 = new Shirt('Yellow');
// 위 과정을 통해 Shirt1이란 인스턴스가 생성됨

var Shirt2 = new Shirt('white');
var Shirt3 = new Shirt('blue');
...
// 수 많은 인스턴스를 생성할 수 있음



# 마치면서
여기까지 객체와 인스턴스에 대하여 알아보았습니다. 사실 객체지향언어의 가장 기초가 되는 부분으로 객체지향을 공부하기 위해서는 반드시 이해하고 넘어가야 하는 부분입니다.