on
싱글톤 패턴
싱글톤 패턴
자바 싱글톤패턴이란?
어떤 클래스의 인스턴스를 오직 하나만 생성하여 글로벌하게 접근하는 방법
예를 들어 게임 환경설정 메뉴
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