하나의 Class에 하나의 Instance만 가지는 패턴이다
객체를 정의하기 위한 자바스크립트 템플릿이다.
여러 개의 객체를 하나씩 정의하지 않기 위해 만든 여러 개의 객체를 찍는 도장 같은 것이다.
Class를 사용해서 생성된 객체를 의미한다
이렇게 생성된 Instance는 클래스에서 정의한 method와 변수를 가지고 있다.
이렇게 하나의 Class에서 두개의 Instance를 만들었다고 가정하다
여기에 있는 Instance 두개는 같은 Class에 나왔지만 다른 Instance이다.
그 이유를 알아보자
여기서 Instance를 만든다는 것은 Object를 만드는 것과 같기 때문이다.
자바스크립트에서는 변수를 직접 저장하지 않고, 객체를 가르키는 참조값을 저장하게 된다.
조금 더 쉽게 알아보자
여기서 various
에 저장되어 있는 값은 객체의 실질적인 값이 아닌 메모리 어딘가에 저장되어 있는 값의 주소이다.
즉, 우리가 instance를 생성한다면, instance는 메모리 어딘가에 저장되고 그 메모리의 주소를 해당 변수에 저장해주는 것이다.
위에서 말한 것을 받아드린다면, 인스턴스를 여러개 생성하는 것은 자원낭비가 될 수 있다고 이해할 수 있다.
예를 들어서, 데이터 베이스에 연결을 하려고 한다면
데이터 베이스 같이 연결과정에서 많은 비용을 차지하는 것을 많이 만들어 둔다면 자원낭비가 굉장히 심할 것이다.
만약 Instance를 여러개 둔다면 다른 곳에서 데이터를 바꾼다면 각각의 Instance는 독립되었기 때문에 데이터 변경을 바로 인지하지 못해서 다른 곳에서 같은 부분의 데이터를 변경했다면 데이터 충돌이 일어날 수 있다.
싱글톤 패턴을 사용한다면 다음과 같은 장점을 가질 수 있다
무거운 연결 과정을 한번만 하면되므로 비용을 더욱 절약할 수 있다.
데이터에 연결된 Instance는 한개이므로 데이터를 받은 Object들은 같은 데이터 값을 참조한다
하나의 Object의 데이터가 변경된다면, 다른 Object들도 알 수 있기 때문에 데이터 충돌이 일어나지 않고 일관성을 가질 수 있다.
class Singleton{
constructor(){
if(!Singleton.instance){
Singleton.instance = this
}
return Singleton.instance
}
getInstance(){
return this.instance
}
}
const a = new Singleton()
const b = new Singleton()
생성자 함수에서 직접 Instance를 생성해준다.
Instance가 Class에 존재하지 않는다면, 만들어주고 있다면 있는 것을 그대로 사용한다.
싱글톤 패턴은 장점도 있지만 단점도 당연 존재한다
우표 아이콘 제작자: Freepik - Flaticon
Object icons created by Freepik - Flaticon
Object icons created by Freepik - Flaticon
Memory icons created by Freepik - Flaticon
Database icons created by Freepik - Flaticon