본문 바로가기

객체지향 디자인 패턴

1. Singleton pattern

싱글톤 패턴이란? 한 클래스의 객체를 한번만 생성하도록 제한하고 이 객체에 대한 광역적 접근을 제공하는 패턴

 

 

출처: https://www.youtube.com/watch?v=lJES5TQTTWE&t=1s 

 

어떤 프로그램내에서 특정 클래스의 객체가 단 하나만 만들어져야 하는 경우에 쓰임!

 

예를들어 Modile phone에서 다크모드로 설정시 어떠한 앱을 사용하건 간에 모두 다크모드가 적용되어야 함. 이것은 세팅을 관리하는 객체는 반드시 같은 것을 사용해야 한다는 말이다. 아래는 Settings라는 클래스로 darkMode여부와 fontSize를 상태로 지닌다.

그리고 안드로이드 프로그래밍을 해보면 페이지마다 클래스가 만들어지는데, 예를들면 아래와 같다.

이 클래스들을 대상으로 메인함수를 아래와 같이 구성해보면 어떤페이지에서건 한번 설정하면 동일한 값을 가져야 하는 속성들이 제각각 노는 것을 볼수 있다.

 

즉 첫번째 페이지에서 설정했던 상태값들이 두번째 페이지에서는 적용되있지 않음.

 

Settings클래스를 변경시켜 보자!!!

이렇게 생성자를 private으로 설정하면 다른 클래스에서 new로 새로운 객체를 생성할 수 없게됨.

재밌게도 클래스 안에서 위와같이 자기자신의 클래스인 Settings타입의 객체를 하나 만든다는 것이다.

 

 

이미 객체가 생성되었다면 다시 new로 생성해주지 않고 기존의 정적 영역에 있던 객체를 반환하고 한번도 생성된 적이 없다면 new로 생성해냄

static변수나 메서드는 정적공간에 위와 같이 딱 하나만 존재하게 됨. 컴파일 할때부터 static요소가 차지할 메모리 공간을 정해놓음.

 

 

 

여기서 드는 의문. 왜 정적 변수를 쓰지 굳이 Singleton을 사용할까? 인터페이스의 사용이나 Lazy loading등 싱글톤으로 할수 있는게 더 많기 때문!!!

 

문제는 위와같은 기본적인 싱글톤 코드를 사용하면 멀티스레드 환경에서 오류가 발생할 소지가있음. 따라서 싱글톤을 보다 안전하게 사용할 수 있는 코드에 대한 구글링이 필요함.

 

'객체지향 디자인 패턴' 카테고리의 다른 글

[UML] 클래스 다이어그램 (Class Diagram)  (0) 2023.11.04
생성패턴  (0) 2023.10.15
3. 장식(Decorator)패턴  (0) 2023.10.05
디자인 패턴(Design Pattern)이란?  (0) 2023.10.05
2. Strategy Pattern  (0) 2023.09.04