๐Ÿ“ ๊ฐ์ฒด์ง€ํ–ฅ ์„ค๊ณ„ ๊ฐ•์˜ ๋…ธํŠธ


image

๋žœ๋ค๋„˜๋ฒ„๋Š” ๊ตฌํ˜„์ฒด์ด๋‹ˆ๊นŒ Number๋กœ ๋ฐ›์ž

image

์ด๋Ÿฌ๋ฉด ๋ชจ๋‘๊ฐ€ ์›€์ง์ด๋Š”๋ฐ ?

image

์˜์กด์„ฑ ์ฃผ์ž… DI

์Šคํ”„๋ง ํ”„๋ ˆ์ž„ ์›Œํฌ๋Š” DI๋ฅผ ๊ตฌํ˜„ํ•˜๋„๋ก ๊ฐ•์ œ๋˜์–ด ์žˆ๋‹ค.
์˜์กด์„ฑ ์ฃผ์ž…์„ ์œ„ํ•ด์„œ๋Š” ์Šคํ”„๋ง์„ ์จ์•ผํ•œ๋‹ค๋Š” ๋ง์ด ์žˆ๋Š”๋ฐ ๊ทธ๋ ‡์ง€ ์•Š๋‹ค.

์Šคํ”„๋ง ํ”„๋ ˆ์ž„ ์›Œํฌ๋ฅผ ์“ฐ์ง€ ์•Š์€ ์ฑ„๋กœ DI๋ฅผ ํ•ด๋ณธ ์ ์ด ์žˆ์Šต๋‹ˆ๊นŒ ?

์ƒ์„ฑ์ž ์˜์กด์„ฑ ์ฃผ์ž…

โ“ randomNumbers๋ฅผ ๊ฐ์ฒด์˜ ๋ณ€์ˆ˜๋กœ ๋‘๊ณ ์žˆ๋Š”๋ฐ, move()์˜ ์ธ์ˆ˜๋กœ ๋„˜๊ฒจ๋ฐ›๋Š” ๊ฒƒ์€ ์–ด๋–จ๊นŒ์š”?
-> ์ƒ๊ด€ ์—†์Œ

move ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ๋งˆ๋‹ค ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•ด์•ผํ•˜๋‹ˆ

์ธ์ž๊ฐ€ ๋งŽ์•„์กŒ์„ ๋–„๋Š” ์ƒ์„ฑ์ž๋ฅผ ์ „๋‹ฌํ•˜๋Š” ๊ฒƒ์ด ์ข‹์„ ์ˆ˜๋„..

โ“ ์˜์กด์„ฑ ์ฃผ์ž…์„ ์œ„ํ•œ setter๋Š” ๊ดœ์ฐฎ๋‚˜์š” ?
-> ์–ด๋–ค ๊ฐ์ฒด๋ƒ์— ๋”ฐ๋ผ ๋‹ค๋ฅธ๋ฐ, ์ง€๊ธˆ์€ Cars์˜ ์ƒํƒœ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ํ˜„์ œ ์˜ˆ์‹œ์—์„œ๋Š” final๋กœ ์„ ์–ธํ•ด์ฃผ๋Š” ๊ฒƒ์ด ์ข‹๋‹ค. setter ์จ๋„ ์ƒ๊ด€์€ ์—†๋‹ค.

Dependency Injection์ธ๋ฐ ๊ฐ์ฒด๊ฐ€ ๋‹ค๋ฅธ ๊ฐ์ฒด์— ์˜์กดํ•˜๋Š” ๊ฒƒ์„ ์™ธ๋ถ€์—์„œ ์ฃผ์ž…ํ•˜๋Š” ๊ฒฝ์šฐ๋ฅผ DI๋ผ๊ณ  ํ•˜์ง€ ์•Š์„๊นŒ์—ฌ..?

setter๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ถ€๋ถ„์€ ์ „๋žตํŒจํ„ด์ด ์ข‹์€ ์˜ˆ์‹œ๊ฐ€ ๋˜์ง€์•Š์„๊นŒ์š”?

์ €๋Š” ๋‚ด๋ถ€ ๋กœ์ง์„ ๊ฐ์ฒด๋กœ ์ถ”์ถœํ•  ์ˆ˜ ์žˆ์„๋•Œ ์ถ”์ถœํ•œ ํ›„ ์ฃผ์ž…๋ฐ›์•„ ์‚ฌ์šฉํ•˜๋Š” ์‹์œผ๋กœ ๋ณ€๊ฒฝํ•  ๋•Œ โ€˜DIํ•œ๋‹คโ€™ ํ•˜๋Š”๊ฑฐ ๊ฐ™์•„์š”

๊ฐ์ฒด์ง€ํ–ฅ์  ์„ค๊ณ„๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ๊ฐ์ฒด๊ฐ„์˜ ํ˜‘๋ ฅ์„ ๋งŒ๋“ค์–ด๋‚ด๋Š” ์ผ์ด๊ณ , ์ด๋ฅผ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๊ฐ์ฒด๊ฐ„์˜ ์˜์กด์„ฑ์ด ํ•„์š”ํ•ด์š”.
-> ๊ทธ๋Ÿผ setter๋ฅผ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ์ง€์•Š์„๊นŒ์šฉ

์˜์กด์„ฑ์„ DI๊ฐ€ ์•„๋‹Œ ๋‚ด๋ถ€์—์„œ ๋งŒ๋“ค์–ด ์ค„ ์ˆ˜๋„ ์žˆ์ง€๋งŒ, ์ด๋ ฌ ๊ฒฐ์šฐ ๊ฐ•ํ•œ ๊ฒฐํ•ฉ์„ฑ์„ ๊ฐ€์ง€๊ธฐ ๋•Œ๋ฌธ์— ๋ณ€๊ฒฝ์— ์ž์œ ๋กญ์ง€ ์•Š์•„ DI๊ฐ€ ํ•„์š”ํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•ด์š”

์œ ์ง€๋ณด์ˆ˜ํ•˜๊ธฐ ์ข‹์€ ์ฝ”๋“œ

์ž‘์€ ์ฝ”๋“œ๊ฐ€ ์œ ์ง€๋ณด์ˆ˜ํ•˜๊ธฐ ์‰ฝ๋‹ค.
ํด๋ž˜์Šค๊ฐ€ ์ž‘์œผ๋ฉด ๋ฉ”์„œ๋“œ์™€ ํ”„๋Ÿฌํผํ‹ฐ๊ฐ€ ๋” ๊ฐ€๊นŒ์ด ์žˆ์„ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์‘์ง‘๋„๊ฐ€ ๋†’์•„์ง„๋‹ค.
๊ฐ„๋‹จํžˆ ๋งํ•ด ๊ฐ๊ฐ ๋ฉ”์„œ๋“œ๊ฐ€ ๋ชจ๋“  ํ•„๋“œ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

๋ถˆ๋ณ€ ๊ฐ์ฒด๋กœ ๋งŒ๋“œ์„ธ์š”

ํ•จ์ˆ˜ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ์€ side eggect๋ฅผ ๋งŒ๋“ค์ง€ ์•Š๋Š”๋‹ค.
๊ฐ€๋ณ€ ๊ฐ์ฒด๋Š” ๋ง๊ณ  ๋ถˆ๋ณ€ ๊ฐ์ฒด๋ฅผ ๋งŒ๋“ค์–ด์•ผ side effect๊ฐ€ ์ƒ๊ธฐ์ง€ ์•Š๋Š”๋‹ค.
๋ถˆ๋ณ€ ๊ฐ์ฒด๋กœ ๋งŒ๋“ค๋‹ค๋ณด๋ฉด ์ธ์Šคํ„ด์Šค๊ฐ€ ๋งŽ์•„์ ธ์„œ ์„ฑ๋Šฅ์ด ๋–จ์–ด์ง„๋‹ค .

-> ์ด๋Š” ์บ์‹ฑ ์ „๋žต์„ ํ†ตํ•ด ํ•ด์†Œํ•˜์ž

๋ถˆ๋ณ€ ๊ฐ์ฒด๋กœ ๋งŒ๋“ค๋‹ค ์„ฑ๋Šฅ ์ด์Šˆ๊ฐ€ ์ƒ๊ธฐ๋ฉด ๊ฐ€๋ณ€ ๊ฐ์ฒด๋‚˜ ์บ์‹ฑ์„ ์‚ฌ์šฉํ•ด๋ผ

๋ชจ๋“  ํด๋ž˜์Šค๋ฅผ ๋ถˆ๋ณ€์œผ๋กœ ๋งŒ๋“ค๋ฉด ์œ ์ง€๋ณด์ˆ˜๊ฐ€ ์‰ฝ๋‹ค.

image

ํ˜„์žฌ ๋ถˆ๋ณ€ ๊ฐ์ฒด๊ฐ€ ์•„๋‹ˆ๋‹ค.
Position์ด final์ด ์•„๋‹ˆ๋‹ค.
c๋ฉ”์†Œ๋“œ๋“ค์ด car๋ฅผ ๋ฆฌํ„ดํ•˜๋„๋ก ๋ณ€๊ฒฝํ•œ๋‹ค ?

image

image

์š”๊ฑฐ๋Š” ๊ฐ€๋ณ€ ๊ฐ์ฒด

์‚ฌ์ด๋“œ ์ดํŽ™ํŠธ๊ฐ€ ๋ฐ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค.

image

๊ฐ’์„ ๋ฐ”๊พธ๋ฉด ๊ณ„์† ์ƒˆ๋กœ์šด ๊ฐ์ฒด๋ฅผ ๋งŒ๋“ค์ฃ  ?

๋ฌด์Šจ ๊ฐœ์†Œ๋ฆฌ์•ผ ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ๋ถ„๋ช…ํžˆ ๋‹ค๋ฅด๋‹ค. ๊ทผ๋ฐ ๊ณ„์† ๊ฐ์ฒด๋ฅผ ํ• ๋‹น ๋ฐ›์•„์•ผ ํ•˜๋„ค

image

์ƒํƒœ๊ฐ€ ๋ฐ”๋€Œ๋ฉด ๊ณ„์† ์ƒˆ๋กœ์šด ๊ฒƒ์„ ๋ฐ˜ํ™˜ํ•ด์ฃผ์–ด์•ผ ํ•˜๋‹ˆโ€ฆ

๋ถˆ๋ณ€ ๊ฐ์ฒด๋Š” list ๋‚ด๋ถ€์˜ ์ƒํƒœ ๋ฐ์ดํ„ฐ๋ฅผ ์ถ”๊ฐ€ํ•˜๊ณ  ๋บด๋Š” ๊ฒƒ๋„ ๋ถˆ๋ณ€ ๊ฐ์ฒด ์ด๋‹ค.

image

์ด๋ ‡๊ฒŒ clearํ•˜๋Š” ๊ฒƒ๋„ ํ—ˆ์šฉ์ด๋‹ค.

โ“๊ทธ๋ ‡๋‹ค๋ฉด, ๋ฉ”๋ชจ๋ฆฌ์˜ ์ฃผ์†Ÿ๊ฐ’์ด ๋ถˆ๋ณ€์ด๋ฉด, ๋ฉ”๋ชจ๋ฆฌ์˜ ์ฃผ์†Ÿ๊ฐ’์ด ์ฐธ์กฐํ•˜๊ณ  ์žˆ๋Š” ๊ฐ’์ด ๋ณ€๊ฒฝ๋˜๋„ ๋ถˆ๋ณ€์ด๋‹ค ๋ผ๊ณ  ๋ณด๋Š” ๊ฑด๊ฐ€์š”?
-> ๊ทธ๋ ‡๋‹ค.

๋ถˆ๋ณ€ ๊ฐ์ฒด์™€ ์ƒ์ˆ˜ ๊ฐ์ฒด์˜ ์ฐจ์ด์— ๋Œ€ํ•ด ๊ณต๋ถ€ํ•ด ๋ณด์„ธ์š”.

๋ถˆ๋ณ€ ๊ฐ์ฒด๋กœ ๊ตฌํ˜„ํ•˜๋ฉด ์ข‹์€ ์ 

  • ์‹๋ณ„์ž ๊ฐ€๋ณ€์„ฑ ๋ฌธ์ œ๊ฐ€ ์—†๋‹ค.
  • ์‹คํŒจ ์›์ž์„ฑ์ด ์žˆ๋‹ค - ์™„์ „ํ•˜๊ณ  ๊ฒฌ๊ณ ํ•œ ์ƒํƒœ์˜ ๊ฐ์ฒด๋ฅผ ๊ฐ€์ง€๊ฑฐ๋‚˜, ์‹คํŒจํ•˜๊ฑฐ๋‚˜ ๋‘˜ ์ค‘ ํ•˜๋‚˜๋งŒ ๊ฐ€๋Šฅํ•˜๋‹ค.
  • ์‹œ๊ฐ„์  ๊ฒฐํ•ฉ์„ ์ œ๊ฑฐํ•  ์ˆ˜ ์žˆ๋‹ค. - ๊ฐ€๋ณ€ ๊ฐ์ฒด๊ฐ€ ๋งŽ์€ ๊ฒฝ์šฐ ์—ฐ์‚ฐ๋“ค์˜ ์ˆœ์„œ๋ฅผ ์ผ์ผ์ด ๊ธฐ์–ตํ•ด์•ผํ•œ๋‹ค.
  • ์‚ฌ์ด๋“œ ์ดํŽ™ํŠธ๋ฅผ ์ œ๊ฑฐํ•  ์ˆ˜ ์žˆ๋‹ค.
  • null ์ฐธ์กฐ๋ฅผ ์—†์•จ ์ˆ˜ ์žˆ๋‹ค.
  • ์Šค๋ ˆ๋“œ ์„ธ์ดํ”„ํ•˜๋‹ค.
  • ๋” ์ž‘๊ณ  ๋” ๋‹จ์ˆœํ•œ ๊ฐ์ฒด๋ฅผ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค.

public ์ƒ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ๋งˆ์„ธ์š”.. ?

์ƒ์ˆ˜๋ผ๊ณ  ๋ถˆ๋ฆฌ๋Š” public static final ํ”„๋กœํผํ‹ฐ๋Š” ๊ฐ์ฒด ์‚ฌ์ด์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๊ณต์œ ํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•œ๋‹ค.
์‚ฌ์šฉํ•˜์ง€ ๋ง๋ผ๋Š” ์ด์œ ๋Š” ๊ฐ์ฒด๋“ค์€ ์–ด๋–ค ๊ฒƒ๋„ ๊ณต์œ ํ•ด์„œ๋Š” ์•ˆ๋˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.
๋…๋ฆฝ์ ์ด์–ด์•ผ ํ•˜๋ฉฐ, ๋‹ซํ˜€ ์žˆ์–ด์•ผ ํ•œ๋‹ค.

ํ•˜์ง€๋งŒ ์ผ๋ฐ˜์ ์œผ๋กœ๋Š” public ์ƒ์ˆ˜๋ฅผ ์“ฐ๋Š”๊ฒŒ ๊ด€๋ก€์ด๋‹ค.

์ƒ์ˆ˜๋ฅผ ์“ธ๊ฑฐ๋ฉด ๊ฐ์ฒด๋กœ ๋งŒ๋“ค์–ด๋ผ??
OOP์—์„œ ํผ๋ธ”๋ฆญ ์ƒ์ˆ˜๋ฅผ ์ ˆ๋Œ€๋กœ ์‚ฌ์šฉํ•˜์ง€ ๋ง๋ผ๊ณ  ํ•œ๋‹ค.
์‚ฌ์†Œํ•œ ์ƒ์ˆ˜๋ผ๋„ ํ•ญ์ƒ ์ž‘์€ ํด๋ž˜์Šค๋ฅผ ์ด์šฉํ•ด ๋Œ€์ฒดํ•  ๊ฒƒ์„ ์ถ”์ฒœํ•œ๋‹ค.
enum๋„ public static final์„ ์“ฐ๋Š” ๊ฑด๋ฐ ์“ฐ์ง€ ๋งˆ๋ผ!

๊ทธ๋ƒฅ ์„ค๊ณ„๊ฐ€ ์™„๋ฒฝํ•˜๋‹ค ์‹ถ์„ ๋•Œ ๋„์ „ํ•ด๋ผ ^^

์ธ์Šคํ„ด์Šค ๋ณ€์ˆ˜๋Š” 4๊ฐœ ์ดํ•˜๋กœโ€ฆ ๊ทผ๋ฐ. ๋ฒˆ์™ธ๋กœ ๋ฐ์ฝ”๋ ˆ์ดํ„ฐ ํ•„๋“œ๋Š” ํ—ˆ์šฉ๋œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

position, name์˜ ํด๋ž˜์Šค ์ ‘๊ทผ์ž๋ฅผ ์—†์• ๋Š” ๊ฒƒ์€ ??
๊ทธ๋Ÿฌ๋ฉด ํŒจํ‚ค์ง€ ๋‚ด๋ถ€์˜ ๊ฒฐํ•ฉ๋„๋ฅผ ๋‚ฎ์ถœ ์ˆ˜ ์žˆ๊ณ , ์ธํ„ฐํŽ˜์ด์Šค๋กœ ๋‹ค ๋งŒ๋“ค๋ ค๋ฉด ๋„ˆ๋ฌด ๋งŽ์•„์ง€๋Š” ๋ฌธ์ œ์  ํ•ด๊ฒฐ

์Šคํ”„๋ง ํ”„๋ ˆ์ž„ ๋ญํฌ๋Š” ๊ฐ์ฒด๋“ค์˜ ์˜์กด์„ฑ์„ ์—†์•ค๋‹ค.

์Šคํ”„๋ง ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ์œ„ํ•œ ๊ฐ•์˜์˜€๋”ฐ.