디자인패턴 -5- 단일체(Singleton)

디자인패턴 -5- 단일체(Singleton)

의도

오직 한 개의 클래스 인스턴스만을 갖도록 보장하고, 이에 대한 전역적인 접근점을 제공한다.

위키피디아 singleton (en)

싱글톤의 활용성 및 결과

인스턴스로 접근이 유일하다.

하나의 클래스로 연산하여 따로 생성하는 것보다 비용이 적다.

추상 팩토리 패턴이나, 팩토리 메서드, 빌더, 프로토타입과 같이 사용된다.

로거로 사용이 가능하다.

어디서나 참조가 가능한 단점이자 장점이 있다.

JAVA로 구현한 싱글턴

Singleton

package gof.creation.singleton; public class Singleton { private static Singleton instance = new Singleton(); private Singleton() { } public static synchronized Singleton getInstance() { return instance; } }

Test

package gof.creation; import gof.creation.singleton.Singleton; import org.assertj.core.api.Assertions; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.DisplayNameGeneration; import org.junit.jupiter.api.DisplayNameGenerator; import org.junit.jupiter.api.Test; @DisplayNameGeneration(DisplayNameGenerator.ReplaceUnderscores.class) class SingletonTest { @Test @DisplayName("싱글톤으로 생성한 객체는 같아야 한다.") void singleton_test() throws Exception { //given Singleton instance1 = Singleton.getInstance(); Singleton instance2 = Singleton.getInstance(); //when //then Assertions.assertThat(instance1).isEqualTo(instance2); } }

느낀점

싱글턴 패턴의 경우 스프링 IoC컨테이너의 빈에 사용하는 패턴으로 알고있다. 하지만 싱글턴의 경우 접근을 제어하기 힘들고, 테스트 하기 힘들고, 언어에 따라 단일객체를 보증하지 못할 수 있다. 하지만 싱글턴을 사용할 경우 동시성을 해결할 수 있어 어느정도 장 단점이 있는 패턴이라고 생각한다.

from http://yoojsblog.tistory.com/222 by ccl(A) rewrite - 2021-11-29 23:02:07