Search
Duplicate
🎱

Singleton Pattern

간단소개
팔만코딩경 컨트리뷰터
ContributorNotionAccount
주제 / 분류
C
Scrap
태그
9 more properties

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
복사