디자인 패턴 (싱글톤)

Gloz·2022년 11월 15일
0

API에 대한 내용

목록 보기
4/11

▶ 디자인 패턴

  • 객체 지향 프로그래밍 설계 단계에서 자주 발생하는 or 알려진 문제들을 피하기 위해 사용하는 패턴을 의미한다.

▷ 장점

  1. 의사 소통 간결화로 효율 증가 (작업 속도 증가)

  2. 평준화 되고 안정적인 코드 동작성

  3. 프로그래밍을 작성하는데 있어 디자인 타임에서의 다양한 상황에 대한 가이드 및 방향성 제시

▷ 단점

  1. 디자인 패턴은 코드를 설계하고 작성하는 하나의 방법일 뿐 모든 해결의 방법은 아님

  2. 대부분 디자인 패턴은 원본 부분과 활용 부분이 나뉘어져 있기 때문에 코드 간결화를 생각한다면 고민이 필요

싱글톤

  • 디자인 패턴의 수문장 ( 효율이 좋다.)

  • 프로젝트 전체에서 한개만 존재해야 하는 객체나 클래스, 또는 프로젝트 전체에서 공유하는 클래스에 적용할 수 있는 패턴

▷ 장점

  • 한번의 new를 통해서 객체를 생성하며 만약 프로젝트 어느곳에서도 사용하지 않고 있다면 인스턴스를 생성하지 않기 때문에 메모리 낭비를 방지할 수 있다.
    <이것은 template의 장점이며 싱글톤 자체가 template을 쓰기 때문이다.>

▷ 단점

  • 싱글톤은 대부분 전역변수로 처리하는 경우가 많기 때문에 코드에 대해 알아보기가 어려워지는 상황이 생길 수 있다.

  • 싱글톤 인스턴스에 너무 많은 데이터가 공유된다면 결합도가 높아져 유지보수가 힘들다.

template<class T>
class SingletonBase
{
protected:
	static T* singleton;  // 싱글톤 인스턴스 선언
    
    Singleton(){}
    ~Singleton(){}
    
public:

	static T* getSingleton(void);  // 싱글톤 가져오기
    void releaseSingleton(void);  // 싱글톤 메모리에서 해제
}

// 싱글톤 초기화
template<typename T>
T* SingletonBase<T>::singleton = 0;

// 싱글톤 가져오기
template<typename T>
T* SingletonBase<T>::getSingleton(void)
{
	// 싱글톤이 없다면 새로 생성
	if(!singleton) singleton = new T;
    
    return singleton;
}

// 싱글톤 메모리에서 해제
template<typename T>
void SingletonBase<T>::releaseSingleton(void)
{
	// 싱글톤이 있다면 메모리에서 해제
	if(singleton)
    {
    	delete singleton;
        singleton = 0;
    }
}

디자인패턴에 대해 공부를 해보면서 아직 template 함수에 익숙하지 않아 많이 미숙한 면이 있다.

보다 더 자세하고 코드를 읽어나갈 능력을 키우기 위해 template에 대한 공부를 더 해 보자.

profile
개발자가 되기 위해 조금씩 나아가겠습니다.

0개의 댓글