Study/CleanCode

[Study][CleanCode - 3] 13. ๋™์‹œ์„ฑ

youn12 2022. 8. 10. 14:18
๐Ÿ“‹ ๋ชฉ์ฐจ.

13. ๋™์‹œ์„ฑ
    .
๋™์‹œ์„ฑ์ด ํ•„์š”ํ•œ ์ด์œ ?
    .๋‚œ๊ด€
    .๋™์‹œ์„ฑ ๋ฐฉ์–ด ์›์น™
    .๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ดํ•ดํ•˜๋ผ.
    .์‹คํ–‰ ๋ชจ๋ธ์„ ์ดํ•ดํ•˜๋ผ.
    .๋™๊ธฐํ™”ํ•˜๋Š” ๋ถ€๋ถ„์„ ์ž‘๊ฒŒ ๋งŒ๋“ค์–ด๋ผ
    .์˜ฌ๋ฐ”๋ฅธ ์ข…๋ฃŒ ์ฝ”๋“œ๋Š” ๊ตฌํ˜„ํ•˜๊ธฐ ์–ด๋ ต๋‹ค.
    .์Šค๋ ˆ๋“œ ์ฝ”๋“œ ํ…Œ์ŠคํŠธํ•˜๊ธฐ
    .๊ฒฐ๋ก 


โœ”๏ธ ๋‚ด์šฉ.

 

13. ๋™์‹œ์„ฑ

 

๊ฐ์ฒด๋Š” ์ฒ˜๋ฆฌ์˜ ์ถ”์ƒํ™”๋‹ค. ์Šค๋ ˆ๋“œ๋Š” ์ผ์ •์˜ ์ถ”์ƒํ™”๋‹ค.
- ์ œ์ž„์Šค O. ์ฝ”ํ”Œ๋ฆฌ์—”

 

๋™์‹œ์„ฑ๊ณผ ๊น”๋”ํ•œ ์ฝ”๋“œ๋Š” ์–‘๋ฆฝํ•˜๊ธฐ ์•„์ฃผ ์–ด๋ ต๋‹ค.
 ์ด ์žฅ์—์„œ๋Š” ์—ฌ๋Ÿฌ ์Šค๋ ˆ๋“œ๋ฅผ ๋™์‹œ์— ๋Œ๋ฆฌ๋Š” ์ด์œ ๋ฅผ ๋…ผํ•œ๋‹ค. ์—ฌ๋Ÿฌ ์Šค๋ ˆ๋“œ๋ฅผ ๋™์‹œ์— ๋Œ๋ฆฌ๋Š” ์–ด๋ ค์›€๋„ ๋…ผํ•˜๋ฉฐ ์ด๋Ÿฐ ์–ด๋ ค์›€์—์„œ ์–ด๋–ป๊ฒŒ ๊นจ๋—ํ•œ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋Š”์ง€ ๋ฐฉ๋ฒ•๋„ ์ œ์•ˆํ•œ๋‹ค.
 ๋งˆ์ง€๋ง‰์œผ๋กœ, ๋™์‹œ์„ฑ์„ ํ…Œ์ŠคํŠธํ•˜๋Š” ๋ฐฉ๋ฒ•๊ณผ ๋ฌธ์ œ์ ์„ ๋…ผํ•œ๋‹ค.

 


.๋™์‹œ์„ฑ์ด ํ•„์š”ํ•œ ์ด์œ ?

 

 ๋™์‹œ์„ฑ์€ ๊ฒฐํ•ฉ์„ ์—†์• ๋Š” ์ „๋žต์ด๋‹ค. ์ฆ‰, ๋ฌด์—‡๊ณผ ์–ธ์ œ๋ฅผ ๋ถ„๋ฆฌํ•˜๋Š” ์ „๋žต์ด๋‹ค.

๋‹จ์ผ ์Šค๋ ˆ๋“œ ํ”„๋กœ๊ทธ๋žจ์€ ๋ฌด์—‡๊ณผ ์–ธ์ œ๊ฐ€ ์„œ๋กœ ๋ฐ€์ ‘ํ•˜๋‹ค. ํ˜ธ์ถœ ์Šคํƒ์„ ์‚ดํŽด๋ณด๋ฉด ํ”„๋กœ๊ทธ๋žจ์˜ ์ƒํƒœ๋ฅผ ๊ณง๋ฐ”๋กœ ์•Œ ์ˆ˜ ์žˆ๋‹ค.

 ๋ฌด์—‡๊ณผ ์–ธ์ œ๋ฅผ ๋ถ„๋ฆฌํ•˜๋ฉด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ตฌ์กฐ์™€ ํšจ์œจ์ด ๊ทน์ ์œผ๋กœ ๋‚˜์•„์ง„๋‹ค. ๊ตฌ์กฐ์  ๊ด€์ ์—์„œ ํ”„๋กœ๊ทธ๋žจ์€ ๊ฑฐ๋Œ€ํ•œ ๋ฃจํ”„ ํ•˜๋‚˜๊ฐ€ ์•„๋‹ˆ๋ผ ์ž‘์€ ํ˜‘๋ ฅ ํ”„๋กœ๊ทธ๋žจ ์—ฌ๋Ÿฟ์œผ๋กœ ๋ณด์ธ๋‹ค. ๋”ฐ๋ผ์„œ ์‹œ์Šคํ…œ์„ ์ดํ•ดํ•˜๊ธฐ ์‰ฝ๊ณ  ๋ฌธ์ œ๋ฅผ ๋ถ„๋ฆฌํ•˜๊ธฐ ์‰ฝ๋‹ค.

 

 ์˜ˆ๋กœ. ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ํ‘œ์ค€์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” '์„œ๋ธ”๋ฆฟ(Servlet)' ๋ชจ๋ธ์„ ์‚ดํŽด๋ณด์ž. 

์„œ๋ธ”๋ฆฟ์€ ์›น ํ˜น์€ EJB ์ปจํ…Œ์ด๋„ˆ๋ผ๋Š” ์šฐ์‚ฐ ์•„๋ž˜์„œ ๋Œ์•„๊ฐ€๋Š”๋ฐ, ์ด๋“ค ์ปจํ…Œ์ด๋„ˆ๋Š” ๋™์‹œ์„ฑ์„ ๋ถ€๋ถ„์ ์œผ๋กœ ๊ด€๋ฆฌํ•œ๋‹ค. ์›น ์š”์ฒญ์ด ๋“ค์–ด์˜ฌ ๋•Œ๋งˆ๋‹ค ์›น ์„œ๋ฒ„๋Š” ๋น„๋™๊ธฐ์‹์œผ๋กœ ์„œ๋ธ”๋ฆฟ์„ ์‹คํ–‰ํ•œ๋‹ค. ์„œ๋ธ”๋ฆฟ ํ”„๋กœ๊ทธ๋ž˜๋จธ๋Š” ๋“ค์–ด์˜ค๋Š” ๋ชจ๋“  ์›น ์š”์ฒญ์„ ๊ด€๋ฆฌํ•  ํ•„์š”๊ฐ€ ์—†๋‹ค.  ์›์น™ ์ ์œผ๋กœ ๊ฐ ์„œ๋ธ”๋ฆฟ ์Šค๋ ˆ๋“œ๋Š” ๋‹ค๋ฅธ ์„œ๋ธ”๋ฆฟ ์Šค๋ ˆ๋“œ์™€ ๋ฌด๊ด€ํ•˜๊ฒŒ ์ž์‹ ๋งŒ์˜ ์„ธ์ƒ์—์„œ ๋Œ์•„๊ฐ„๋‹ค.

 

- ๋ฏธ์‹ ๊ณผ ์˜คํ•ด

 

๋™์‹œ์„ฑ๊ณผ ๊ด€๋ จํ•œ ์ผ๋ฐ˜์ ์ธ ๋ฏธ์‹ ๊ณผ ์˜คํ•ด

 

 - ๋™์‹œ์„ฑ์€ ํ•ญ์ƒ ์„ฑ๋Šฅ์„ ๋†’์—ฌ์ค€๋‹ค.

๋™์‹œ์„ฑ์€ ๋•Œ๋กœ ์„ฑ๋Šฅ์„ ๋†’์—ฌ์ค€๋‹ค. ๋Œ€๊ธฐ ์‹œ๊ฐ„์ด ์•„์ฃผ ๊ธธ์–ด ์—ฌ๋Ÿฌ ์Šค๋ ˆ๋“œ๊ฐ€ ํ”„๋กœ์„ธ์„œ๋ฅผ ๊ณต์œ ํ•  ์ˆ˜ ์žˆ๊ฑฐ๋‚˜, ์—ฌ๋Ÿฌ ํ”„๋กœ์„ธ์„œ๊ฐ€ ๋™์‹œ์— ์ฒ˜๋ฆฌํ•  ๋…๋ฆฝ์ ์ธ ๊ณ„์‚ฐ์ด ์ถฉ๋ถ„ํžˆ ๋งŽ์€ ๊ฒฝ์šฐ์—๋งŒ ์„ฑ๋Šฅ์ด ๋†’์•„์ง„๋‹ค. ์–ด๋Š ์ชฝ๋„ ์ผ์ƒ์ ์œผ๋กœ ๋ฐœ์ƒํ•˜๋Š” ์ƒํ™ฉ์€ ์•„๋‹ˆ๋‹ค.

 - ๋™์‹œ์„ฑ์„ ๊ตฌํ˜„ํ•ด๋„ ์„ค๊ณ„๋Š” ๋ณ€ํ•˜์ง€ ์•Š๋Š”๋‹ค.

๋‹จ์ผ ์Šค๋ ˆ๋“œ ์‹œ์Šคํ…œ๊ณผ ๋‹ค์ค‘ ์Šค๋ ˆ๋“œ ์‹œ์Šคํ…œ์€ ์„ค๊ณ„๊ฐ€ ํŒ์ดํ•˜๊ฒŒ ๋‹ค๋ฅด๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ ๋ฌด์—‡๊ณผ ์–ธ์ œ๋ฅผ ๋ถ„๋ฆฌํ•˜๋ฉด ์‹œ์Šคํ…œ ๊ตฌ์กฐ๊ฐ€ ํฌ๊ฒŒ ๋‹ฌ๋ผ์ง„๋‹ค.

 - ์›น ๋˜๋Š” EJB ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋™์‹œ์„ฑ์„ ์ดํ•ดํ•  ํ•„์š”๊ฐ€ ์—†๋‹ค.

์‹ค์ œ๋กœ๋Š” ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์–ด๋–ป๊ฒŒ ๋™์ž‘ํ•˜๋Š”์ง€, ์–ด๋–ป๊ฒŒ ๋™์‹œ ์ˆ˜์ •, ๋ฐ๋“œ๋ฝ ๋“ฑ๊ณผ ๊ฐ™์€ ๋ฌธ์ œ๋ฅผ ํ”ผํ•  ์ˆ˜ ์žˆ๋Š”์ง€๋ฅผ ์•Œ์•„์•ผ๋งŒ ํ•œ๋‹ค.


๋™์‹œ์„ฑ๊ณผ ๊ด€๋ จํ•œ ํƒ€๋‹นํ•œ ์ƒ๊ฐ 

 

 - ๋™์‹œ์„ฑ์€ ๋‹ค์†Œ ๋ถ€ํ•˜๋ฅผ ์œ ๋ฐœํ•œ๋‹ค.

์„ฑ๋Šฅ ์ธก๋ฉด์—์„œ ๋ถ€ํ•˜๊ฐ€ ๊ฑธ๋ฆฌ๋ฉฐ, ์ฝ”๋“œ๋„ ๋” ์งœ์•ผํ•œ๋‹ค.

- ๋™์‹œ์„ฑ์€ ๋ณต์žกํ•˜๋‹ค.

๊ฐ„๋‹จํ•œ ๋ฌธ์ œ๋ผ๋„ ๋™์‹œ์„ฑ์€ ๋ณต์žกํ•˜๋‹ค.

- ์ผ๋ฐ˜์ ์œผ๋กœ ๋™์‹œ์„ฑ ๋ฒ„๊ทธ๋Š” ์žฌํ˜„ํ•˜๊ธฐ ์–ด๋ ต๋‹ค.

๋”ฐ๋ผ์„œ ์ง„์งœ ๊ฒฐํ•จ์œผ๋กœ ๊ฐ„์ฃผ๋˜์ง€ ์•Š๊ณ  ์ผํšŒ์„ฑ ๋ฌธ์ œ๋กœ ์—ฌ๊ฒจ ๋ฌด์‹œํ•˜๊ธฐ ์‰ฝ๋‹ค.

- ๋™์‹œ์„ฑ์„ ๊ตฌํ˜„ํ•˜๋ ค๋ฉด ํ”ํžˆ ๊ทผ๋ณธ์ ์ธ ์„ค๊ณ„ ์ „๋žต์„ ์žฌ๊ณ ํ•ด์•ผ ํ•œ๋‹ค.


.๋‚œ๊ด€

 

 ๋™์‹œ์„ฑ์„ ๊ตฌํ˜„ํ•˜๊ธฐ ์–ด๋ ค์šด ์ด์œ .

public class X {
    private int lastIdUsed;
    
    public int getNextId() {
    	return ++lastIdUsed;
    }	
}

์ธ์Šคํ„ด์Šค X ์ƒ์„ฑ ํ›„, lastIdUsed ํ•„๋“œ๋ฅผ 42๋กœ ์„ค์ •ํ•œ ๋‹ค์Œ, ๋‘ ์Šค๋ ˆ๋“œ๊ฐ€ ํ•ด๋‹น ์ธ์Šคํ„ด์Šค๋ฅผ ๊ณต์œ ํ•œ๋‹ค.

์ด์ œ ๋‘ ์Šค๋ ˆ๋“œ๊ฐ€ getNextId();๋ฅผ ํ˜ธ์ถœํ•œ๋‹ค๊ณ  ๊ฐ€์ •ํ•˜๋ฉด ๊ฒฐ๊ณผ๋Š” ์•„๋ž˜ ์…‹ ์ค‘ ํ•˜๋‚˜์ด๋‹ค.

 

  1. ํ•œ ์Šค๋ ˆ๋“œ๋Š” 43์„ ๋ฐ›๋Š”๋‹ค. ๋‹ค๋ฅธ ์Šค๋ ˆ๋“œ๋Š” 44๋ฅผ ๋ฐ›๋Š”๋‹ค. lastIdUsed๋Š” 44๊ฐ€ ๋œ๋‹ค.

  2. ํ•œ ์Šค๋ ˆ๋“œ๋Š” 44๋ฅผ ๋ฐ›๋Š”๋‹ค. ๋‹ค๋ฅธ ์Šค๋ ˆ๋“œ๋Š” 43์„ ๋ฐ›๋Š”๋‹ค. lastIdUsed๋Š” 44๊ฐ€ ๋œ๋‹ค.

  3. ํ•œ ์Šค๋ ˆ๋“œ๋Š” 43์„ ๋ฐ›๋Š”๋‹ค. ๋‹ค๋ฅธ ์Šค๋ ˆ๋“œ๋Š” 43๋ฅผ ๋ฐ›๋Š”๋‹ค. lastIdUsed๋Š” 43์ด ๋œ๋‹ค.

 

๋‘ ์Šค๋ ˆ๋“œ๊ฐ€ ๊ฐ™์€ ๋ณ€์ˆ˜๋ฅผ ๋™์‹œ์— ์ฐธ์กฐํ•˜๋ฉด ์„ธ ๋ฒˆ์งธ์™€ ๊ฐ™์€ ๊ฒฐ๊ณผ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค. ์ด๋Ÿฌํ•œ ์ž˜๋ชป๋œ ๊ฒฝ๋กœ๋ฅผ ๊ฐ€์ง€๊ฒŒ ๋˜๋Š” ๊ฒฝ์šฐ๋ฅผ ์•Œ๊ธฐ ์œ„ํ•ด์„œ๋Š” JIT ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ๋ฐ”์ดํŠธ ์ฝ”๋“œ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ์‹๊ณผ ์ž๋ฐ” ๋ฉ”๋ชจ๋ฆฌ ๋ชจ๋ธ์ด ์›์ž๋กœ ๊ฐ„์ฃผํ•˜๋Š” ์ตœ์†Œ ๋‹จ์œ„๋ฅผ ์•Œ์•„์•ผ ํ•œ๋‹ค.

 


 

.๋™์‹œ์„ฑ ๋ฐฉ์–ด ์›์น™

 

 

 - ๋‹จ์ผ ์ฑ…์ž„ ์›์น™(SRP)

 ๋™์‹œ ์„ฑ์€ ๋ณต์žก์„ฑ ํ•˜๋‚˜๋งŒ์œผ๋กœ๋„ ๋”ฐ๋กœ ๋ถ„๋ฆฌํ•  ์ด์œ ๊ฐ€ ์ถฉ๋ถ„ํ•˜๋‹ค. ์ฆ‰, ๋™์‹œ์„ฑ ๊ด€๋ จ ์ฝ”๋“œ๋Š” ๋‹ค๋ฅธ ์ฝ”๋“œ์™€ ๋ถ„๋ฆฌํ•ด์•ผ ํ•œ๋‹ค.

 

๋™์‹œ์„ฑ ๊ตฌํ˜„ ์‹œ ๊ณ ๋ ค์‚ฌํ•ญ

 1. ๋™์‹œ์„ฑ ์ฝ”๋“œ๋Š” ๋…์ž์ ์ธ ๊ฐœ๋ฐœ, ๋ณ€๊ฒฝ, ์กฐ์œจ ์ฃผ๊ธฐ๊ฐ€ ์žˆ๋‹ค.

 2. ๋™์‹œ์„ฑ ์ฝ”๋“œ์—๋Š” ๋…์ž์ ์ธ ๋‚œ๊ด€์ด ์žˆ๋‹ค. 

 3. ์ž˜๋ชป ๊ตฌํ˜„ํ•œ ๋™์‹œ์„ฑ ์ฝ”๋“œ๋Š” ๋ณ„์˜๋ณ„ ๋ฐฉ์‹์œผ๋กœ ์‹คํŒจํ•œ๋‹ค.

 


 - ๋”ฐ๋ฆ„ ์ •๋ฆฌ : ์ž๋ฃŒ ๋ฒ”์œ„๋ฅผ ์ œํ•œํ•˜๋ผ.

 

์ž๋ฃŒ๋ฅผ ์บก์Šํ™”ํ•˜๋ผ, ๊ณต์œ  ์ž๋ฃŒ๋ฅผ ์ตœ๋Œ€ํ•œ ์ค„์—ฌ๋ผ

 

 ๊ณต์œ  ๊ฐ์ฒด๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ฝ”๋“œ ๋‚ด ์ž„๊ณ„ ์˜์—ญ์„ synchronized ํ‚ค์›Œ๋“œ๋กœ ๋ณดํ˜ธํ•˜๋Š” ๊ฒƒ์„ ๊ถŒ์žฅํ•œ๋‹ค.

์ด๋Ÿฐ ์ž„๊ณ„ ์˜์—ญ ์ˆ˜๋ฅผ ์ค„์ด๋Š” ๊ธฐ์ˆ ์ด ์ค‘์š”ํ•˜๋‹ค. ๊ณต์œ  ์ž๋ฃŒ๋ฅผ ์ˆ˜์ •ํ•˜๋Š” ์œ„์น˜๊ฐ€ ๋งŽ์„์ˆ˜๋ก ๋‹ค์Œ ๊ฐ€๋Šฅ์„ฑ์ด ์ปค์ง„๋‹ค.

 1. ๋ณดํ˜ธํ•  ์ž„๊ณ„ ์˜์—ญ์„ ๋นผ๋จน๋Š”๋‹ค.

 2. ๋ชจ๋“  ์ž„๊ณ„์˜์—ญ์„ ์˜ฌ๋ฐ”๋กœ ๋ณดํ˜ธํ–ˆ๋Š”์ง€(DRY ์œ„๋ฐ˜) ํ™•์ธํ•˜๋Š๋ผ ๋˜‘๊ฐ™์€ ๋…ธ๋ ฅ๊ณผ ์ˆ˜๊ณ ๋ฅผ ๋ฐ˜๋ณตํ•œ๋‹ค.

 3. ์•ˆ ๊ทธ๋ž˜๋„ ์ฐพ์•„๋‚ด๊ธฐ ์–ด๋ ค์šด ๋ฒ„๊ทธ๊ฐ€ ๋”์šฑ ์ฐพ๊ธฐ ์–ด๋ ค์›Œ์ง„๋‹ค.

 


 - ๋”ฐ๋ฆ„ ์ •๋ฆฌ : ์ž๋ฃŒ ์‚ฌ๋ณธ์„ ์‚ฌ์šฉํ•˜๋ผ.

 

 ๊ณต์œ  ์ž๋ฃŒ๋ฅผ ์ค„์ด๊ธฐ ์œ„ํ•ด์„œ๋Š” ์ฒ˜์Œ๋ถ€ํ„ฐ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๋ฐฉ๋ฒ•์ด ์ œ์ผ ์ข‹๋‹ค. ์–ด๋–ค ๊ฒฝ์šฐ ๊ฐ์ฒด๋ฅผ ๋ณต์‚ฌํ•ด ์ฝ๊ธฐ ์ „์šฉ์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์ด ๊ฐ€๋Šฅํ•˜๋‹ค. ์–ด๋–ค ๊ฒฝ์šฐ์—๋Š” ๊ฐ ์Šค๋ ˆ๋“œ๊ฐ€ ๊ฐ์ฒด๋ฅผ ๋ณต์‚ฌํ•ด ์‚ฌ์šฉํ•œ ํ›„ ํ•œ ์Šค๋ ˆ๋“œ๊ฐ€ ํ•ด๋‹น ์‚ฌ๋ณธ์—์„œ ๊ฒฐ๊ณผ๋ฅผ ๊ฐ€์ ธ์˜ค๋Š” ๋ฐฉ๋ฒ•๋„ ๊ฐ€๋Šฅํ•˜๋‹ค.


 - ๋”ฐ๋ฆ„ ์ •๋ฆฌ : ์Šค๋ ˆ๋“œ๋Š” ๊ฐ€๋Šฅํ•œ ๋…๋ฆฝ์ ์œผ๋กœ ๊ตฌํ˜„ํ•˜๋ผ

 

๋…์ž์ ์ธ ์Šค๋ ˆ๋“œ๋กœ, ๊ฐ€๋Šฅํ•˜๋ฉด ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์„œ์—์„œ, ๋Œ๋ ค๋„ ๊ดœ์ฐฎ๋„๋ก ์ž๋ฃŒ๋ฅผ ๋…๋ฆฝ์ ์ธ ๋‹จ์œ„๋กœ ๋ถ„ํ• ํ•˜๋ผ.

 

 ๋‹ค๋ฅธ ์Šค๋ ˆ๋“œ์™€ ์ž๋ฃŒ๋ฅผ ๊ณต์œ ํ•˜์ง€ ์•Š๋Š” ์Šค๋ ˆ๋“œ๋ฅผ ๊ตฌํ˜„ํ•œ๋‹ค. ๊ฐ ์Šค๋ ˆ๋“œ๋Š” ํด๋ผ์ด์–ธํŠธ ์š”์ฒญ ํ•˜๋‚˜๋ฅผ ์ฒ˜๋ฆฌํ•œ๋‹ค. ๋ชจ๋“  ์ •๋ณด๋Š” ๋น„๊ณต์œ  ์ถœ์ฒ˜์—์„œ ๊ฐ€์ ธ์˜ค๋ฉฐ ๋กœ์ปฌ ๋ณ€์ˆ˜์— ์ €์žฅํ•œ๋‹ค. 


 

.๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ดํ•ดํ•˜๋ผ.

 

๊ฐ๊ฐ Java Version์— ๋งž๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ดํ•ดํ•œ๋‹ค.

ex. java.util.concurrent, java.util.concurrent.atomic, java.util.concurrent.locks

 


 

.์‹คํ–‰ ๋ชจ๋ธ์„ ์ดํ•ดํ•˜๋ผ.

 

 ๊ธฐ๋ณธ ์šฉ์–ด

ํ•œ์ •๋œ ์ž์› (Bound Resource) ๋‹ค์ค‘ ์Šค๋ ˆ๋“œ ํ™˜๊ฒฝ์—์„œ ์‚ฌ์šฉํ•˜๋Š” ์ž์›์œผ๋กœ, ํฌ๊ธฐ๋‚˜ ์ˆซ์ž๊ฐ€ ์ œํ•œ์ .
DB ์—ฐ๊ฒฐ, ๊ธธ์ด๊ฐ€ ์ผ์ •ํ•œ ์ฝ๊ธฐ/์“ฐ๊ธฐ ๋ฒ„ํผ ๋“ฑ
์ƒํ˜ธ ๋ฐฐ์ œ (Mutual Exclustion) ํ•œ ๋ฒˆ์— ํ•œ ์Šค๋ ˆ๋“œ๋งŒ ๊ณต์œ  ์ž๋ฃŒ๋‚˜ ๊ณต์œ  ์ž์›์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ
๊ธฐ์•„ (Starvation) ํ•œ ์Šค๋ ˆ๋“œ๋‚˜ ์—ฌ๋Ÿฌ ์Šค๋ ˆ๋“œ๊ฐ€ ๊ต‰์žฅํžˆ ์˜ค๋žซ๋™์•ˆ ํ˜น์€ ์˜์›ํ•œ ์ž์›์„ ๊ธฐ๋‹ค๋ฆฐ๋‹ค.
์˜ˆ๋กœ. ํ•ญ์ƒ ์งง์€ ์Šค๋ ˆ๋“œ์—๊ฒŒ ์šฐ์„ ์ˆœ์œ„๋ฅผ ์ค„ ๊ฒฝ์šฐ, ์งง์€ ์Šค๋ ˆ๋“œ๊ฐ€ ์ง€์†์ ์œผ๋กœ ์ด์–ด์ง€๋ฉด, ๊ธด ์Šค๋ ˆ๋“œ๊ฐ€ ๊ธฐ์•„ ์ƒํƒœ์— ๋น ์ง„๋‹ค.
๋ฐ๋“œ๋ฝ (Deadlock) ์—ฌ๋Ÿฌ ์Šค๋ ˆ๋“œ๊ฐ€ ์„œ๋กœ ๋๋‚˜๊ธฐ๋ฅผ ๊ธฐ๋‹ค๋ฆฐ๋‹ค. ๋ชจ๋“  ์Šค๋ ˆ๋“œ๊ฐ€ ๊ฐ๊ธฐ ํ•„์š”ํ•œ ์ž์›์„ ๋‹ค๋ฅธ ์Šค๋ ˆ๋“œ๊ฐ€ ์ ์œ ํ•˜๋Š” ๋ฐ”๋žŒ์— ์–ด๋Š ์ชฝ๋„ ๋” ์ด์ƒ ์ง„ํ–‰ํ•˜์ง€ ๋ชปํ•œ๋‹ค.
๋ผ์ด๋ธŒ๋ฝ (Livelock) ๋ฝ์„ ๊ฑฐ๋Š” ๋‹จ๊ณ„์—์„œ ๊ฐ ์Šค๋ ˆ๋“œ๊ฐ€ ์„œ๋กœ๋ฅผ ๋ฐฉํ•ดํ•œ๋‹ค. ์Šค๋ ˆ๋“œ๋Š” ๊ณ„์†ํ•ด์„œ ์ง„ํ–‰ํ•˜๋ ค ํ•˜์ง€๋งŒ, ๊ณต๋ช…(resonance)์œผ๋กœ ์ธํ•ด, ๊ต‰์žฅํžˆ ์˜ค๋žซ๋™์•ˆ ํ˜น์€ ์˜์›ํžˆ ์ง„ํ–‰ํ•˜์ง€ ๋ชปํ•œ๋‹ค.

 

๋‹ค์ค‘ ์Šค๋ ˆ๋“œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์—์„œ ์‚ฌ์šฉํ•˜๋Š” ์‹คํ–‰ ๋ชจ๋ธ

 

 - ์ƒ์‚ฐ์ž - ์†Œ๋น„์ž (Producer - Consumer)

 

ํ•˜๋‚˜ ์ด์ƒ ์ƒ์‚ฐ์ž ์Šค๋ ˆ๋“œ๊ฐ€ ์ •๋ณด๋ฅผ ์ƒ์„ฑํ•ด ๋ฒ„ํผ๋‚˜ ๋Œ€๊ธฐ์—ด(queue)์— ๋„ฃ๋Š”๋‹ค. 

ํ•˜๋‚˜ ์ด์ƒ ์†Œ๋น„์ž ์Šค๋ ˆ๋“œ๊ฐ€ ๋Œ€๊ธฐ์—ด์—์„œ ์ •๋ณด๋ฅผ ๊ฐ€์ ธ์™€ ์‚ฌ์šฉํ•œ๋‹ค.

์ƒ์‚ฐ์ž ์Šค๋ ˆ๋“œ์™€ ์†Œ๋น„์ž ์Šค๋ ˆ๋“œ๊ฐ€ ์‚ฌ์šฉํ•˜๋Š” ๋Œ€๊ธฐ์—ด์€ ํ•œ์ •๋œ ์ž์›์ด๋‹ค. 

์ƒ์‚ฐ์ž ์Šค๋ ˆ๋“œ๋Š” ๋Œ€๊ธฐ์—ด์— ๋นˆ ๊ณต๊ฐ„์ด ์žˆ์–ด์•ผ ์ •๋ณด๋ฅผ ์ฑ„์šด๋‹ค. ์ฆ‰, ๋นˆ ๊ณต๊ฐ„์ด ์ƒ๊ธธ ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ฆฐ๋‹ค.

์†Œ๋น„์ž ์Šค๋ ˆ๋“œ๋Š” ๋Œ€๊ธฐ์—ด์— ์ •๋ณด๊ฐ€ ์žˆ์–ด์•ผ ๊ฐ€์ ธ์˜จ๋‹ค. ์ฆ‰, ์ •๋ณด๊ฐ€ ์ฑ„์›Œ์งˆ ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ฆฐ๋‹ค.

๋Œ€๊ธฐ์—ด์„ ์˜ฌ๋ฐ”๋กœ ์‚ฌ์šฉํ•˜๊ณ ์ž ์ƒ์‚ฐ์ž ์Šค๋ ˆ๋“œ์™€ ์†Œ๋น„์ž ์Šค๋ ˆ๋“œ๋Š” ์„œ๋กœ์—๊ฒŒ ์‹œ๊ทธ๋„์„ ๋ณด๋‚ธ๋‹ค. 

์ƒ์‚ฐ์ž ์Šค๋ ˆ๋“œ๋Š” ๋Œ€๊ธฐ์—ด์— ์ •๋ณด๋ฅผ ์ฑ„์šด ๋‹ค์Œ ์†Œ๋น„์ž ์Šค๋ ˆ๋“œ์— "๋Œ€๊ธฐ์—ด์— ์ •๋ณด๊ฐ€ ์žˆ๋‹ค"๋Š” ์‹œ๊ทธ๋„์„ ๋ณด๋‚ธ๋‹ค.

์†Œ๋น„์ž ์Šค๋ ˆ๋“œ๋Š” ๋Œ€๊ธฐ์—ด์—์„œ ์ •๋ณด๋ฅผ ์ฝ์–ด ๋“ค์ธ ํ›„ "๋Œ€๊ธฐ์—ด์— ๋นˆ ๊ณต๊ฐ„์ด ์žˆ๋‹ค"๋Š” ์‹œ๊ทธ๋„์„ ๋ณด๋‚ธ๋‹ค.

๋”ฐ๋ผ์„œ ์ž˜๋ชปํ•˜๋ฉด ์ƒ์‚ฐ์ž ์Šค๋ ˆ๋“œ์™€ ์†Œ๋น„์ž ์Šค๋ ˆ๋“œ๊ฐ€ ๋‘˜ ๋‹ค ์ง„ํ–‰ ๊ฐ€๋Šฅํ•จ์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ  ๋™์‹œ์— ์„œ๋กœ์—๊ฒŒ์„œ ์‹œ๊ทธ๋„์„ ๊ธฐ๋‹ค๋ฆด ๊ฐ€๋Šฅ์„ฑ์ด ์กด์žฌํ•œ๋‹ค.

 

 - ์ฝ๊ธฐ-์“ฐ๊ธฐ (Readers-Writers)

 

 ์ฝ๊ธฐ ์Šค๋ ˆ๋“œ๋ฅผ ์œ„ํ•œ ์ฃผ๋œ ์ •๋ณด์›์œผ๋กœ ๊ณต์œ ์ž์›์„ ์‚ฌ์šฉํ•˜์ง€๋งŒ, ์“ฐ๊ธฐ ์Šค๋ ˆ๋“œ๊ฐ€ ์ด ๊ณต์œ  ์ž์›์„ ์ด๋”ฐ๊ธˆ ๊ฐฑ์‹ ํ•œ ๋‹คํ•˜์ž. ์ด๋Ÿฐ ๊ฒฝ์šฐ ์ฒ˜๋ฆฌ์œจ(throughput)์ด ํ•ต์‹ฌ์ด๋‹ค. ์ฒ˜๋ฆฌ์œจ์„ ๊ฐ•์กฐํ•˜๋ฉด ๊ธฐ์•„ ํ˜„์ƒ์ด ์ƒ๊ธฐ๊ฑฐ๋‚˜ ์˜ค๋ž˜๋œ ์ •๋ณด๊ฐ€ ์Œ“์ธ๋‹ค. ๊ฐฑ์‹ ์„ ํ—ˆ์šฉํ•˜๋ฉด  ์ฒ˜๋ฆฌ์œจ์— ์˜ํ–ฅ์„ ๋ฏธ์นœ๋‹ค. ๋ฒ„ํผ๋ฅผ ๊ฐฑ์‹ ํ•˜๋Š” ๋™์•ˆ ์ฝ์ง€ ์•Š๊ณ , ๋ฒ„ํผ๋ฅผ ์ฝ๋Š” ๋™์•ˆ ๊ฐฑ์‹ ํ•˜์ง€ ์•Š๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋ณต์žกํ•œ ๊ท ํ˜• ์žก๊ธฐ๊ฐ€ ํ•„์š”ํ•˜๋‹ค. ๋Œ€๊ฐœ๋Š” ์“ฐ๊ธฐ ์Šค๋ ˆ๋“œ๊ฐ€ ๋ฒ„ํผ๋ฅผ ์˜ค๋žซ๋™์•ˆ ์ ์œ ํ•˜๋Š” ๋ฐ”๋žŒ์— ์—ฌ๋Ÿฌ ์ฝ๊ธฐ ์Šค๋ ˆ๋“œ๊ฐ€ ๋ฒ„ํผ๋ฅผ ๊ธฐ๋‹ค๋ฆฌ๋Š๋ผ ์ฒ˜๋ฆฌ์œจ์ด ๋–จ์–ด์ง„๋‹ค.

 ๋”ฐ๋ผ์„œ ์ฝ๊ธฐ ์Šค๋ ˆ๋“œ์˜ ์š”๊ตฌ์™€ ์“ฐ๊ธฐ ์Šค๋ ˆ๋“œ์˜ ์š”๊ตฌ๋ฅผ ์ ์ ˆํžˆ ๋งŒ์กฑ์‹œ์ผœ ์ฒ˜๋ฆฌ์œจ๋„ ์ ๋‹นํžˆ ๋†’์ด๊ณ  ๊ธฐ์•„๋„ ๋ฐฉ์ง€ํ•˜๋Š” ํ•ด๋ฒ•์ด ํ•„์š”ํ•˜๋‹ค.

 

  ๋™๊ธฐํ™”ํ•˜๋Š” ๋ฉ”์„œ๋“œ ์‚ฌ์ด์— ์กด์žฌํ•˜๋Š” ์˜์กด์„ฑ์„ ์ดํ•ดํ•˜๋ผ

 

๊ณต์œ  ๊ฐ์ฒด ํ•˜๋‚˜์—๋Š” ๋ฉ”์„œ๋“œ ํ•˜๋‚˜๋งŒ ์‚ฌ์šฉํ•˜๋ผ

 

 ๋™๊ธฐํ™”ํ•˜๋Š” ๋ฉ”์„œ๋“œ ์‚ฌ์ด์— ์˜์กด์„ฑ์ด ์กด์žฌํ•˜๋ฉด ๋™์‹œ์„ฑ ์ฝ”๋“œ์— ์ฐพ์•„๋‚ด๊ธฐ ์–ด๋ ค์šด ๋ฒ„๊ทธ๊ฐ€ ์ƒ๊ธด๋‹ค.

์ž๋ฐ” ์–ธ์–ด๋Š” ๊ฐœ๋ณ„ ๋ฉ”์„œ๋“œ๋ฅผ ๋ณดํ˜ธํ•˜๋Š” synchronized๋ผ๋Š” ๊ฐœ๋…์„ ์ง€์›ํ•œ๋‹ค. ํ•˜์ง€๋งŒ ๊ณต์œ  ํด๋ž˜์Šค ํ•˜๋‚˜์— ๋™๊ธฐํ™”๋œ ๋ฉ”์„œ๋“œ๊ฐ€ ์—ฌ๋Ÿฟ์ด๋ผ๋ฉด ๊ตฌํ˜„์ด ์˜ฌ๋ฐ”๋ฅธ์ง€ ๋‹ค์‹œ ํ•œ๋ฒˆ ํ™•์ธํ•˜๊ธฐ ๋ฐ”๋ž€๋‹ค.

 

๊ณต์œ  ๊ฐ์ฒด ํ•˜๋‚˜์— ์—ฌ๋Ÿฌ ๋ฉ”์„œ๋“œ๊ฐ€ ํ•„์š”ํ•œ ๊ฒฝ์šฐ ๊ณ ๋ คํ•  ์‚ฌํ•ญ

 

 1. ํด๋ผ์ด์–ธํŠธ์—์„œ ์ž ๊ธˆ

  ํด๋ผ์ด์–ธํŠธ์—์„œ ์ฒซ ๋ฒˆ ์งธ ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜๊ธฐ ์ „์— ์„œ๋ฒ„๋ฅผ ์ž ๊ทผ๋‹ค. ๋งˆ์ง€๋ง‰ ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•  ๋•Œ๊นŒ์ง€ ์ž ๊ธˆ์„ ์œ ์ง€ํ•œ๋‹ค.

 2. ์„œ๋ฒ„์—์„œ ์ž ๊ธˆ 

  ์„œ๋ฒ„์—๋‹ค '์„œ๋ฒ„๋ฅผ ์ž ๊ทธ๊ณ  ๋ชจ๋“  ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•œ ํ›„ ์ž ๊ธˆ์„ ํ•ด์ œ'ํ•˜๋Š” ๋ฉ”์„œ๋“œ๋ฅผ ๊ตฌํ˜„ํ•œ๋‹ค. ํด๋ผ์ด์–ธํŠธ๋Š” ์ด ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•œ๋‹ค.

 3. ์—ฐ๊ฒฐ(Adapted) ์„œ๋ฒ„

  ์ž ๊ธˆ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ์ค‘๊ฐ„ ๋‹จ๊ณ„๋ฅผ ์ƒ์„ฑํ•œ๋‹ค. '์„œ๋ฒ„์—์„œ ์ž ๊ธˆ' ๋ฐฉ์‹๊ณผ ์œ ์‚ฌํ•˜์ง€๋งŒ ์›๋ž˜ ์„œ๋ฒ„๋Š” ๋ณ€๊ฒฝํ•˜์ง€ ์•Š๋Š”๋‹ค.


 

.๋™๊ธฐํ™”ํ•˜๋Š” ๋ถ€๋ถ„์„ ์ž‘๊ฒŒ ๋งŒ๋“ค์–ด๋ผ

 

๋™๊ธฐํ™”ํ•˜๋Š” ๋ถ€๋ถ„์„ ์ตœ๋Œ€ํ•œ ์ž‘๊ฒŒ ๋งŒ๋“ค์–ด๋ผ.

 

 ์ž๋ฐ”์—์„œ synchronized ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋ฝ์„ ์„ค์ •ํ•œ๋‹ค. ๊ฐ™์€ ๋ฝ์œผ๋กœ ๊ฐ์‹ผ ๋ชจ๋“  ์ฝ”๋“œ ์˜์—ญ์€ ํ•œ ๋ฒˆ์— ํ•œ ์Šค๋ ˆ๋“œ๋งŒ ์‹คํ–‰์ด ๊ฐ€๋Šฅํ•˜๋‹ค. ๋ฝ์€ ์Šค๋ ˆ๋“œ๋ฅผ ์ง€์—ฐ์‹œํ‚ค๊ณ  ๋ถ€ํ•˜๋ฅผ ๊ฐ€์ค‘์‹œํ‚จ๋‹ค. ๊ทธ๋Ÿฌ๋ฏ€๋กœ ์—ฌ๊ธฐ์ €๊ธฐ์„œ synchronized ๋ฌธ์„ ๋‚จ๋ฐœํ•˜๋Š” ์ฝ”๋“œ๋Š” ๋ฐ”๋žŒ์งํ•˜์ง€ ์•Š๋‹ค. ๋ฐ˜๋ฉด ์ž„๊ณ„ ์˜์—ญ์€ ๋ฐ˜๋“œ์‹œ ๋ณดํ˜ธํ•ด์•ผ ํ•œ๋‹ค. ๋”ฐ๋ผ์„œ ์ฝ”๋“œ๋ฅผ ์งค ๋•Œ๋Š” ์ž„๊ณ„ ์˜์—ญ ์ˆ˜๋ฅผ ์ตœ๋Œ€ํ•œ ์ค„์—ฌ์•ผ ํ•œ๋‹ค.

 ์ž„๊ณ„์˜์—ญ ์ˆ˜๋ฅผ ์ค„์ธ๋‹ค๊ณ  ๊ฑฐ๋Œ€ํ•œ ์ž„๊ณ„ ์˜์—ญ ํ•˜๋‚˜๋กœ ๊ตฌํ˜„ํ•  ๊ฒฝ์šฐ, ํ•„์š” ์ด์ƒ์œผ๋กœ ์ปค์ง„ ์ž„๊ณ„ ์˜์—ญ์€ ์Šค๋ ˆ๋“œ ๊ฐ„ ๊ฒฝ์Ÿ์ด ๋Š˜์–ด๋‚˜๊ณ  ํ”„๋กœ๊ทธ๋žจ ์„ฑ๋Šฅ์ด ๋–จ์–ด์ง„๋‹ค.


 

.์˜ฌ๋ฐ”๋ฅธ ์ข…๋ฃŒ ์ฝ”๋“œ๋Š” ๊ตฌํ˜„ํ•˜๊ธฐ ์–ด๋ ต๋‹ค.

 

์ข…๋ฃŒ ์ฝ”๋“œ๋ฅผ ๊ฐœ๋ฐœ ์ดˆ๊ธฐ๋ถ€ํ„ฐ ๊ณ ๋ฏผํ•˜๊ณ  ๋™์ž‘ํ•˜๊ฒŒ ์ดˆ๊ธฐ๋ถ€ํ„ฐ ๊ตฌํ˜„ํ•˜๋ผ. ์ƒ๊ฐ๋ณด๋‹ค ์˜ค๋ž˜ ๊ฑธ๋ฆฐ๋‹ค. ์ƒ๊ฐ๋ณด๋‹ค ์–ด๋ ค์šฐ๋ฏ€๋กœ ์ด๋ฏธ ๋‚˜์˜จ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ๊ฒ€ํ† ํ•˜๋ผ.

 

 ์˜๊ตฌ์ ์œผ๋กœ ๋Œ์•„๊ฐ€๋Š” ์‹œ์Šคํ…œ์„ ๊ตฌํ˜„ํ•˜๋Š” ๋ฐฉ๋ฒ•๊ณผ ์ž ์‹œ ๋Œ๋‹ค ๊น”๋”ํ•˜๊ฒŒ ์ข…๋ฃŒํ•˜๋Š” ์‹œ์Šคํ…œ์„ ๊ตฌํ˜„ํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ๋‹ค๋ฅด๋‹ค.

๊น”๋”ํ•˜๊ฒŒ ์ข…๋ฃŒํ•˜๋Š” ์ฝ”๋“œ๋Š” ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ๊ตฌํ˜„ํ•˜๊ธฐ ์–ด๋ ต๋‹ค. ๊ฐ€์žฅ ํ”ํžˆ ๋ฐœ์ƒํ•˜๋Š” ๋ฌธ์ œ๊ฐ€ ๋ฐ๋“œ๋ฝ์ด๋‹ค. ์ฆ‰, ์Šค๋ ˆ๋“œ๊ฐ€ ์ ˆ๋Œ€ ์˜ค์ง€ ์•Š์„ ์‹œ๊ทธ๋„์„ ๊ธฐ๋‹ค๋ฆฐ๋‹ค. 


 

.์Šค๋ ˆ๋“œ ์ฝ”๋“œ ํ…Œ์ŠคํŠธํ•˜๊ธฐ

 

 ๋ฌธ์ œ๋ฅผ ๋…ธ์ถœํ•˜๋Š” ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๋ฅผ ์ž‘์„ฑํ•˜๋ผ. ํ”„๋กœ๊ทธ๋žจ ์„ค์ •๊ณผ ์‹œ์Šคํ…œ ์„ค์ •๊ณผ ๋ถ€ํ•˜๋ฅผ ๋ฐ”๊ฟ”๊ฐ€๋ฉฐ ์ž์ฃผ ๋Œ๋ ค๋ผ. ํ…Œ์ŠคํŠธ๊ฐ€ ์‹คํŒจํ•˜๋ฉด ์›์ธ์„ ์ถ”์ ํ•˜๋ผ. ๋‹ค์‹œ ๋Œ๋ ธ๋”๋‹ˆ ํ†ต๊ณผํ•˜๋”๋ผ๋Š” ์ด์œ ๋กœ ๊ทธ๋ƒฅ ๋„˜์–ด๊ฐ€๋ฉด ์ ˆ๋Œ€๋กœ ์•ˆ๋œ๋‹ค.

 


 - ๋ง์ด ์•ˆ ๋˜๋Š” ์‹คํŒจ๋Š” ์ž ์ •์ ์ธ ์Šค๋ ˆ๋“œ ๋ฌธ์ œ๋กœ ์ทจ๊ธ‰ํ•˜๋ผ

 

์‹œ์Šคํ…œ ์‹คํŒจ๋ฅผ '์ผํšŒ์„ฑ'์ด๋ผ ์น˜๋ถ€ํ•˜์ง€ ๋งˆ๋ผ.

 

๋‹ค์ค‘ ์Šค๋ ˆ๋“œ ์ฝ”๋“œ๋Š” ๋•Œ๋•Œ๋กœ '๋ง์ด ์•ˆ ๋˜๋Š”' ์˜ค๋ฅ˜๋ฅผ ์ผ์œผํ‚จ๋‹ค. ๊ทธ๋ž˜์„œ ๋งŽ์€ ๊ฐœ๋ฐœ์ž๊ฐ€ ๋‹จ์ˆœํ•œ '์ผํšŒ์„ฑ' ๋ฌธ์ œ๋กœ ์น˜๋ถ€ํ•˜๊ณ  ๋ฌด์‹œํ•œ๋‹ค. '์ผํšŒ์„ฑ' ๋ฌธ์ œ๋ฅผ ๊ณ„์† ๋ฌด์‹œํ•œ๋‹ค๋ฉด ์ž˜๋ชป๋œ ์ฝ”๋“œ ์œ„์— ์ฝ”๋“œ๊ฐ€ ๊ณ„์† ์Œ“์ธ๋‹ค.

 


 

 - ๋‹ค์ค‘ ์Šค๋ ˆ๋“œ๋ฅผ ๊ณ ๋ คํ•˜์ง€ ์•Š์€ ์ˆœ์ฐจ ์ฝ”๋“œ๋ถ€ํ„ฐ ์ œ๋Œ€๋กœ ๋Œ๊ฒŒ ๋งŒ๋“ค์ž.

 

์Šค๋ ˆ๋“œ ํ™˜๊ฒฝ ๋ฐ–์—์„œ ์ƒ๊ธฐ๋Š” ๋ฒ„๊ทธ์™€ ์Šค๋ ˆ๋“œ ํ™˜๊ฒฝ์—์„œ ์ƒ๊ธฐ๋Š” ๋ฒ„๊ทธ๋ฅผ ๋™์‹œ์— ๋””๋ฒ„๊น…ํ•˜์ง€ ๋งˆ๋ผ. ๋จผ์ € ์Šค๋ ˆ๋“œ ํ™˜๊ฒฝ ๋ฐ–์—์„œ ์ฝ”๋“œ๋ฅผ ์˜ฌ๋ฐ”๋กœ ๋Œ๋ ค๋ผ.

์Šค๋ ˆ๋“œ ํ™˜๊ฒฝ ๋ฐ–์—์„œ ์ฝ”๋“œ๊ฐ€ ์ œ๋Œ€๋กœ ๋„๋Š”์ง€ ๋ฐ˜๋“œ์‹œ ํ™•์ธํ•œ๋‹ค. ์ผ๋ฐ˜์ ์ธ ๋ฐฉ๋ฒ•์œผ๋กœ, ์Šค๋ ˆ๋“œ๊ฐ€ ํ˜ธ์ถœํ•˜๋Š” POJO๋ฅผ ๋งŒ๋“ ๋‹ค. POJO๋Š” ์Šค๋ ˆ๋“œ๋ฅผ ๋ชจ๋ฅธ๋‹ค. ๋”ฐ๋ผ์„œ ์Šค๋ ˆ๋“œ ํ™˜๊ฒฝ ๋ฐ–์—์„œ ํ…Œ์ŠคํŠธ๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค. POJO์— ๋„ฃ๋Š” ์ฝ”๋“œ๋Š” ๋งŽ์„์ˆ˜๋ก ์ข‹๋‹ค.


 

 - ๋‹ค์ค‘ ์Šค๋ ˆ๋“œ๋ฅผ ์“ฐ๋Š” ์ฝ”๋“œ ๋ถ€๋ถ„์„ ๋‹ค์–‘ํ•œ ํ™˜๊ฒฝ์— ์‰ฝ๊ฒŒ ๋ผ์›Œ ๋„ฃ์„ ์ˆ˜ ์žˆ๋„๋ก ์Šค๋ ˆ๋“œ ์ฝ”๋“œ๋ฅผ ๊ตฌํ˜„ํ•˜๋ผ.

 

๋‹ค์–‘ํ•œ ์„ค์ •์—์„œ ์‹คํ–‰ํ•  ๋ชฉ์ ์œผ๋กœ ๋‹ค๋ฅธ ํ™˜๊ฒฝ์— ์‰ฝ๊ฒŒ ๋ผ์›Œ ๋„ฃ์„ ์ˆ˜ ์žˆ๊ฒŒ ์ฝ”๋“œ๋ฅผ ๊ตฌํ˜„ํ•˜๋ผ.

 

 1. ํ•œ ์Šค๋ ˆ๋“œ๋กœ ์‹คํ–‰ํ•˜๊ฑฐ๋‚˜, ์—ฌ๋Ÿฌ ์Šค๋ ˆ๋“œ๋กœ ์‹คํ–‰ํ•˜๊ฑฐ๋‚˜, ์‹คํ–‰ ์ค‘ ์Šค๋ ˆ๋“œ ์ˆ˜๋ฅผ ๋ฐ”๊ฟ”๋ณธ๋‹ค.

 2. ์Šค๋ ˆ๋“œ ์ฝ”๋“œ๋ฅผ ์‹ค์ œ ํ™˜๊ฒฝ์ด๋‚˜ ํ…Œ์ŠคํŠธ ํ™˜๊ฒฝ์—์„œ ๋Œ๋ ค๋ณธ๋‹ค.

 3. ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋ฅผ ๋นจ๋ฆฌ, ์ฒœ์ฒœํžˆ, ๋‹ค์–‘ํ•œ ์†๋„๋กœ ๋Œ๋ ค๋ณธ๋‹ค.

 4. ๋ฐ˜๋ณต ํ…Œ์ŠคํŠธ๊ฐ€ ๊ฐ€๋Šฅํ•˜๋„๋ก ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๋ฅผ ์ž‘์„ฑํ•œ๋‹ค.


 - ๋‹ค์ค‘ ์Šค๋ ˆ๋“œ๋ฅผ ์“ฐ๋Š” ์ฝ”๋“œ ๋ถ€๋ถ„์„ ์ƒํ™ฉ์— ๋งž์ถฐ ์กฐ์ •ํ•  ์ˆ˜ ์žˆ๊ฒŒ ์ž‘์„ฑํ•˜๋ผ.

 

์ ์ ˆํ•œ ์Šค๋ ˆ๋“œ ๊ฐœ์ˆ˜๋ฅผ ํŒŒ์•…ํ•˜๋ ค๋ฉด ์ƒ๋‹นํ•œ ์‹œํ–‰์ฐฉ์˜ค๊ฐ€ ํ•„์š”ํ•˜๋‹ค.

์ฒ˜์Œ๋ถ€ํ„ฐ ๋‹ค์–‘ํ•œ ์„ค์ •์œผ๋กœ ํ”„๋กœ๊ทธ๋žจ์˜ ์„ฑ๋Šฅ ์ธก์ •๋ฐฉ๋ฒ•์„ ๊ฐ•๊ตฌํ•œ๋‹ค.

์Šค๋ ˆ๋“œ ๊ฐœ์ˆ˜๋ฅผ ์กฐ์œจํ•˜๊ธฐ ์‰ฝ๊ฒŒ ์ฝ”๋“œ๋ฅผ ๊ตฌํ˜„ํ•œ๋‹ค.

ํ”„๋กœ๊ทธ๋žจ์ด ๋Œ์•„๊ฐ€๋Š” ๋„์ค‘์— ์Šค๋ ˆ๋“œ ๊ฐœ์ˆ˜๋ฅผ ๋ณ€๊ฒฝํ•˜๋Š” ๋ฐฉ๋ฒ•๋„ ๊ณ ๋ คํ•œ๋‹ค.

ํ”„๋กœ๊ทธ๋žจ ์ฒ˜๋ฆฌ์œจ๊ณผ ํšจ์œจ์— ๋”ฐ๋ผ ์Šค์Šค๋กœ ์Šค๋ ˆ๋“œ ๊ฐœ์ˆ˜๋ฅผ ์กฐ์œจํ•˜๋Š” ์ฝ”๋“œ๋„ ๊ณ ๋ฏผํ•œ๋‹ค.

 


 - ํ”„๋กœ์„ธ์„œ ์ˆ˜๋ณด๋‹ค ๋งŽ์€ ์Šค๋ ˆ๋“œ๋ฅผ ๋Œ๋ ค๋ณด๋ผ.

 

 ์‹œ์Šคํ…œ์ด ์Šค๋ ˆ๋“œ๋ฅผ ์Šค์™€ํ•‘(swapping)ํ•  ๋•Œ๋„ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค. ์Šค์™€ํ•‘์„ ์ผ์œผํ‚ค๋ ค๋ฉด ํ”„๋กœ์„ธ์„œ ์ˆ˜๋ณด๋‹ค ๋งŽ์€ ์Šค๋ ˆ๋“œ๋ฅผ ๋Œ๋ฆฐ๋‹ค. ์Šค์™€ํ•‘์ด ์žฆ์„์ˆ˜๋ก ์ž„๊ณ„ ์˜์—ญ์„ ๋นผ๋จน์€ ์ฝ”๋“œ๋‚˜ ๋ฐ๋“œ๋ฝ์„ ์ผ์œผํ‚ค๋Š” ์ฝ”๋“œ๋ฅผ ์ฐพ๊ธฐ ์‰ฌ์›Œ์ง„๋‹ค.


 - ๋‹ค๋ฅธ ํ”Œ๋žซํผ์—์„œ ๋Œ๋ ค๋ณด๋ผ.

 

์ฒ˜์Œ๋ถ€ํ„ฐ ๊ทธ๋ฆฌ๊ณ  ์ž์ฃผ ๋ชจ๋“  ๋ชฉํ‘œ ํ”Œ๋žซํผ์—์„œ ์ฝ”๋“œ๋ฅผ ๋Œ๋ ค๋ผ.

 

 ๋‹ค์ค‘ ์Šค๋ ˆ๋“œ ์ฝ”๋“œ๋Š” ํ”Œ๋žซํผ์— ๋”ฐ๋ผ ๋‹ค๋ฅด๊ฒŒ ๋Œ์•„๊ฐ„๋‹ค. ๋”ฐ๋ผ์„œ ์ฝ”๋“œ๊ฐ€ ๋Œ์•„๊ฐˆ ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ๋Š” ํ”Œ๋žซํผ์— ์ „๋ถ€์—์„œ ํ…Œ์ŠคํŠธ๋ฅผ ์ˆ˜ํ–‰ํ•ด์•ผ ๋งˆ๋•…ํ•˜๋‹ค.


 - ์ฝ”๋“œ์— ๋ณด์กฐ ์ฝ”๋“œ(instrument)๋ฅผ ๋„ฃ์–ด ๋Œ๋ ค๋ผ. ๊ฐ•์ œ๋กœ ์‹คํŒจ๋ฅผ ์ผ์œผํ‚ค๊ฒŒ ํ•ด ๋ณด๋ผ.

 

ํ”๋“ค๊ธฐ ๊ธฐ๋ฒ•์„ ์‚ฌ์šฉํ•ด ์˜ค๋ฅ˜๋ฅผ ์ฐพ์•„๋‚ด๋ผ.

 

 ์Šค๋ ˆ๋“œ ์ฝ”๋“œ๋Š” ์˜ค๋ฅ˜๋ฅผ ์ฐพ๊ธฐ ์‰ฝ์ง€ ์•Š๋‹ค. ์žฌํ˜„ ์—ญ์‹œ ์‰ฝ์ง€ ์•Š๋‹ค.  ์ฝ”๋“œ๊ฐ€ ์‹คํ–‰๋˜๋Š” ์ˆ˜์ฒœ ๊ฐ€์ง€ ๊ฒฝ๋กœ ์ค‘ ์•„์ฃผ ์†Œ์ˆ˜๋งŒ ์‹คํŒจํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

 ์ด๋ ‡๋“ฏ ๋“œ๋ฌผ๊ฒŒ ๋ฐœ์ƒํ•˜๋Š” ์˜ค๋ฅ˜๋ฅผ ์ข€ ๋” ์ž์ฃผ ์ผ์œผํ‚ฌ ๋ฐฉ์•ˆ์œผ๋กœ๋ณด์กฐ ์ฝ”๋“œ๋ฅผ ์ถ”๊ฐ€ํ•ด ์ฝ”๋“œ๊ฐ€ ์‹คํ–‰๋˜๋Š” ์ˆœ์„œ๋ฅผ ๋ฐ”๊ฟ”์ค€๋‹ค.

์˜ˆ๋กœ Object.wait(), Object.sleep ๋“ฑ๊ณผ ๊ฐ™์€ ๋ฉ”์„œ๋“œ๋ฅผ ์ถ”๊ฐ€ํ•ด ์ฝ”๋“œ๋ฅผ ๋‹ค์–‘ํ•œ ์ˆœ์„œ๋กœ ์‹คํ–‰ํ•œ๋‹ค.

๊ฐ ๋ฉ”์„œ๋“œ๋Š” ์Šค๋ ˆ๋“œ๊ฐ€ ์‹คํ–‰๋˜๋Š” ์ˆœ์„œ์— ์˜ํ–ฅ์„ ๋ฏธ์นœ๋‹ค. ๋”ฐ๋ผ์„œ ๋ฒ„๊ทธ๊ฐ€ ๋“œ๋Ÿฌ๋‚  ๊ฐ€๋Šฅ์„ฑ๋„ ๋†’์•„์ง„๋‹ค. ์ž˜๋ชป๋œ ์ฝ”๋“œ๋ผ๋ฉด ๊ฐ€๋Šฅํ•œ ์ดˆ๋ฐ˜์— ๊ทธ๋ฆฌ๊ณ  ๊ฐ€๋Šฅํ•œ ์ž์ฃผ ์‹คํŒจํ•˜๋Š” ํŽธ์ด ์ข‹๋‹ค.

 

 ์ฝ”๋“œ์— ๋ณด์กฐ ์ฝ”๋“œ๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ๋ฐฉ๋ฒ• ๋‘ ๊ฐ€์ง€

 

 - ์ง์ ‘ ๊ตฌํ˜„ํ•˜๊ธฐ

 ์ฝ”๋“œ ์ค‘๊ฐ„์ค‘๊ฐ„ wait(), yield() ์‚ฝ์ž…

 - ์ž๋™ํ™”

 AOF(Aspect-Oriented Framework), CGLIB, ASM ๋“ฑ ๋„๊ตฌ ์‚ฌ์šฉํ•˜์—ฌ ์ฝ”๋“œ ์ค‘๊ฐ„์ค‘๊ฐ„ sleep, yield ์™€๊ฐ™์€ ํšจ๊ณผ๋ฅผ ์ผ์œผํ‚ค๋Š” ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฝ์ž…ํ•œ๋‹ค. ์˜ˆ๋กœ ThreadJigglePoint.jiggle() ์‚ฝ์ž… ํ›„ ํ˜ธ์ถœํ•  ๊ฒฝ์šฐ sleep, yield, nop(์•„๋ฌด ๋™์ž‘)๋ฅผ ๋ฌด์ž‘์œ„๋กœ ํ˜ธ์ถœํ•œ๋‹ค.

 

 


.๊ฒฐ๋ก 

 

 ๋‹ค์ค‘ ์Šค๋ ˆ๋“œ ์ฝ”๋“œ๋Š” ์˜ฌ๋ฐ”๋กœ ๊ตฌํ˜„ํ•˜๊ธฐ ์–ด๋ ต๋‹ค. 

์•ž์„œ ์–˜๊ธฐํ•œ ๋‚ด์šฉ ๋ชจ๋‘๋ฅผ ์ƒ๊ฐํ•˜๋ฉฐ ๊ตฌํ˜„ํ•ด์•ผ ํ•œ๋‹ค.

 


๐Ÿ“ ๋Š๋‚€์ .

 - ์Šค๋ ˆ๋“œ ๊ตฌํ˜„์— ๋Œ€ํ•ด ๊นŠ๊ฒŒ ์ƒ๊ฐํ•œ ๋ฐ”๊ฐ€ ์—†์—ˆ๋Š”๋ฐ ๊ตฌํ˜„ ์‹œ ๊ณ ๋ ค์‚ฌํ•ญ๊ณผ ํŒ ๊ฐ™์€ ๊ฒƒ๋“ค์ด ์ฃผ์–ด์ ธ์„œ ์ข‹์€ ๋‚ด์šฉ์ด์—ˆ๋‹ค.