싱글톤

Singletone

 

 

 

싱글톤은 오직 한 개의 인스턴스만을 갖도록 보장해주며 해당 인스턴스를 전역에서 접근할 수 있는 메서드를 제공한다는 점에서 큰 장점을 제공한다. 

 

 

◎ 싱글톤을 사용하는 이유

1. 한 번도 사용하지 않으면 아예 인스턴스 자체를 생성하지 않는다.

처음 사용될 때 초기화되므로 사용되지 않으면 아예 초기화 되지도 않는다.

 

2. 런타임에 초기화된다.

애초에 전역으로 접근하기 위해 정적 클래스를 사용하기도 하지만 정적 멤버 변수는 컴파일러가 main 함수를 호출하기 전에 초기화하기 때문에 프로그램 실행 후에 알 수 있는 정보들은 활용할 수 없다.따라서 싱글톤을 이용하면 1번과 같이 사용할 때 초기화가 되므로 원하는 시점에서 초기화 하여 사용할 수 있다.

 

3. 싱글톤을 상속할 수 있다.

C# 같은 경우는 제네릭 클래스를 이용해 싱글톤을 상속받아 사용하는 방식도 많이 사용한다. 

 

4. 메모리 낭비 방지

한번의 new로 고정된 메모리 영역을 얻어 인스턴스를 사용하기 때문에 메모리 낭비를 방지할 수 있다.

 

 

◎ 싱글톤의 문제는?

싱글톤의 전역에서 접근할 수 있다는 장점은 곧 단점이 되기도 한다.

 

1. 버그 관리가 힘들 수 있다.

만약 싱글톤으로 호출한 함수에 버그가 있으면 해당 함수 뿐 아니라 해당 함수를 호출한 모든 부분을 확인해야 한다.

 

2. 커플링을 조장한다.

커플링이란 결합도를 뜻한다. 코드는 다른 코드들과의 의존성이 낮을 수록 좋다. 하지만 커플링은 하나의 모듈이 다른 모듈의 내부 데이터를 직접 접근할 때 발생하며, 다른 부분의 내용을 수정할 수 있게 된다. 

싱글톤을 이용하면 코드를 짜면서 나도 모르게 의존성이 높은 코드를 짜게 된다. 

 

3. 멀티스레딩 같은 동시성 프로그래밍에 알맞지 않다

무언가를 전역으로 만들면 모든 스레드가 보고 수정할 수 있는 메모리 영역이 생기게 되는 것이다. 다른 스레드가 전역 데이터에 무슨 작업을 하는지 모를 때도 있다. 그러다 보면 교착상태, 경쟁상태 등 찾기 어려운 스레드 동기화 버그가 생기기 쉽다. 

 

 

 

 

참고 자료;

더 빠르고 깔끔한 게임 코드를 구현하는 13가지 디자인 패턴 게임 프로그래밍 (저; 로버트 나이스트롬 , 역; 박일, 출판사; 한빛미디어)

+ Recent posts