[JAVA] Singleton Pattern

[JAVA] Singleton Pattern

먼저 코드부터 보자.

public class Iexample { private static Iexmaple iexample; private Iexample() { } public static Iexample getInstance() { if(iexample == null) { iexample = new Iexample(); } return iexample; } }

파이썬은 모듈 자체가 Singleton Pattern을 따르기 때문에 별도의 선언이 필요가 없지만 자바는 아니다.

private으로 자신에 대한 field와 디폴트 생성자를 생성한다.

만약 객체가 생성되지 않았다면 새로운 객체를, 생성되어 있다면 이미 만들어진 객체를 반환하는 방식이다.

public class Test{ Iexample test1 = Iexample.getInstance(); Iexample test2 = Iexample.getInstance(); }

test1에서는 Iexample 객체를 생성하였다.

test2는 test1에서 만들어진 Iexample 객체를 재사용하게 되는 것이다.

즉, test1과 test2의 Iexample 객체는 동일한 객체가 되는 것이다.

이와 같은 패턴을 사용하는 이유는 다음과 같다.

객체가 여러 개 생성되면 설정 값이 변경될 위험이 생길 수 있다.(레지스트리 설정 파일 등) 하나의 인스턴스를 메모리에 등록해서 여러 쓰레드가 동시에 해당 인스턴스를 공유하여 사용할 수 있어 효율을 높일 수 있다.

다만 문제점도 존재한다.

많은 데이터를 공유시킬 경우 다른 클래스의 인스턴스들 간에 결합도가 높아져 객체 지향 설계 원칙에 어긋날 수 있다. 수정이 어려워지고 테스트하기가 어려워진다. 멀티쓰레드 환경에서 동기화처리를 하지 않는 경우 인스턴스가 다수 발생할 수 있다.

from http://jollypyun.tistory.com/80 by ccl(A) rewrite - 2021-10-31 19:27:25