싱글톤 패턴

싱글톤 패턴

자바 싱글톤패턴이란?

어떤 클래스의 인스턴스를 오직 하나만 생성하여 글로벌하게 접근하는 방법

예를 들어 게임 환경설정 메뉴

public class Settings { private static Settings instance = new Settings(); private Settings(){ } public static Settings getInstance(){ return instance; } }

public class Main { public static void main(String[] args) { Settings settings1 = Settings.getInstance(); Settings settings2 = Settings.getInstance(); System.out.println(settings1 == settings2); } }

싱글톤 구현 방법

new를 사용해 인스턴스를 초기화하는 것을 방지하기위해 private 생성자를 사용 static 메소드와 변수를 사용하여 외부에서 접근을 허용해야한다. (기본생성자를 통해 접근이 불가하기때문에)

다양한 싱글톤 패턴구현 방법

1. Thread safe + Eager init

public class Settings { private static Settings instance = new Settings(); private Settings(){ } public static Settings getInstance(){ return instance; } }

위 방법은 클래스가 로딩되는 시점에 바로 초기화 되기 때문에 Thread safe한 방법이다. 즉 미리 만들어 놓은 인스턴스를 반환하는 방법이다. 다만 단점은 미리 만든다라는 점이다. 만들어 놓기만하고 쓰지 않는다고하면 자원을 낭비하는 꼴이기 때문이다.

2. Thread safe + Lazy init

public class Settings { private static Settings instance; private Settings(){ } public static synchronized Settings getInstance(){ if(instance == null){ instance = new Settings(); } return instance; } }

위 방법은 인스턴스를 쓸 시점에 초기화하는 방법이다. Thread safe를 위해 synchronized 키워드를 사용하여 메소드를 구현한다는 점에서 성능저하를 일으킬 수 있다.

공유하기 글 요소 저작자표시

from http://hyeonw777.tistory.com/9 by ccl(A) rewrite - 2021-12-31 17:27:58