싱글톤이란?
인스턴스는 하나로 제한을 둔다.
즉, 객체를 딱 한번만 생성 가능하게끔 하는 것이다.
이 방법은 중복로그인을 방지할 떄 사용한다.
// static이 붙으면 instance를 만들지 않아도 사용할 수 있다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | public class LoginStore { private static LoginStore loginStore = new LoginStore(); private LoginStore() { } public static LoginStore getInstance() { return loginStore; } } | cs |
static은 메모리 공간을 따로 쓸수있다.
static을 집이라고 생각한다면
A 집에 사는 loginStore 를 B집에 사는 getInstance가 가져오게 되는 것.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | public class Main { public static void main(String[] args) { LoginStore loginStore = LoginStore.getInstance(); System.out.println(loginStore); LoginStore loginStore2 = LoginStore.getInstance(); System.out.println(loginStore2); } } | cs |
이것이 바로 singleTon의 기본개념이다.
"원자성"을 가져야 한다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | public class LoginStore { private static volatile LoginStore loginStore; private LoginStore() { } public static synchronized LoginStore getInstance() { if ( loginStore == null ) { loginStore = new LoginStore(); } return loginStore; } } | cs |
이것이 싱글톤의 기본코드이다.
volatile은 내가 바뀌면 너도 바뀌어라
synchronized은 동기화 의미를 가진다.
=======================================================================
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 | import java.util.ArrayList; import java.util.List; public class LoginStore { private List<String> loginSessions; private static volatile LoginStore loginStore; private LoginStore() { loginSessions = new ArrayList<String>(); } public static synchronized LoginStore getInstance() { if ( loginStore == null ) { loginStore = new LoginStore(); } return loginStore; } public void add(String sessionId) { loginSessions.add(sessionId); } public String get(int index) { return loginSessions.get(index); } } | cs |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | public class Main { public static void main(String[] args) { LoginStore loginStore = LoginStore.getInstance(); loginStore.add("ABC"); loginStore.add("ABCD"); loginStore.add("ABCDE"); LoginStore loginStore2 = LoginStore.getInstance(); System.out.println(loginStore2.get(0)); System.out.println(loginStore2.get(1)); System.out.println(loginStore2.get(2)); } } | cs |
결과창 :
"중복로그인 방지 " 할때 사용한다.
'Back-end > Java' 카테고리의 다른 글
델리게이션 구조란? (0) | 2019.06.10 |
---|---|
[JAVA] Thread (2) | 2016.06.10 |
[JAVA] 클래스 상속 interface, implements (0) | 2016.04.11 |
[JAVA] Interface (인터페이스) (0) | 2016.04.11 |
[JAVA] Factorial (0) | 2016.03.17 |