๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

๋นˆ ๊ตฌ๋ฉ ์ฑ„์šฐ๊ธฐ

[OOP] ๊ฐ์ฒด์˜ ๋ถˆ๋ณ€์„ฑ๊ณผ ์Šค๋ ˆ๋“œ ์•ˆ์ •์„ฑ

์ถœ์ฒ˜

ChatGPT


 

๊ฐ์ฒด์˜ ๋ถˆ๋ณ€์„ฑ์ด ์ด๋Š” ์Šค๋ ˆ๋“œ ์•ˆ์ •์„ฑ๊ณผ ๊ด€๋ จ๋œ ๋ฌธ์ œ๋ฅผ ์ค„์ผ ์ˆ˜ ์žˆ๋Š” ์ด์œ ๋ฅผ ๊นŠ์ด ์žˆ๊ฒŒ ์ดํ•ดํ•˜๋ ค๋ฉด, ๋ถˆ๋ณ€์„ฑ๊ณผ ์Šค๋ ˆ๋“œ ์•ˆ์ „์„ฑ์ด ์–ด๋–ป๊ฒŒ ์ƒํ˜ธ์ž‘์šฉํ•˜๋Š”์ง€๋ฅผ ์•Œ์•„์•ผ ํ•œ๋‹ค.


๋ถˆ๋ณ€์„ฑ์ด๋ž€ ๋ฌด์—‡์ธ๊ฐ€?

๋ถˆ๋ณ€์„ฑ(Immutability)์€ ๊ฐ์ฒด์˜ ์ƒํƒœ๊ฐ€ ํ•œ ๋ฒˆ ์„ค์ •๋˜๋ฉด ๋ณ€๊ฒฝ๋  ์ˆ˜ ์—†๋Š” ์„ฑ์งˆ์„ ์˜๋ฏธํ•œ๋‹ค. ์ฆ‰, ๊ฐ์ฒด์˜ ๋ชจ๋“  ํ•„๋“œ๊ฐ€ final์ด๊ฑฐ๋‚˜ ์ฝ๊ธฐ ์ „์šฉ์œผ๋กœ ์„ค์ •๋˜์–ด, ์ƒ์„ฑ ํ›„์—๋Š” ๊ฐ’์„ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์—†๊ฒŒ ๋งŒ๋“œ๋Š” ๊ฒƒ์ด๋‹ค๋‹ค. ๋ถˆ๋ณ€์„ฑ์€ ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ์žฅ์ ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค:

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


๋ถˆ๋ณ€์„ฑ๊ณผ ์Šค๋ ˆ๋“œ ์•ˆ์ „์„ฑ

์Šค๋ ˆ๋“œ ์•ˆ์ „์„ฑ(Thread Safety)์€ ์—ฌ๋Ÿฌ ์Šค๋ ˆ๋“œ๊ฐ€ ๋™์‹œ์— ๊ฐ์ฒด๋ฅผ ์‚ฌ์šฉํ•ด๋„ ์ƒํƒœ๊ฐ€ ์†์ƒ๋˜์ง€ ์•Š๋„๋ก ๋ณด์žฅํ•˜๋Š” ์„ฑ์งˆ์ž…๋‹ˆ๋‹ค. ๋ถˆ๋ณ€์„ฑ์€ ์Šค๋ ˆ๋“œ ์•ˆ์ „์„ฑ์„ ๋ณด์žฅํ•˜๋Š” ๋ฐ ์ค‘์š”ํ•œ ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค.

1. ๊ฒฝํ•ฉ ์กฐ๊ฑด ํšŒํ”ผ

๋ถˆ๋ณ€ ๊ฐ์ฒด๋Š” ์—ฌ๋Ÿฌ ์Šค๋ ˆ๋“œ๊ฐ€ ๋™์‹œ์— ์ ‘๊ทผํ•ด๋„ ๊ฒฝํ•ฉ ์กฐ๊ฑด(Race Condition)์„ ๋ฐœ์ƒ์‹œํ‚ค์ง€ ์•Š๋Š”๋‹ค. ์™œ๋ƒํ•˜๋ฉด ์ƒํƒœ ๋ณ€๊ฒฝ์ด ์ผ์–ด๋‚˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

2. ๋™๊ธฐํ™” ๋ถˆํ•„์š”

๋ถˆ๋ณ€ ๊ฐ์ฒด๋Š” ์ƒํƒœ ๋ณ€๊ฒฝ์„ ํ—ˆ์šฉํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ, ๋™๊ธฐํ™”(Synchronization)๊ฐ€ ํ•„์š” ์—†๋‹ค. ์ด๋Š” ์„ฑ๋Šฅ์„ ํ–ฅ์ƒ์‹œํ‚ค๊ณ , ์ฝ”๋“œ ๋ณต์žก์„ฑ์„ ์ค„์ธ๋‹ค.

3. ์˜ˆ์ธก ๊ฐ€๋Šฅํ•œ ์ƒํƒœ

๋ถˆ๋ณ€ ๊ฐ์ฒด์˜ ์ƒํƒœ๋Š” ์˜ˆ์ธก ๊ฐ€๋Šฅํ•˜๋ฉฐ, ์‚ฌ์šฉ์ž๋Š” ๊ฐ์ฒด๊ฐ€ ํ•ญ์ƒ ์ผ๊ด€๋œ ์ƒํƒœ๋ฅผ ์œ ์ง€ํ•œ๋‹ค๊ณ  ๋ฏฟ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋Š” ์Šค๋ ˆ๋“œ ๊ฐ„์˜ ๋ถˆ์ผ์น˜ ๋ฌธ์ œ๋ฅผ ์ค„์—ฌ์ค€๋‹ค.

 

์Šค๋ ˆ๋“œ ์•ˆ์ „์„ฑ๊ณผ ์„ฑ๋Šฅ

๋ถˆ๋ณ€์„ฑ์„ ํ†ตํ•ด ์Šค๋ ˆ๋“œ ์•ˆ์ „์„ฑ์„ ํ™•๋ณดํ•˜๋ฉด, ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์„ฑ๋Šฅ ์ด์ ์ด ์žˆ๋‹ค:

1. ๋‚ฎ์€ ๋™๊ธฐํ™” ๋น„์šฉ

๋™๊ธฐํ™”๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ, ๋ถˆํ•„์š”ํ•œ ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ์ค„์–ด๋“ ๋‹ค.

2. ์„ฑ๋Šฅ ์ตœ์ ํ™”

์Šค๋ ˆ๋“œ ๊ฐ„ ๊ฒฝ์Ÿ์ด ์—†์œผ๋ฏ€๋กœ, CPU ์ž์›์„ ๋ณด๋‹ค ํšจ์œจ์ ์œผ๋กœ ์‚ฌ์šฉํ•œ๋‹ค.

3. ๊ฐ€๋…์„ฑ๊ณผ ์œ ์ง€๋ณด์ˆ˜์„ฑ

์ฝ”๋“œ๊ฐ€ ๊ฐ„๋‹จํ•˜๊ณ  ๋ช…ํ™•ํ•ด์ ธ, ๊ฐ€๋…์„ฑ๊ณผ ์œ ์ง€๋ณด์ˆ˜์„ฑ์ด ํ–ฅ์ƒ๋œ๋‹ค.

๊ฒฐ๋ก 

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