강께르의 개발일지

[디자인 패턴] Singleton Pattern 본문

프로그래밍/디자인 패턴

[디자인 패턴] Singleton Pattern

강께르 2021. 6. 27. 22:08

1. 디자인 패턴이란?

- 소프트웨어를 설계할 때, 공통적으로 개발자라면 만나게 되는 문제에 대한 공통적인 해법이나 자주 쓰이는 설계 방법을 이르는 말이다.

- 이를 패턴화하여 재사용하기 좋게 해놓았으며, 효율적인 코드를 만들기 위한 방법론을 제시하기 때문에 개발의 효율성을 좋게 하는 효과가 있다.

- 하지만 이를 패턴을 맹신하여 남용하는 부분은 지양해야 한다. 굳이 이러한 적용점이 필요 없는 부분이라면 적용하지 않을 것이 좋다고 한다.

- 상황에 따라 자주 쓰이는 설계 방법을 정리한 방법론이기에 모든 상황의 해결책은 아니다. 무작정 가져다 쓰기보다 왜 효율적인 방식이고 패턴들로부터 노하우를 습득하는 것이 중요하다고 한다.

- 그리고 상대방과의 의사소통에 도움을 줄 것이다. 예를 들어 문제 해결 제안을 하더라도 길게 늘여서 설명하기보다 특정 패턴을 사용하자고 이야기하는 것이 간결하고 명확한 의사소통 방법이 될 것이다.

 

2. 생성 패턴

- 디자인 패턴 안에서 종류가 여러가지로 나뉜다. 목적에 따른 기준에 나뉘기도 하는데, 그 중 하나가 생성 패턴이라는 종류이다.

- 이는 객체 생성에 관련된 패턴이다. 객체 생성과 조합을 캡슐화하여 특정 객체가 생성되거나 변경되어도 프로그램 구조에 영향을 크게 받지 않는 유연성을 제공한다.

 

3. 싱글톤 패턴

- 싱글톤 패턴은 특정 클래스의 인스턴스가 오직 하나여야 하나 이 인스턴스를 여러 곳에서 사용하는 경우에 사용한다.

- 또 다른 설명으로, 전역변수를 사용하지 않고 객체를 하나만 생성하도록 하며, 생성된 객체를 어디에서든지 참조할 수 있도록 하는 디자인 패턴이라 한다.

- 생성된 인스턴스를 여러 곳에서 공유하여 사용해도 무리가 없다면 싱글톤 패턴을 적용하기도 한다.

 

- 출처에 의한 예는 두 가지가 있었다.

 

- 하나는 사이트에 관한 내용이다. 어느 검색 사이트에서 주변 배경을 검은 톤으로 바꾸어주는 다크 모드를 지원한다고 하면, 그 다크 모드는 그 사이트의 모든 페이지를 넘어가든 일관되게 유지해야 한다.

- 만약 Setting이라는 클래스를 만들어 각 페이지마다 Setting 클래스의 객체 인스턴스를 생성한다고 하면 그 인스턴스들은 서로에 대해 독립적인 객체들이므로 A 페이지에서 다크모드에 대한 설정을 저장했더라고 해도, B 페이지에서는 다크모드가 되지 않을 것이다. 왜냐면 각 페이지는 서로 다른 Setting 클래스이기 때문이다.

- 이를 위해 싱글톤 패턴을 사용한다. 단 하나의 Setting 클래스의 객체를 생성하고 이를 전역 변수처럼 모든 페이지에서 참조하도록 만든 것이다. 이렇다면 A 페이지에서 접근해 변경한 값은 B 페이지에서도 똑같은 값을 얻을 수 있을 것이다. 왜냐면, 두 페이지가 참조하는 객체가 같은 것이기 때문이다.

 

- 다른 하나의 예는 와이파이 공유에 대한 내용이다. 공공 장소에서의 와이파이를 사용하여 네트워크에 연결한다고 하면 연결을 요청한 사용자마다 각각 다른 와이파이를 생성해서 만들어 주지는 않는다.

- 기존에 있던 네트워크를 공유해서 사용하도록 한다. 요청을 받으면 기존의 와이파이가 생성된 것이 있는지 확인하고 없으면 새로 객체를 생성해서 반환하고, 그것이 아니고 원래 있던 와이파이가 있다고 한다면 그것을 반환해주는 것이다.

- 이 때, 와이파이를 관리하는 이 객체는 단 하나라는 것이다. 이 객체에 요청을 하면 객체는 그에 맞는 정보를 반환하는 것이다.

 

- 지금 내가 배우고 사용하는 프레임워크에서도 싱글톤이 적용되어 있다. 그것을 이용해 생성한 대표적인 클래스가 Input 클래스이다.

- Input 클래스는 단 하나만의 객체 인스턴스를 생성하여 이 클래스로 하여금 프로그램 내에서 발생하는 모든 입력에 대한 처리를 담당하게 될 것이다.

- 어느 곳이든지 이 객체 인스턴스에 참조해 입력에 관련된 모든 일을 처리하게 될 것이다.

 

 

출처 :

더보기