Post

싱글톤(Singleton) 패턴이란?

싱글톤패턴에 대해서 알아보자

서론

우리는 객체지향언어를 사용할때 클래스와 같은 객체를 선언해 인스턴스를 생성하여 사용한다.
하지만 같은 객체를 계속해서 생성한다면 메모리가 낭비가 발생할 수 있다.
그럴때 사용할 수 있는 것이 싱글톤 패턴이다.

싱글톤패턴이란?

싱글톤 패턴은 객체를 통해 인스턴스를 생성한 뒤, 그 인스턴스를 모듈처럼 사용하는 것이다.
스태틱 함수와 개념이 비슷한데 싱글톤 패턴과 스태틱의 차이는 무엇일까?

스태틱과의 차이점

스태틱 함수는 프로그램이 실행될 때 함수를 선언하여 어디서든지 사용할 수 있는 함수이다.
싱글톤 패턴은 객체를 통해 인스턴스를 생성한 뒤 그것을 모듈처럼 사용할 수 있는 것이다.

이 둘의 가장 큰 차이점은 위에서 나와있듯이 선언하는 시점을 정할 수 있냐 없냐 이다.
싱글톤 패턴은 인스턴스가 생성되는 시점에 선언되기 때문에 선언하는 시점을 정할 수 있고,
스태틱 함수는 프로그램이 실행되는 시점에 메모리에 할당되기떄문에 선언하는 시점을 정할 수 없다.

싱글톤 패턴을 왜 사용하지 않을까?

그렇다면 메모리적으로 이득인 싱글톤 패턴을 우리는 평소에 왜 사용하지 않을까?
그 이유는 싱글톤 패턴을 잘못 사용하면 SOLID 법칙 중 개방-폐쇄 원칙을 위반하게 되기 때문이다.
하나의 싱글톤 패턴으로 생성된 인스턴스가 너무 많은 작업을 하거나, 많은 데이터를 공유하게 될 경우 인스턴스 간의 결합도가 높아져 개방-폐쇄 원칙을 위반하게 된다.

또한 서버환경에서 싱글톤패턴을 사용하더라도 1개의 인스턴스만 생성되는 것을 보장하지 못하기떄문에 싱글톤 패턴을 자주 사용하지 않게되는 것이다.

NodeJs에서의 싱글톤패턴?

여담으로 NodeJs에서는 우리가 모르는 사이에 많은 싱글톤 패턴을 사용하고있다.
그것은 require을 통해 모듈을 불러오는 것이다.

우리가 exports 시킨 모듈은 캐시에 저장되는데 우리가 require로 모듈을 불러올때 새로운 인스턴스를 생성하는 것이 아닌, 캐싱된 인스턴스를 재사용한다.
즉 NodeJs에서의 모듈방식은 싱글톤 패턴과 매우 유사하기때문에 따로 싱글톤 패턴을 구현하여 사용할 필요가 없다.

마치며

오늘은 싱글톤 패턴에 대해서 알아봤다. 싱글톤패턴을 사용하면 안되는 이유에 대해서 위에 적어뒀지만, 잘 사용한다면 메모리의 낭비를 줄일 수 있는 방식이다. 그러므로 완벽하게 컨트롤할 수 있는 싱글톤 패턴을 짜보는 것도 좋은 공부가 될 것이다.

This post is licensed under CC BY 4.0 by the author.