Design Pattern) Singleton (싱글턴)

2020. 11. 4. 17:03Algorithm (알고리즘)

생성 패턴 디자인 중 하나인 싱글턴에 대해 알아봅시다.

 

목차)

 

싱글턴이란 하나의 객체로만 생성 제한을 두는 디자인 패턴입니다.

제한을 두는 이유는 객체를 생성할 때 즉 인스턴스화를 할 때 드는 비용을 줄이기 위해서입니다.

 

그럼 싱글턴을 어떤 때에 사용하는지 생각해봅시다.

하나의 객체만 존재하니 데이터 관리형 클래스로 사용하는 게 좋을 것 같습니다.

자원을 공유하는 시스템이라면 필요할 것 같습니다.

 

정리를 하자면 아래와 같이 나눠지겠네요.

 

관리자 클래스)

중요 데이터들을 관리하는 클래스인 경우 쉽게 접근이 가능해야 합니다.

그러려면 객체를 저장해야 하는데 싱글턴은 해당 클래스를 인스턴스화 해서 static으로 저장해놓습니다. 그래서 접근하기가 매우 용이하죠.

만약 싱글턴이 아니면 객체 접근이 복잡해지고, 중복 예외 처리를 따로 해줘야 하며 나중에 리펙토링 할 때 코드가 범용성이 떨어지게 됩니다.

 

공유 자원)

싱글턴 클래스는 접근이 용이하다고 말씀드렸죠. 그러면 클래스가 갖고 있는 상태(데이터)도 쉽게 접근이 가능하다는 의미입니다.

예를 들어 스타크래프트에서 미네랄을 캔다고 가정을 했을 때 실질적으로 자원이 증가해야 하는데 만약 객체가 여러 개면 그중에 한 개만 적용이 되고 나머지는 적용이 안 되는 상황이 발생합니다. 그래서 싱글턴을 사용해 에러 사항을 적게 발생시킵니다.

 

 

 

 

 

2. static class vs singleTon class 차이점

 

여기서 궁금점이 생길수도 있습니다. 

static 클래스랑 singleTon 클래스의 차이가 뭐길래 다들 singleTon 클래스를 사용할까?

저도 궁금해서 여기저기 많이 찾아봤는데 일단 static 클래스는 인스턴스 즉 객체를 생성할 수 없었습니다.

그러나 싱글턴은 객체를 생성을 막을뿐이지 객체 복사는 가능합니다.

두번짼 상속 문제가 있었습니다. static 클래스는 상속 자체가 안되기 때문입니다.

세번째는 인터페이스 구현 차이입니다.

 

정리를 하자면 

1. 객체 복사를 가능하나 못하냐 차이가 있습니다.

2. 상속이 가능하냐 못하냐 차이가 있습니다.

3. 인퍼테이스 구현이 가능하냐 못하냐의 차이가 있는것 같습니다.

'Algorithm (알고리즘)' 카테고리의 다른 글

백준 1085번 문제  (0) 2019.09.27
백준 2163번 문제  (0) 2019.09.27
백준 1475번 문제  (0) 2019.09.27