본문으로 바로가기

[Java] SingleTon 기본 static

category Back-end/Java 2016. 4. 28. 11:35

싱글톤이란?

인스턴스는 하나로 제한을 둔다.

즉, 객체를 딱 한번만 생성 가능하게끔 하는 것이다.

이 방법은 중복로그인을 방지할 떄 사용한다.




// 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