Singleton Pattern
오직 한 개의 클래스 인스턴스만을 갖도록 보장하고, 이에 대한 전역적인 접근점을 제공한다.
객체지향 언어를 접하다 보면 Singleton Pattern을 자주 들어 봤을 것이다. 특정 클래스의 인스턴스(즉, 객체)가 단 하나만 존재하도록 보장하는 디자인 패턴이다.
그렇다면 이런 Singleton Pattern이 어떨 때 유용하게 쓰일까?
가장 간단한 예시는 프린터이다. 여러 컴퓨터에서 프린터 한 대를 공유하는 경우, 한 대의 컴퓨터에서 프린트하고 있을 때 다른 컴퓨터가 프린트 명령을 내려도 현재 프린트하는 작업을 마치고 그다음 프린트를 해야지 두 작업이 섞여 나오면 문제가 될 것이다.
즉, 여러 클라이언트(컴퓨터)가 동일 객체(공유 프린터)를 사용하지만 한 개의 객체(프린트 명령을 받은 출력물)가 유일하도록 상위 객체가 보장하지 못한다면 singleton 패턴을 적용해야 한다. 이처럼 동일한 자원이나 데이터를 처리하는 객체가 불필요하게 여러 개 만들어질 필요가 없는 경우에 주로 사용한다.
Singleton with C...?
C언어에는 클래스, 객체의 개념이 없다. 하지만 Singletion Pattern을 적용한 구조는 만들 수 있다. 어떻게 하면 만들 수 있을까?
stataic변수를 활용한다면 원하는 기능을 구현할 수 있다.
int *singleton()
{
static int value = 42;
return &value
}
C
복사
물론 구조체도 가능하다.
struct node *node_head(void)
{
static struct node head;
return (&head);
}
C
복사
간단하게 실행문을 만들어 테스트해보자
#include <stdio.h>
int *singleton()
{
static int val = 42;
return (&val);
}
int main(void)
{
printf("val : %d\n", *singleton());
*singleton() += 42;
printf("val : %d\n", *singleton());
return (0);
}
C
복사