1. 요약

싱글톤 패턴은 아주 간단하거나 단순한 프로그램을 만들때 유용하게 사용할 수 있는 디자인 패턴입니다. 싱글톤 패턴을 사용하게 되면 모든 데이터를 전역으로 관리할 수 있기 때문에 쉽게 접근할 수 있다는 장점이 있습니다. 하지만 이는 복잡하고 체계적인 프로그램을 만드는데 다양한 문제를 만들 수 있는 가능성이 있는 디자인 패턴으로 조금해서 사용해야 합니다. 

2. 싱글톤 패턴

싱글톤 패턴은 해당 객체의 메모리를 정적으로 할당하여 하나의 객체에만 접근하는 방법입니다. 따라서 프로그램이 동작하는 동안 최초로 생성된 객체 하나에만 접근하게 되므로 데이터를 접근하고 수정하는데 아주 용이한 특징이 있습니다. 그리고 생성자를 다른 곳에서 새롭게 선언을 하더라도 이미 정적으로 선언된 객체가 반환되기 때문에 중복되어 생성되는 것을 방지 할 수 있습니다. 그리고 초기 객체를 생성을 하게 되면 정적 메모리에 올라가기 때문에 이후 호출하는데 아주 빠르게 접근할 수 있는 장점이 있습니다. 

하지만 싱글톤 패턴을 사용할때 문제점도 많이 생기는데요. 우선 정적 메모리에 할당된 객체로 해당 객체에 너무 큰 메모리가 쌓이게 되면 프로그램 성능이 현저하게 낮아질 수 있습니다. 이는 정적 메모리에 할당할 수 있는 메모리 크기가 제한적이기 때문입니다. 그리고 프로그램이 복잡해지면서 서로 다른 데이터를 공유하게 되는데 이때 다른 객체들과 결합도가 낮아지게 됩니다. 이는 디버깅 과정 등 협업을 하는데 어려움이 됩니다. 또 하나의 정적 메모리를 사용하기 때문에 병렬처리나 동기화와 같이 여러방법으로 메모리에 접근하는데 문제가 생기게 됩니다.  

따라서 싱글톤 패턴을 사용하는데 있어서 그 용도와 한계를 명확하게 알고 사용하는 것이 중요합니다. 싱글톤의 경우 병렬처리나 동기화를 위해서 사용되는 방법이 따로 존재하지만, 이는 프로그래밍 언어가 발전하면서 다양한 기법들이 나오면서 가능해진 것입니다. 따라서 싱글톤과 멀티쓰레드를 동시에 사용할 일이 있다고 하더라도 이를 둘다 선택하는게 아닌 다른 방법이 있는지 찾아보는 것이 더 좋은 방법이 됩니다.   

 3. 예제

지금부터 싱글톤 패턴이 어떻게 사용되는지 실제 코드를 가지고 이야기하도록 하겠습니다. 

Singleton으로 클래스를 생성한 기본 코드입니다. Singleton 이라는 클래스 이름을 갖고, 내부에는 static 으로 객체를 하나 생성합니다. 그리고 static 함수로 해당 객체의 정적 객체를 반환하는 함수를 만들었습니다. 그리고 해당 객체가 null 인 경우에만 다시 생성을 하게 됩니다. 따라서 한번 생성된 객체가 null 이 되기 전까지는 기존에 생성된 static 객체를 사용하게 됩니다.

실제 Main 함수에서는 Singleton.Instance() 함수를 이용해서 생성된 객체에 접근할 수 있습니다. 그리고 objectA, objectB, objectC를 생성하더라도 각 객체는 모두 같은 객체입니다.

+ Recent posts