인스턴스가 절대적으로 한 개만 존재하는 것을 보증하고 싶을 경우 사용
두 번째 이용시부터는 객체 로딩시간이 현저히 줄어듬!!
이 패턴의 문제점
싱글톤 인스턴스가 너무 많은 일을 하거나 많은 데이터를 공유시킨다면?
다른 클래스의 인스턴스들 간에 결합도가 높아져서 **"개방-폐쇄 원칙"**을 위배하게 된다.
(객체 지향 설계 원칙에 어긋남)
멀티쓰레드 환경에서 동기화 처리 안하면 인스턴스가 두 개 생성될수도..?
(자바에서만 그럴려나..? 자바스크립트는 어떻게 될까?)
예시 코드 끄적끄적 🤪
closure 활용하여 생성
constSingleton=(function(){let instance;// 비공개 변수// 비공개 메서드 (init)functioninit(){return{// public 메서드getRanoBabo:function(){return`RANO IS 1000 JAE`;},// public 속성
name:'RANO SINGLETON',};}// public 메서드인 sharedInstance 를 정의한 객체// 이 메서드를 통해 비공개된 메서드와 변수에 접근 가능 (closure)return{sharedInstance:function(){if(!instance){
instance =init();}return instance;},};})();
module.exports=Singleton;// ======const a =Singleton.sharedInstance();const b =Singleton.sharedInstance();console.log(a === b);// trueconsole.log(a.getRanoBabo());
ES7
classSingleton{static #instance;constructor(){if(Singleton.#instance)returnSingleton.#instance;this.name='RANO SINGLETON ES7';Singleton.#instance=this;}staticsharedInstance=()=>{if(Singleton.#instance)returnSingleton.#instance;returnnewSingleton();};getRanoBabo=()=>`RANO IS 1000 JAE`;}exportdefaultSingleton;// ======const a =Singleton.sharedInstance();const b =Singleton.sharedInstance();console.log(a === b);// trueconsole.log(a.getRanoBabo());
이번주에 처음 듣는 단어가 나왔다.. 싱글톤?
그게 대체 무엇일까?
(분명 예전에 배웠는데 제대로 안들었겠지 🤪)다들...
장난은 그만하고.. 정리를 해보자!
🤔 싱글톤?
싱글톤이란?
(동일 클래스로 new 를 해도 인스턴스 하나만 존재한다는 것)
호출된 생성자는 최초에 생성한 객체를 반환한다.
동일(기존) 인스턴스를 사용하게 함
이 패턴을 쓰는 이유?
new로 인스턴스를 사용하기 때문에 메모리 낭비를 방지할 수 있음다른 클래스의 인스턴스들이 데이터를 공유하기 쉬움.
이 패턴의 문제점
다른 클래스의 인스턴스들 간에 결합도가 높아져서 **"개방-폐쇄 원칙"**을 위배하게 된다.
(객체 지향 설계 원칙에 어긋남)
(자바에서만 그럴려나..? 자바스크립트는 어떻게 될까?)
예시 코드 끄적끄적 🤪
closure활용하여 생성ES7
참고자료