โ๏ธ Java Design-Pattern โ ฅ - Singleton
โ๏ธ Java Design-Pattern โ
ฅ - Singleton
๐
ใJAVA ์ธ์ด๋ก ๋ฐฐ์ฐ๋ ๋์์ธ ํจํด : ์ฝ๊ฒ ๋ฐฐ์ฐ๋ GoF์ 23๊ฐ์ง ๋์์ธ ํจํดใ
๋ฅผ ์ฝ๊ณ ์ ๋ฆฌํ ๊ธ์ ๋๋ค.
Singleton
ํจํด์ด๋?
- ํ๋ก๊ทธ๋จ์ ์คํํ๋ฉด ๋ณดํต ๋ง์ ์ธ์คํด์ค๊ฐ ์์ฑ๋๋ค. ์๋ฅผ ๋ค์ดย
java.lang.String
ย ํด๋์ค์ ๊ฒฝ์ฐ ๋ฌธ์์ด 1๊ฐ์ ์ธ์คํด์ค 1๊ฐ๊ฐ ์์ฑ๋๋ฏ๋ก ๋ฌธ์์ด์ด 1000๊ฐ ๋ฑ์ฅํ๋ ํ๋ก๊ทธ๋จ์ด๋ผ๋ฉด ์ธ์คํด์ค๋ 1000๊ฐ๊ฐ ๋ง๋ค์ด์ง๋ค. - ํ์ง๋ง ๋ค์๊ณผ ๊ฐ์ ๊ฒฝ์ฐ ์ด๋ป๊ฒ ํด์ผ ํ ๊น?
โ์ง์ ํ ํด๋์ค์ ์ธ์คํด์ค๊ฐ ๋ฐ๋์ 1๊ฐ๋ง ์กด์ฌํ๋ค๋ ๊ฒ์ ๋ณด์ฆํ๊ณ ์ถ์ ๋โ
โ์ธ์คํด์ค๊ฐ ํ๋๋ง ์กด์ฌํ๋ค๋ ๊ฒ์ ํ๋ก๊ทธ๋จ ์์์ ํํํ๊ณ ์ถ์ ๋โ
- ์ด๋ ์ธ์คํด์ค๊ฐ ํ๋๋ง ์กด์ฌํ๋ ๊ฒ์ ๋ณด์ฆํ๋ ํจํด์ย
Singleton
ย ํจํด์ด๋ผ๊ณ ๋ถ๋ฅธ๋ค.
์์ ํ๋ก๊ทธ๋จ
Singleton
์ยstatic
ย ํ๋๋ก ์ ์๋๋ค.- ํด๋์ค ๋ณ์๋ผ๊ณ ๋ ํ๋ค.
- ํด๋น ํ๋๋ย
Singleton
ย ํด๋์ค์ ์ธ์คํด์ค์์ ์ด๊ธฐํํ๋ฉฐ, ์ด๊ธฐํ๋ ํด๋์ค๋ฅผ ๋ก๋ํ ๋ ํ ๋ฒ๋ง ์คํ๋๋ค. - ์์ฑ์๋ย
private
๋ก ๋์ด ์๊ธฐ ๋๋ฌธ์ ์ธ๋ถ์์ ์์ฑ์ ํธ์ถ์ ๊ธ์งํ๋ค. - ๋ง์ฝ ์ธ๋ถ์์ ์์ฑ์๋ฅผ ํธ์ถํ ๊ฒฝ์ฐ ์ปดํ์ผํ ๋ ์๋ฌ๊ฐ ๋ฐ์ํ๋ค.
- ๊ทธ๋ฐ๋ฐ ๋ค์๊ณผ ๊ฐ์ ์๋ฌธ์ด ์๊ธธ ์ ์๋ค.
โ์ฒ์๋ถํฐ ํ๋ก๊ทธ๋๋จธ๊ฐ ์ฃผ์ํด์ ์ธ๋ถ์์ ์์ฑ์ ํธ์ถ์ ํ์ง ์์ผ๋ฉด ๋์ง ์๋?โ
โ์ ์ด์ ์ฑ๊ธํค ํด๋์ค๋ฅผ ๋ง๋ค ํ์ ์์ด ํ๋ก๊ทธ๋๋จธ๊ฐ ์ธ์คํด์ค๋ฅผ ํ ๋ฒ๋ง ์์ฑํ๋ฉด ๋๋ ๊ฒ ์๋๊ฐ?โ
- ํด๋น ํจํด์ ํ๋ก๊ทธ๋๋จธ๊ฐ ์ด๋ค ์ค์๋ฅผ ํ๋๋ผ๋ ์ธ์คํด์ค๊ฐ ํ๋๋ง ์์ฑ๋๋ ๊ฒ์ ๋ณด์ฆํ๋ ํจํด์ด๋ฏ๋ก ์์ ์๋ฌธ๋ค์ ์๋ฏธ๊ฐ ์๋ค.
getInstance
๋ยSingleton
ย ํด๋์ค์ ์ ์ผํ ์ธ์คํด์ค๋ฅผ ์ป๋ ๋ฉ์๋์ด๋ค.- ์ฌ์ค ํด๋น ๋ฉ์๋๋ย
static Factory Method
์ ์ผ์ข ์ด๋ค. - ์ด๋ฆ์ ๋ฌ๋ฆฌ ํด๋ ๋์ง๋ง, ์ ์ผํ ์ธ์คํด์ค๋ฅผ ์ป์ ๋ฐฉ๋ฒ์ด ๋ฌด์ธ๊ฐ ํ์ํ๋ค.
Singleton
ํด๋์ค
1
2
3
4
5
6
7
8
9
10
11
12
public class Singleton {
private static Singleton instance;
private Singleton() { }
public static Singleton getInstance() {
if (instance == null) {
instance = new Singleton();
}
return instance;
}
}
Main
ย ํด๋์ค
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public class Main {
public static void main(String[] args) {
System.out.println("Start");
Singleton obj1 = Singleton.getInstance();
Singleton obj2 = Singleton.getInstance();
if (obj1 == obj2) {
System.out.println("obj1๊ณผ obj2๋ ๊ฐ์ ์ฃผ์๋ฅผ ์ฐธ์กฐํฉ๋๋ค.");
} else {
System.out.println("obj1๊ณผ obj2๋ ์๋ก ๋ค๋ฅธ ์ฃผ์๋ฅผ ์ฐธ์กฐํฉ๋๋ค.");
}
System.out.println("End");
}
}
Main
ย ํด๋์ค๋ฅผ ์คํํ๋ฉดยobj1
์ยobj2
๋ ๊ฐ์ ์ธ์คํด์ค์์ ์ ์ ์๋ค.
Singleton
ย ํจํด์ ๋ฑ์ฅ์ธ๋ฌผ
Singleton
ย ํด๋์ค
Singleton
ย ์ญํ ์ด๋ค.- ํด๋น ์ญํ ์ ์ ์ผํ ์ธ์คํด์ค๋ฅผ ์ป๊ธฐ ์ํย
static
ย ๋ฉ์๋๋ฅผ ๊ฐ๊ณ ์์ผ๋ฉฐ, ํญ์ ๊ฐ์ ์ธ์คํด์ค๋ฅผ ๋ฐํํ๋ค.
์ฑ ์์ ์ ์ํ๋ ํํธ
์ ์ ํํ ๊น?
- ์ธ์คํด์ค๊ฐ ์ฌ๋ฌ ๊ฐ ์กด์ฌํ๋ฉด ์ธ์คํด์ค๊ฐ ์๋ก ์ํฅ์ ๋ฏธ์ณ ์๋์น ์์ ๋ฒ๊ทธ๋ฅผ ๋ง๋ค์ด ๋ผ ์ ์๋ค.
- ํ์ง๋ง ์ธ์คํด์ค๊ฐ ํ๋๋ฟ์ด๋ผ๋ ๋ณด์ฅ์ด ์๋ค๋ฉด ๊ทธ ์ ์ ์กฐ๊ฑด ํ์์ ํ๋ก๊ทธ๋๋ฐ์ ํ ์ ์๋ค.
- ์ ์ ์กฐ๊ฑด์ ๋๊ณ ํ๋ก๊ทธ๋๋ฐํ๋ ๊ฒ์ ์ฌ์ด๋ ์ดํํธ๋ฅผ ์ ์ดํ๋๋ฐ ํจ๊ณผ์ ์ด๋ค.
์ ์ผํ ์ธ์คํด์ค๋ ์ธ์ ์์ฑ๋๋๊ฐ?
- ์์ ํ๋ก๊ทธ๋จ์์๋ย
getInstance
ย ๋ฉ์๋๋ฅผ ํธ์ถํ ๋ยSingleton
ย ํด๋์ค๊ฐ ๋ก๋๋๋ฉฐ ํด๋น ํด๋์ค๊ฐ ์ด๊ธฐํ๋๋ค. - ์ด ๋ย
static
ย ํ๋๊ฐ ์ด๊ธฐํ๋๋ฉฐ ์ ์ผํ ์ธ์คํด์ค๊ฐ ์์ฑ๋๋ค.
Enum
์ ์ด์ฉํย Singleton
1
2
3
4
5
6
7
enum Singleton {
INSTANCE;
public void hello() {
System.out.println("hello is called");
}
}
enum
์ ์์๋ ์์๋ก์ ์ธ์คํด์ค์ ์ ์ผ์ฑ์ ๋ณด์ฆ๋ฐ๋๋ค.- ๊ทธ๋ฌ๋ฏ๋ก ์์๋ฅผ ํ๋๋ง ๊ฐ์ง๋ย
enum
์ ์ด์ฉํ์ฌ ์๊ธฐ ์ฝ๋์ ๊ฐ์ดยSingleton
ย ํจํด์ ๊ตฌํํ ์ ์๋ค. - ๋ค์ ์ฝ๋์ ๊ฐ์ด ์ ์ผํ ์ธ์คํด์ค์ ์ก์ธ์คํ์ฌ ๋ฉ์๋๋ฅผ ํธ์ถํ ์ ์๋ค.
1
Singleton.INSTANCE.hello();
This post is licensed under CC BY 4.0 by the author.