static ๐ volatile
1070
์์ฑํ ์ง๋ฌธ์ 4
์๋ ํ์ธ์!
์ฒซ๋ฒ์งธ ์ง๋ฌธ์ ์ฑ๊ธํค ํจํด์ ๊ตฌํํ๋ 7๊ฐ์ง ๋ฐฉ๋ฒ #2. LazyHolder, DCL, ENUM ๊ฐ์ ๋ด์ฉ์์
static์ ์ธ์คํด์ค ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๊ณต์ ์ํด์ผ๋ก์ ๊ฐ ์ค๋ ๋๊ฐ ์์กด์ ์ด๋ค.
volatile์ ๊ฐ ์บ์๋ฉ๋ชจ๋ฆฌ๊ฐ ์๋ ๋ฉ์ธ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๊ณต์ ์ํด์ผ๋ก์ ๊ฐ ์ค๋ ๋๊ฐ ์์กด์ ์ด๋ค.
๊ทธ๋ ๋ค๋ฉด static์ volatile ํค์๋๊ฐ ์์ผ๋ฏ๋ก ๋ฉ์ธ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๊ณต์ ํ์ง ์๊ณ ๊ฐ ์บ์๋ฉ๋ชจ๋ฆฌ๋ฅผ ๊ฐ์ง๋ ๊ฒ์ธ์ง, ๊ทธ๋ ๋ค๋ฉด ์ด๋ป๊ฒ ์ธ์คํด์ค ๋ฉ๋ชจ๋ฆฌ๊ฐ ๊ณต์ ๋ ์ ์๋์ง ๊ถ๊ธํฉ๋๋ค.
๋๋ฒ์งธ ์ง๋ฌธ์, ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๊ณต์ ์ํด์ผ๋ก์ ๊ฐ ์ค๋ ๋๊ฐ ์์กด์ ์ด๊ฒ ํ๋ ๋์์ static๋ ๊ฐ๋ฅํ๋ฐ ์ volatile์ ์ฌ์ฉํ๋ ๊ฒ์ธ์ง, static๊ณผ volatile์ ์ฐจ์ด์ ์ ๋ฌด์์ธ์ง ๊ถ๊ธํฉ๋๋ค!
๋ต๋ณ 1
0
์๋ ํ์ธ์ ํก์ธ๋ใ ใ
static์ ์ธ์คํด์ค ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๊ณต์ ์ํด
>> ์ด๋ป๊ฒ static์ผ๋ก ์ธ์คํด์ค ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๊ณต์ ์ํค๋๋ ๋ง์์ด์์ฃ ?
static์ผ๋ก ์ ์ธ๋ ๋ณ์๋ ํด๋์ค๋ก๋๋น ํ๋์ ๋ณ์๋ฅผ ๊ณต์ ํฉ๋๋ค.
๊ทธ๋ฌ๋
๋์ผํ ํด๋์ค์ ํ ์ค๋ ๋์ ์ ๋ฐ์ดํธ๊ฐ ๋ค๋ฅธ ๋ชจ๋ ์ค๋ ๋์๊ฒ ๋ฐ๋ก ๋ฐ์๋์ง ์์ต๋๋ค. ์ด๋ ์บ์๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ค์ฌ์ผ๋ก ๋์ํ๊ธฐ ๋๋ฌธ์ ๋๋ค.

์์ ๊ทธ๋ฆผ์ฒ๋ผ static์ผ๋ก ์ ์ธ๋ staticint๋ ๊ฐ๊ฐ์ ์ค๋ ๋๋ด์์ ๊ณต์ ๋๊ณ ์์์ ๋ณด์ฌ์ค๋๋ค. ๊ทธ๋ฌ๋ volatile์ ๊ฐ๊ฐ์ ์ค๋๋ ์ธ์์๋ ๊ณต์ ๋๊ณ ์์์ ๋ณด์ฌ์ค๋๋ค.
๋ฉ๋ชจ๋ฆฌ๋ฅผ ๊ณต์ ์ํด์ผ๋ก์ ๊ฐ ์ค๋ ๋๊ฐ ์์กด์ ์ด๊ฒ ํ๋ ๋์์ static๋ ๊ฐ๋ฅํ๋ฐ ์ volatile์ ์ฌ์ฉํ๋ ๊ฒ์ธ์ง, static๊ณผ volatile์ ์ฐจ์ด์ ์ ๋ฌด์์ธ์ง ๊ถ๊ธํฉ๋๋ค!
>>
static์ ๊ฒฝ์ฐ 2๊ฐ ์ค๋ ๋(t1, t2)์์ ๊ฐ๊ฐ์ ์บ์๋ฉ๋ชจ๋ฆฌ์์ ๋์ผํ ๊ฐ์ฒด์ ๋ณต์ฌ๋ณธ์ ๋ง๋ค์ด ์์ ํ๋ฏ๋ก t1์ ์ ๋ฐ์ดํธ๊ฐ t2์ ๋ฐ์๋์ง ์์ต๋๋ค.
public class Test {
static boolean flag = true;
public void test() {
new Thread(()->{
int cnt = 0;
while (flag) {
cnt++;
}
System.out.println("Thread1 finished\n");
}
).start();
new Thread(()-> {
try {
Thread.sleep(100);
} catch (InterruptedException ignored) {
}
System.out.println("flag to false");
flag = false;
}
).start();
}
public static void main(String[] args) {
new Test().test();
}
}
์ฆ ์์ ์ฝ๋๋ ๋ฌดํ๋ฃจํ์ ๊ฑธ๋ฆฝ๋๋ค.
volatile์ ๊ฐ์์์ ์ค๋ช ํ ๊ฒ์ฒ๋ผ ๋ฉ์ธ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ค์ฌ์ผ๋ก ํ๊ธฐ ๋๋ฌธ์ ๊ทธ๋ ์ง ์์ต๋๋ค.
๋ํ, ํก์ธ๋ ์ด์ฌํ ๊ณต๋ถํ์๋ ๊ฒ, ์ง๋ฌธํ์๋ ๊ฒ์ ์ ๋ง ์ข์ผ๋ ๊ฐ์ ๋ด์ฉ์ ๊ทธ๋๋ก ๋ธ๋ก๊ทธ์ ์จ๋์ผ์ จ๋๋ฐ... ๊ฐ์๋ด์ฉ์ ๋ธ๋ก๊ทธ์ ์ฐ๋ ๊ฒ์ ๊ธ์งํ๊ณ ์์ด์์. ๋น๊ณต๊ฐ ๋๋ ์ญ์ ๋ถํ๋๋ฆฝ๋๋ค.
๊ฐ์ฌํฉ๋๋ค.
0
์์ธํ ์ค๋ช ๊ฐ์ฌํฉ๋๋ค!
์ฌ์ค ๊ทธ๋ฅ ๋ฉด์ ์์ ์ง๋ฌธ๋ฐ์ ๋ชฉ๋ก? ์ ๋์ ์ฉ๋๋ก ๋ธ๋ก๊ทธ์ ๊ณต๋ถ๋ด์ฉ์ ์ฌ๋ฆฌ๊ณ ์๋๋ฐ ๋ค๋ฅธ ๊ฐ์ฌ๋์ ๊ฐ์ ์๋ฃ๋ฅผ ์บก์ณํ์ฌ ์ฌ์ฉํ์ง ์์ผ๋ฉด ๊ฐ๋ฅํ๋ค๊ณ ํ์ จ๊ฑฐ๋ ์... ๊ฐ์ ์ถ์ฒ๋ฅผ ๋งํฌ๋ก ๋ช ์ํ๊ณ ํฌ์คํ ํด๋ ์๋ ๊น์??ใ ใ
0
์๋ ํ์ธ์ ํก์ธ๋ ใ ใ
๊ณต๊ฐ์ ์ผ๋ก ํฌ์คํ ์ ๋ถ๊ฐ๋ฅํ ๊ฒ ๊ฐ์ต๋๋ค.
๋น๊ณต๊ฐ ๋๋ ์ญ์ ๋ถํ๋๋ฆฝ๋๋ค.
๊ฐ์ฌํฉ๋๋ค.
REST API (Self-descriptive messages)
0
2
0
์์คํ ์์ง๋์ด ๊ด๋ จ ์ง๋ฌธ์ ๋๋ค.
0
39
2
์ค๋ฒ๋ผ์ด๋ฉ ๊ด๋ จํ์ฌ ์ง๋ฌธ๋๋ฆฝ๋๋ค.
0
58
2
๊ต์ฐฉ์ํ์ 4๊ฐ์ง ํ์์กฐ๊ฑด์ด ํ์์ถฉ๋ถ์กฐ๊ฑด์ด ์๋ ์ด์
0
86
1
๋ ๋ ํธ๋ฆฌ, ๋ ๋ ๋ ์ด์ด์ ๊ทธ๋ํฝ ๋ ์ด์ด
0
52
2
๋ก์ปฌ์คํ ๋ฆฌ์ง, ์ธ์ ์คํ ๋ฆฌ์ง, ์ฟ ํค์ ๊ณตํต์
0
62
1
IPv4๊ฐ IPv6๋ณด๋ค ๋น ๋ฅธ ๊ฒฝ์ฐ
0
94
2
UDP๊ฐ ์ ์ก๊ณ์ธต์ ์ญํ ์ ๋ชปํ๋ ๊ฑด ์๋์ง
0
54
1
Path MTU ๋ฐ๊ฒฌํ์์์๋ ํจํท ๋ถํ ์ด ํ์ํ ์ด์ ?
0
62
2
๊ต์ฌ์ LFU ์๊ณ ๋ฆฌ์ฆ์์ 6๋ฒ์ด ์ ํํธ์ธ๊ฐ์?
0
61
2
ํ์ด์ง ๊ต์ฒด ์๊ณ ๋ฆฌ์ฆ? ํ๋ ์ ๊ต์ฒด ์๊ณ ๋ฆฌ์ฆ?
0
76
2
Static ํค์๋๊ฐ ๋ฉ๋ชจ๋ฆฌ์ ์ฌ๋ผ๊ฐ๋ ์์
0
71
2
ํค๋ ์์ถ๋ถ๋ถ ์ง๋ฌธ๋๋ฆฝ๋๋ค
0
69
2
๊ณต์ ์บ์ ๊ด๋ จ ์ง๋ฌธ ๋๋ฆฝ๋๋ค.
0
53
2
์ปจํ ์คํธ๋ context์ contextual information์ผ๋ก ๋๋ ์ง๋ค๋๊ฒ ๋ฌด์จ๋ป์ธ๊ฐ์?
0
195
1
ํ์ ๊ณผ ๋์ญํญ์ ๊ด๊ณ
0
56
2
44๊ฐ ์ง๋ฌธ
0
87
2
๋ฒ์ค ํ ํด๋ก์ง ์ง๋ฌธ ์์๋๋ค
0
48
1
์๋ฐ์คํฌ๋ฆฝํธ, xml ๋ฌธ๋ฒ ๊ด๋ จ
0
61
2
์ ๋ตํจํด๊ณผ ์์กด์ฑ์ฃผ์ ์ง๋ฌธ
0
66
2
Model์ด ๋น์ฆ๋์ค ๋ก์ง์ ๋ด๋นํ๋์?
0
101
2
CS ๊ณต๋ถ ํ๋ ๋ฒ
0
174
2
ํฐ๋๋ ๋ธ๋ก๊ทธ์ ๊ฐ๋ ์ ๋ฆฌํด์ ์ฌ๋ ค๋๋ ๊น์!
0
127
2
FIN ์ธ๊ทธ๋จผํธ ์ง๋ฌธ
0
66
2





