Common sense

Software Engineering

ํด๋ฆฐ์ฝ”๋“œ & ๋ฆฌํŒฉํ† ๋ง & ์‹œํ์–ด ์ฝ”๋”ฉ

โœจ ํด๋ฆฐ์ฝ”๋“œ

ํด๋ฆฐ์ฝ”๋“œ๋ž€, ๊ฐ€๋…์„ฑ์ด ๋†’์€ ์ฝ”๋“œ๋ฅผ ๋งํ•œ๋‹ค.

๊ฐ€๋…์„ฑ์„ ๋†’์ด๋ ค๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๊ตฌํ˜„ํ•ด์•ผ ํ•œ๋‹ค.

  • ๋„ค์ด๋ฐ์ด ์ž˜ ๋˜์–ด์•ผ ํ•จ

  • ์˜ค๋ฅ˜๊ฐ€ ์—†์–ด์•ผ ํ•จ

  • ์ค‘๋ณต์ด ์—†์–ด์•ผ ํ•จ

  • ์˜์กด์„ฑ์„ ์ตœ๋Œ€ํ•œ ์ค„์—ฌ์•ผ ํ•จ

  • ํด๋ž˜์Šค ํ˜น์€ ๋ฉ”์†Œ๋“œ๊ฐ€ ํ•œ๊ฐ€์ง€ ์ผ๋งŒ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•จ

์–ผ๋งˆ๋‚˜ ์ฝ”๋“œ๊ฐ€ ์ž˜ ์ฝํžˆ๋Š” ์ง€, ์ฝ”๋“œ๊ฐ€ ์ง€์ €๋ถ„ํ•˜์ง€ ์•Š๊ณ  ์ •๋ฆฌ๋œ ์ฝ”๋“œ์ธ์ง€๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ๊ฒƒ์ด ๋ฐ”๋กœ 'ํด๋ฆฐ ์ฝ”๋“œ'

public int AAA(int a, int b){ return a+b; } public int BBB(int a, int b){ return a-b; }

๋‘ ๊ฐ€์ง€ ๋ฌธ์ œ์ ์ด ์žˆ๋‹ค.

public int sum(int a, int b){ return a+b; }
public int sub(int a, int b){ return a-b; }

์ฒซ์งธ๋Š” ํ•จ์ˆ˜ ๋„ค์ด๋ฐ์ด๋‹ค. ๋‹ค๋ฅธ ์‚ฌ๋žŒ๋“ค์ด ๋ด๋„ ๋ฌด์Šจ ์—ญํ• ์„ ํ•˜๋Š” ํ•จ์ˆ˜์ธ ์ง€ ์•Œ ์ˆ˜ ์žˆ๋Š” ์ด๋ฆ„์„ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค.

๋‘˜์งธ๋Š” ํ•จ์ˆ˜์™€ ํ•จ์ˆ˜ ์‚ฌ์ด์˜ ๊ฐ„๊ฒฉ์ด๋‹ค. ์—ฌ๋Ÿฌ ํ•จ์ˆ˜๊ฐ€ ์กด์žฌํ•  ๋•Œ ๊ฐ„๊ฒฉ์„ ๋‚˜๋ˆ„์ง€ ์•Š์œผ๋ฉด ์‹œ์ž‘๊ณผ ๋์„ ๊ตฌ๋ถ„ํ•˜๋Š” ๊ฒƒ์ด ๋งค์šฐ ํž˜๋“ค๋‹ค.

โœจ ๋ฆฌํŒฉํ† ๋ง

ํ”„๋กœ๊ทธ๋žจ์˜ ์™ธ๋ถ€ ๋™์ž‘์€ ๊ทธ๋Œ€๋กœ ๋‘” ์ฑ„, ๋‚ด๋ถ€์˜ ์ฝ”๋“œ๋ฅผ ์ •๋ฆฌํ•˜๋ฉด์„œ ๊ฐœ์„ ํ•˜๋Š” ๊ฒƒ์„ ๋งํ•จ

์ด๋ฏธ ๊ณต์‚ฌ๊ฐ€ ๋๋‚œ ์ง‘์ด์ง€๋งŒ, ๋” ํŠผํŠผํ•˜๊ณ  ๋ฉ‹์ง„ ์ง‘์„ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด ๋‚ด๋ถ€ ๊ตฌ์กฐ๋ฅผ ๊ฐœ์„ ํ•˜๋Š” ๋ฆฌ๋ชจ๋ธ๋ง ์ž‘์—…

ํ”„๋กœ์ ํŠธ๊ฐ€ ๋๋‚˜๋ฉด, ์ง€์ €๋ถ„ํ•œ ์ฝ”๋“œ๋ฅผ ๋ณผ ๋•Œ ๊ฐ€๋…์„ฑ์ด ๋–จ์–ด์ง€๋Š” ๋ถ€๋ถ„์ด ์กด์žฌํ•œ๋‹ค. ์ด ๋ถ€๋ถ„์„ ๊ฐœ์„ ์‹œํ‚ค๊ธฐ ์œ„ํ•ด ํ•„์š”ํ•œ ๊ฒƒ์ด ๋ฐ”๋กœ '๋ฆฌํŒฉํ† ๋ง ๊ธฐ๋ฒ•'

๋ฆฌํŒฉํ† ๋ง ์ž‘์—…์€ ์ฝ”๋“œ์˜ ๊ฐ€๋…์„ฑ์„ ๋†’์ด๊ณ , ํ–ฅํ›„ ์ด๋ฃจ์–ด์งˆ ์œ ์ง€๋ณด์ˆ˜์— ํฐ ๋„์›€์ด ๋œ๋‹ค.

โœจ ๋ฆฌํŒฉํ† ๋ง์ด ํ•„์š”ํ•œ ์ฝ”๋“œ๋Š”?

  • ์ค‘๋ณต ์ฝ”๋“œ

  • ๊ธด ๋ฉ”์†Œ๋“œ

  • ๊ฑฐ๋Œ€ํ•œ ํด๋ž˜์Šค

  • Switch ๋ฌธ

  • ์ ˆ์ฐจ์ง€ํ–ฅ์œผ๋กœ ๊ตฌํ˜„ํ•œ ์ฝ”๋“œ

๋ฆฌํŒฉํ† ๋ง์˜ ๋ชฉ์ ์€, ์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ๋” ์ดํ•ดํ•˜๊ธฐ ์‰ฝ๊ณ  ์ˆ˜์ •ํ•˜๊ธฐ ์‰ฝ๊ฒŒ ๋งŒ๋“œ๋Š” ๊ฒƒ

๋ฆฌํŒฉํ† ๋ง์€ ์„ฑ๋Šฅ์„ ์ตœ์ ํ™”์‹œํ‚ค๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋‹ค. ์ฝ”๋“œ๋ฅผ ์‹ ์†ํ•˜๊ฒŒ ๊ฐœ๋ฐœํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋งŒ๋“ค์–ด์ฃผ๊ณ , ์ฝ”๋“œ ํ’ˆ์งˆ์„ ์ข‹๊ฒŒ ๋งŒ๋“ค์–ด์ค€๋‹ค.

์ดํ•ดํ•˜๊ธฐ ์‰ฝ๊ณ , ์ˆ˜์ •ํ•˜๊ธฐ ์‰ฌ์šฐ๋ฉด? โ†’ ๊ฐœ๋ฐœ ์†๋„๊ฐ€ ์ฆ๊ฐ€!

โœจ ๋ฆฌํŒฉํ† ๋ง์ด ํ•„์š”ํ•œ ์ƒํ™ฉ

์†Œํ”„ํŠธ์›จ์–ด์— ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•ด์•ผ ํ•  ๋•Œ

๋ช…์‹ฌํ•ด์•ผํ•  ๊ฒƒ์€, ์šฐ์„  ์ฝ”๋“œ๊ฐ€ ์ œ๋Œ€๋กœ ๋Œ์•„๊ฐ€์•ผ ํ•œ๋‹ค๋Š” ๊ฒƒ. ๋ฆฌํŒฉํ† ๋ง์€ ์šฐ์„ ์ ์œผ๋กœ ํ•ด์•ผ ํ•  ์ผ์ด ์•„๋‹˜์„ ๋ช…์‹ฌํ•˜์ž

๊ฐ์ฒด์ง€ํ–ฅ ํŠน์ง•์„ ์‚ด๋ฆฌ๋ ค๋ฉด, switch-case ๋ฌธ์„ ์ ๊ฒŒ ์‚ฌ์šฉํ•ด์•ผ ํ•จ

(switch๋ฌธ์€ ์˜ค๋ฒ„๋ผ์ด๋“œ๋กœ ๋‹ค ๋ฐ”๊ฟ”๋ฒ„๋ฆฌ์ž)

โœจ ๋ฆฌํŒฉํ† ๋ง ์˜ˆ์ œ

โœจ ํด๋ฆฐ์ฝ”๋“œ์™€ ๋ฆฌํŒฉํ† ๋ง์˜ ์ฐจ์ด?

๋ฆฌํŒฉํ† ๋ง์ด ๋” ํฐ ์˜๋ฏธ๋ฅผ ๊ฐ€์ง„ ๊ฒƒ ๊ฐ™๋‹ค. ํด๋ฆฐ ์ฝ”๋“œ๋Š” ๋‹จ์ˆœํžˆ ๊ฐ€๋…์„ฑ์„ ๋†’์ด๊ธฐ ์œ„ํ•œ ์ž‘์—…์œผ๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ๋‹ค๋ฉด, ๋ฆฌํŒฉํ† ๋ง์€ ํด๋ฆฐ ์ฝ”๋“œ๋ฅผ ํฌํ•จํ•œ ์œ ์ง€๋ณด์ˆ˜๋ฅผ ์œ„ํ•œ ์ฝ”๋“œ ๊ฐœ์„ ์ด ์ด๋ฃจ์–ด์ง„๋‹ค.

ํด๋ฆฐ์ฝ”๋“œ์™€ ๊ฐ™์€ ๋ถ€๋ถ„์€ ์„ค๊ณ„๋ถ€ํ„ฐ ์ž˜ ์ด๋ฃจ์–ด์ ธ ์žˆ๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•˜๊ณ , ๋ฆฌํŒฉํ† ๋ง์€ ๊ฒฐ๊ณผ๋ฌผ์ด ๋‚˜์˜จ ์ดํ›„ ์ˆ˜์ •์ด๋‚˜ ์ถ”๊ฐ€ ์ž‘์—…์ด ์ง„ํ–‰๋  ๋•Œ ๊ฐœ์„ ํ•ด๋‚˜๊ฐ€๋Š” ๊ฒƒ์ด ์˜ฌ๋ฐ”๋ฅธ ๋ฐฉํ–ฅ์ด๋‹ค.

โœจ ์ „๋ฌธ๊ฐ€๋“ค์ด ํ‘œํ˜„ํ•œ 'ํด๋ฆฐ์ฝ”๋“œ'

ํ•œ ๊ฐ€์ง€๋ฅผ ์ œ๋Œ€๋กœ ํ•œ๋‹ค.

๋‹จ์ˆœํ•˜๊ณ  ์ง์ ‘์ ์ด๋‹ค.

ํŠน์ • ๋ชฉ์ ์„ ๋‹ฌ์„ฑํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ํ•˜๋‚˜๋งŒ ์ œ๊ณตํ•œ๋‹ค.

์ค‘๋ณต ์ค„์ด๊ธฐ, ํ‘œํ˜„๋ ฅ ๋†’์ด๊ธฐ, ์ดˆ๋ฐ˜๋ถ€ํ„ฐ ๊ฐ„๋‹จํ•œ ์ถ”์ƒํ™” ๊ณ ๋ คํ•˜๊ธฐ ์ด ์„ธ๊ฐ€์ง€๊ฐ€ ๋น„๊ฒฐ

์ฝ”๋“œ๋ฅผ ์ฝ์œผ๋ฉด์„œ ์ง์ž‘ํ–ˆ๋˜ ๊ธฐ๋Šฅ์„ ๊ฐ ๋ฃจํ‹ด์ด ๊ทธ๋Œ€๋กœ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฒƒ

โœจ ํด๋ฆฐ์ฝ”๋“œ๋ž€?

์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋Š” ์˜๋„์™€ ๋ชฉ์ ์ด ๋ช…ํ™•ํ•˜๋ฉฐ, ๋‹ค๋ฅธ ์‚ฌ๋žŒ์ด ์‰ฝ๊ฒŒ ์ฝ์„ ์ˆ˜ ์žˆ์–ด์•ผ ํ•จ

์ฆ‰, ๊ฐ€๋…์„ฑ์ด ์ข‹์•„์•ผ ํ•œ๋‹ค.

โœจ ๊ฐ€๋…์„ฑ์„ ๋†’์ธ๋‹ค๋Š” ๊ฒƒ์€?

๋‹ค๋ฅธ ์‚ฌ๋žŒ์ด ์ฝ”๋“œ๋ฅผ ๋ด๋„, ์ž์œ ๋กญ๊ฒŒ ์ˆ˜์ •์ด ๊ฐ€๋Šฅํ•˜๊ณ  ๋ฒ„๊ทธ๋ฅผ ์ฐพ๊ณ  ๋ณ€๊ฒฝ๋œ ๋‚ด์šฉ์ด ์–ด๋–ป๊ฒŒ ์ƒํ˜ธ์ž‘์šฉํ•˜๋Š”์ง€ ์ดํ•ดํ•˜๋Š” ์‹œ๊ฐ„์„ ์ตœ์†Œํ™” ์‹œํ‚ค๋Š” ๊ฒƒ...

ํด๋ฆฐ์ฝ”๋“œ๋ฅผ ๋งŒ๋“ค๊ธฐ ์œ„ํ•œ ๊ทœ์น™์ด ์žˆ๋‹ค.

1.๋„ค์ด๋ฐ(Naming)

๋ณ€์ˆ˜, ํด๋ž˜์Šค, ๋ฉ”์†Œ๋“œ์— ์˜๋„๊ฐ€ ๋ถ„๋ช…ํ•œ ์ด๋ฆ„์„ ์‚ฌ์šฉํ•œ๋‹ค.

int elapsedTimeInDays; int daysSinceCreation; int fileAgeInDays;

์ž˜๋ชป๋œ ์ •๋ณด๋ฅผ ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ๋Š” ์ด๋ฆ„์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค.

๋ฒ”์šฉ์ ์œผ๋กœ ์‚ฌ์šฉ๋˜๋Š” ๋‹จ์–ด ์‚ฌ์šฉX (aix, hp ๋“ฑ)

์—ฐ์†๋œ ์ˆซ์ž๋‚˜ ๋ถˆ์šฉ์–ด๋ฅผ ๋ง๋ถ™์ด๋Š” ๋ฐฉ์‹์€ ํ”ผํ•ด์•ผํ•จ

2.์ฃผ์„๋‹ฌ๊ธฐ(Comment)

์ฝ”๋“œ๋ฅผ ์ฝ๋Š” ์‚ฌ๋žŒ์ด ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•œ ์‚ฌ๋žŒ๋งŒํผ ์ž˜ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์•ผ ํ•จ

์ฃผ์„์€ ๋ฐ˜๋“œ์‹œ ๋‹ฌ์•„์•ผ ํ•  ์ด์œ ๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ์—๋งŒ ์ž‘์„ฑํ•˜๋„๋ก ํ•œ๋‹ค.

์ฆ‰, ์ฝ”๋“œ๋ฅผ ๋น ๋ฅด๊ฒŒ ์œ ์ถ”ํ•  ์ˆ˜ ์žˆ๋Š” ๋‚ด์šฉ์—๋Š” ์ฃผ์„์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์ด ์ข‹๋‹ค.

์„ค๋ช…์„ ์œ„ํ•œ ์„ค๋ช…์€ ๋‹ฌ์ง€ ์•Š๋Š”๋‹ค.

3.๊พธ๋ฏธ๊ธฐ(Aesthetics)

๋ณด๊ธฐ์ข‹๊ฒŒ ๋ฐฐ์น˜ํ•˜๊ณ  ๊พธ๋ฏผ๋‹ค. ๋ณด๊ธฐ ์ข‹์€ ์ฝ”๋“œ๊ฐ€ ์ฝ๊ธฐ๋„ ์ข‹๋‹ค.

๊ทœ์น™์ ์ธ ๋“ค์—ฌ์“ฐ๊ธฐ์™€ ์ค„๋ฐ”๊ฟˆ์œผ๋กœ ๊ฐ€๋…์„ฑ์„ ํ–ฅ์ƒ์‹œํ‚ค์ž

์ผ๊ด€์„ฑ์žˆ๊ณ  ๊ฐ„๊ฒฐํ•œ ํŒจํ„ด์„ ์ ์šฉํ•ด ์ค„๋ฐ”๊ฟˆํ•œ๋‹ค.

๋ฉ”์†Œ๋“œ๋ฅผ ์ด์šฉํ•ด ๋ถˆ๊ทœ์น™ํ•œ ์ค‘๋ณต ์ฝ”๋“œ๋ฅผ ์ œ๊ฑฐํ•œ๋‹ค.

ํด๋ž˜์Šค ์ „์ฒด๋ฅผ ํ•˜๋‚˜์˜ ๊ทธ๋ฃน์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜์ง€ ๋ง๊ณ , ๊ทธ ์•ˆ์—์„œ๋„ ์—ฌ๋Ÿฌ ๊ทธ๋ฃน์œผ๋กœ ๋‚˜๋ˆ„๋Š” ๊ฒƒ์ด ์ฝ๊ธฐ์— ์ข‹๋‹ค.

4.ํ๋ฆ„์ œ์–ด ๋งŒ๋“ค๊ธฐ(Making control flow easy to read)

  • ์™ผ์ชฝ์—๋Š” ๋ณ€์ˆ˜๋ฅผ, ์˜ค๋ฅธ์ชฝ์—๋Š” ์ƒ์ˆ˜๋ฅผ ๋‘๊ณ  ๋น„๊ต

    `if(length >= 10)

    while(bytes_received < bytest_expected)`

  • ๋ถ€์ •์ด ์•„๋‹Œ ๊ธ์ •์„ ๋‹ค๋ฃจ์ž

    if( a == b ) { // a!=b๋Š” ๋ถ€์ • // same } else { // different }

  • if/else๋ฅผ ์‚ฌ์šฉํ•˜๋ฉฐ, ์‚ผํ•ญ ์—ฐ์‚ฐ์ž๋Š” ๋งค์šฐ ๊ฐ„๋‹จํ•œ ๊ฒฝ์šฐ๋งŒ ์‚ฌ์šฉ

  • do/while ๋ฃจํ”„๋Š” ํ”ผํ•˜์ž

5.์ฐฉํ•œ ํ•จ์ˆ˜(Function)

ํ•จ์ˆ˜๋Š” ๊ฐ€๊ธ‰์  ์ž‘๊ฒŒ, ํ•œ๋ฒˆ์— ํ•˜๋‚˜์˜ ์ž‘์—…๋งŒ ์ˆ˜ํ–‰ํ•˜๋„๋ก ์ž‘์„ฑ

์˜จ๋ผ์ธ ํˆฌํ‘œ๋กœ ์˜ˆ๋ฅผ ๋“ค์–ด๋ณด์ž

์‚ฌ์šฉ์ž๊ฐ€ ์ถ”์ฒœ์„ ํ•˜๊ฑฐ๋‚˜, ์ด๋ฏธ ์„ ํƒํ•œ ์ถ”์ฒœ์„ ๋ณ€๊ฒฝํ•˜๊ธฐ ์œ„ํ•ด ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๋ฉด vote_change(old_vote, new_vote) ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•œ๋‹ค๊ณ  ๊ฐ€์ •ํ•ด๋ณด์ž

var vote_changed = function (old_vote, new_vote) {
	var score = get_score();
	
	if (new_vote !== old_vote) {
		if (new_vote == 'Up') {
			score += (old_vote === 'Down' ? 2 : 1);
		} else if (new_vote == 'Down') {
			score -= (old_vote === 'Up' ? 2 : 1);
		} else if (new_vote == '') {
			score += (old_vote === 'Up' ? -1 : 1);
		}
	}
	set_score(score);
};

์ด์ ์„ ๋ณ€๊ฒฝํ•ด์ฃผ๋Š” ํ•œ ๊ฐ€์ง€ ์—ญํ• ์„ ํ•˜๋Š” ํ•จ์ˆ˜๊ฐ™์ง€๋งŒ, ๋‘๊ฐ€์ง€ ์ผ์„ ํ•˜๊ณ  ์žˆ๋‹ค.

  • old_vote์™€ new_vote์˜ ์ƒํƒœ์— ๋”ฐ๋ฅธ score ๊ณ„์‚ฐ

  • ์ด์ ์„ ๊ณ„์‚ฐ

๋ณ„๋„๋กœ ํ•จ์ˆ˜๋กœ ๋ถ„๋ฆฌํ•˜์—ฌ ๊ฐ€๋…์„ฑ์„ ํ–ฅ์ƒ์‹œํ‚ค์ž

var vote_value = function (vote) {
    if(vote === 'Up') {
        return +1;
    }
    if(vote === 'Down') {
        return -1;
    }
    return 0;
};

var vote_changed = function (old_vote, new_vote) {
    var score = get_score();
    
    score -= vote_value(old_vote); // ์ด์ „ ๊ฐ’ ์ œ๊ฑฐ
    score += vote_value(new_vote); // ์ƒˆ๋กœ์šด ๊ฐ’ ๋”ํ•จ
    set_score(score);
};

ํ›จ์”ฌ ๊น”๋”ํ•œ ์ฝ”๋“œ๊ฐ€ ๋˜์—ˆ๋‹ค!

โœจ ์ฝ”๋“œ๋ฆฌ๋ทฐ & ๋ฆฌํŒฉํ† ๋ง

๋ ˆ๊ฑฐ์‹œ ์ฝ”๋“œ(ํ…Œ์ŠคํŠธ๊ฐ€ ๋ถˆ๊ฐ€๋Šฅํ•˜๊ฑฐ๋‚˜ ์–ด๋ ค์šด ์ฝ”๋“œ)๋ฅผ ํด๋ฆฐ ์ฝ”๋“œ๋กœ ๋งŒ๋“œ๋Š” ๋ฐฉ๋ฒ•

์ฝ”๋“œ๋ฆฌ๋ทฐ๋ฅผ ํ†ตํ•ด ๋ƒ„์ƒˆ๋‚˜๋Š” ์ฝ”๋“œ๋ฅผ ๋ฐœ๊ฒฌํ•˜๋ฉด, ๋ฆฌํŒฉํ† ๋ง์„ ํ†ตํ•ด ์ ์ง„์ ์œผ๋กœ ๊ฐœ์„ ํ•ด๋‚˜๊ฐ„๋‹ค.

โœจ ์ฝ”๋“œ ์ธ์ŠคํŽ™์…˜(code inspection)

์ž‘์„ฑํ•œ ๊ฐœ๋ฐœ ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ๋ถ„์„ํ•˜์—ฌ ๊ฐœ๋ฐœ ํ‘œ์ค€์— ์œ„๋ฐฐ๋˜์—ˆ๊ฑฐ๋‚˜ ์ž˜๋ชป ์ž‘์„ฑ๋œ ๋ถ€๋ถ„์„ ์ˆ˜์ •ํ•˜๋Š” ์ž‘์—…

โœจ ์ ˆ์ฐจ ๊ณผ์ •

  1. Planning : ๊ณ„ํš ์ˆ˜๋ฆฝ

  2. Overview : ๊ต์œก๊ณผ ์—ญํ•  ์ •์˜

  3. Preparation : ์ธ์ŠคํŽ™์…˜์„ ์œ„ํ•œ ์ธํ„ฐ๋ทฐ, ์‚ฐ์ถœ๋ฌผ, ๋„๊ตฌ ์ค€๋น„

  4. Meeting : ๊ฒ€ํ†  ํšŒ์˜๋กœ ๊ฐ์ž ์—ญํ• ์„ ๋งก์•„ ์ž„๋ฌด ์ˆ˜ํ–‰

  5. Rework : ๋ฐœ๊ฒฌํ•œ ๊ฒฐํ•จ์„ ์ˆ˜์ •ํ•˜๊ณ  ์žฌ๊ฒ€ํ†  ํ•„์š”ํ•œ์ง€ ์—ฌ๋ถ€ ๊ฒฐ์ •

  6. Follow-up : ๋ณด๊ณ ๋œ ๊ฒฐํ•จ ๋ฐ ์ด์Šˆ๊ฐ€ ์ˆ˜์ •๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ•˜๊ณ  ์‹œ์ •์กฐ์น˜ ์ดํ–‰

โœจ ๋ฆฌํŒฉํ† ๋ง

๋ƒ„์ƒˆ๋‚˜๋Š” ์ฝ”๋“œ๋ฅผ ์ ์ง„์ ์œผ๋กœ ๋ฐ˜๋ณต ์ˆ˜ํ–‰๋˜๋Š” ๊ณผ์ •์„ ํ†ตํ•ด ์ฝ”๋“œ๋ฅผ ์กฐ๊ธˆ์”ฉ ๊ฐœ์„ ํ•ด๋‚˜๊ฐ€๋Š” ๊ฒƒ

โœจ ๋ฆฌํŒฉํ† ๋ง ๋Œ€์ƒ

  • ๋ฉ”์†Œ๋“œ ์ •๋ฆฌ : ๊ทธ๋ฃน์œผ๋กœ ๋ฌถ์„ ์ˆ˜ ์žˆ๋Š” ์ฝ”๋“œ, ์ˆ˜์‹์„ ๋ฉ”์†Œ๋“œ๋กœ ๋ณ€๊ฒฝํ•จ

  • ๊ฐ์ฒด ๊ฐ„์˜ ๊ธฐ๋Šฅ ์ด๋™ : ๋ฉ”์†Œ๋“œ ๊ธฐ๋Šฅ์— ๋”ฐ๋ฅธ ์œ„์น˜ ๋ณ€๊ฒฝ, ํด๋ž˜์Šค ๊ธฐ๋Šฅ์„ ๋ช…ํ™•ํžˆ ๊ตฌ๋ถ„

  • ๋ฐ์ดํ„ฐ ๊ตฌ์„ฑ : ์บก์Аํ™” ๊ธฐ๋ฒ•์„ ์ ์šฉํ•ด ๋ฐ์ดํ„ฐ ์ ‘๊ทผ ๊ด€๋ฆฌ

  • ์กฐ๊ฑด๋ฌธ ๋‹จ์ˆœํ™” : ์กฐ๊ฑด ๋…ผ๋ฆฌ๋ฅผ ๋‹จ์ˆœํ•˜๊ณ  ๋ช…ํ™•ํ•˜๊ฒŒ ์ž‘์„ฑ

  • ๋ฉ”์†Œ๋“œ ํ˜ธ์ถœ ๋‹จ์ˆœํ™” : ๋ฉ”์†Œ๋“œ ์ด๋ฆ„์ด๋‚˜ ๋ชฉ์ ์ด ๋งž์ง€ ์•Š์„ ๋•Œ ๋ณ€๊ฒฝ

  • ํด๋ž˜์Šค ๋ฐ ๋ฉ”์†Œ๋“œ ์ผ๋ฐ˜ํ™” : ๋™์ผ ๊ธฐ๋Šฅ ๋ฉ”์†Œ๋“œ๊ฐ€ ์—ฌ๋Ÿฌ๊ฐœ ์žˆ์œผ๋ฉด ์ˆ˜ํผํด๋ž˜์Šค๋กœ ์ด๋™

โœจ ๋ฆฌํŒฉํ† ๋ง ์ง„ํ–‰ ๋ฐฉ๋ฒ•

์•„ํ‚คํ…์ฒ˜ ๊ด€์  ์‹œ์ž‘ โ†’ ๋””์ž์ธ ํŒจํ„ด ์ ์šฉ โ†’ ๋‹จ๊ณ„์ ์œผ๋กœ ํ•˜์œ„ ๊ธฐ๋Šฅ์— ๋Œ€ํ•œ ๋ณ€๊ฒฝ์œผ๋กœ ์ง„ํ–‰

์˜๋„ํ•˜์ง€ ์•Š์€ ๊ธฐ๋Šฅ ๋ณ€๊ฒฝ์ด๋‚˜ ๋ฒ„๊ทธ ๋ฐœ์ƒ ๋Œ€๋น„ํ•ด ํšŒ๊ท€ํ…Œ์ŠคํŠธ ์ง„ํ–‰

์ดํด๋ฆฝ์Šค์™€ ๊ฐ™์€ IDE ๋„๊ตฌ๋กœ ์ด์šฉ

โœจ ์‹œํ์–ด ์ฝ”๋”ฉ

์•ˆ์ „ํ•œ ์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ๊ฐœ๋ฐœํ•˜๊ธฐ ์œ„ํ•ด, ์†Œ์Šค์ฝ”๋“œ ๋“ฑ์— ์กด์žฌํ•  ์ˆ˜ ์žˆ๋Š” ์ž ์žฌ์ ์ธ ๋ณด์•ˆ์•ฝ์ ์„ ์ œ๊ฑฐํ•˜๋Š” ๊ฒƒ

โœจ ๋ณด์•ˆ ์•ฝ์ ์„ ๋…ธ๋ ค ๋ฐœ์ƒํ•˜๋Š” ์‚ฌ๊ณ ์‚ฌ๋ก€๋“ค

  • SQL ์ธ์ ์…˜ ์ทจ์•ฝ์ ์œผ๋กœ ๊ฐœ์ธ์œ ์ถœ ์‚ฌ๊ณ  ๋ฐœ์ƒ

  • URL ํŒŒ๋ผ๋ฏธํ„ฐ ์กฐ์ž‘ ๊ฐœ์ธ์ •๋ณด ๋…ธ์ถœ

  • ๋ฌด์ž‘์œ„ ๋Œ€์ž…๊ณต๊ฒฉ ๊ธฐํ”„ํŠธ์นด๋“œ ์ •๋ณด ์œ ์ถœ

โœจ SQL ์ธ์ ์…˜ ์˜ˆ์‹œ

  • ์•ˆ์ „ํ•˜์ง€ ์•Š์€ ์ฝ”๋“œ

String query "SELECT * FROM users WHERE userid = '" + userid + "'" + "AND password = '" + password + "'";
Statement stmt = connection.createStatement(); ResultSet rs = stmt.executeQuery(query);

์ ์ ˆํ•œ ๊ฒ€์ฆ ์ž‘์—…์ด ์ˆ˜ํ–‰๋˜์–ด์•ผ ์•ˆ์ „ํ•จ

์ž…๋ ฅ๋ฐ›๋Š” ๊ฐ’์˜ ๋ณ€์ˆ˜๋ฅผ $ ๋Œ€์‹  #์„ ์‚ฌ์šฉํ•˜๋ฉด์„œ ๋ฐ”์ธ๋”ฉ ์ฒ˜๋ฆฌ๋กœ ์‹œํ์–ด ์ฝ”๋”ฉ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

TDD

โœจ TDD : ํ…Œ์ŠคํŠธ ์ฃผ๋„ ๊ฐœ๋ฐœ

'ํ…Œ์ŠคํŠธ๊ฐ€ ๊ฐœ๋ฐœ์„ ์ด๋Œ์–ด ๋‚˜๊ฐ„๋‹ค.'

์šฐ๋ฆฌ๋Š” ๋ณดํ†ต ๊ฐœ๋ฐœํ•  ๋•Œ, ์„ค๊ณ„(๋””์ž์ธ)๋ฅผ ํ•œ ์ดํ›„ ์ฝ”๋“œ ๊ฐœ๋ฐœ๊ณผ ํ…Œ์ŠคํŠธ ๊ณผ์ •์„ ๊ฑฐ์น˜๊ฒŒ ๋œ๋‹ค.

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

`์ž‘๊ฐ€๊ฐ€ ์ฑ…์„ ์“ฐ๋Š” ๊ณผ์ •์— ๋Œ€ํ•ด์„œ ์ƒ๊ฐํ•ด๋ณด์ž.

์ฑ…์„ ์“ฐ๊ธฐ ์ „, ๋ชฉ์ฐจ๋ฅผ ๋จผ์ € ๊ตฌ์„ฑํ•œ๋‹ค. ์ดํ›„ ๋ชฉ์ฐจ์— ๋งž๋Š” ๋‚ด์šฉ์„ ๋จผ์ € ๊ตฌ์ƒํ•œ ๋’ค, ์ดˆ์•ˆ์„ ์ž‘์„ฑํ•˜๊ณ  ๊ณ ์ณ์“ฐ๊ธฐ๋ฅผ ๋ฐ˜๋ณตํ•œ๋‹ค.

๋ชฉ์ฐจ ๊ตฌ์„ฑ : ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ์ž‘์„ฑ ์ดˆ์•ˆ ์ž‘์„ฑ : ์ฝ”๋“œ ๊ฐœ๋ฐœ ๊ณ ์ณ ์“ฐ๊ธฐ : ์ฝ”๋“œ ์ˆ˜์ •(๋ฆฌํŒฉํ† ๋ง)`

๋ฐ˜๋ณต์ ์ธ '๊ฒ€ํ† '์™€ '๊ณ ์ณ์“ฐ๊ธฐ'๋ฅผ ํ†ตํ•ด ์ข‹์€ ๊ธ€์ด ์™„์„ฑ๋œ๋‹ค. ์ด๋Ÿฐ ๋ฐฉ๋ฒ•์„ ์†Œํ”„ํŠธ์›จ์–ด์— ์ ์šฉํ•œ ๊ฒƒ์ด TDD!

์†Œํ”„ํŠธ์›จ์–ด ๋˜ํ•œ ๋ฐ˜๋ณต์ ์ธ ํ…Œ์ŠคํŠธ์™€ ์ˆ˜์ •์„ ํ†ตํ•ด ๊ณ ํ’ˆ์งˆ์˜ ์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ํƒ„์ƒ์‹œํ‚ฌ ์ˆ˜ ์žˆ๋‹ค.

โœจ ์žฅ์ 

์ž‘์—…๊ณผ ๋™์‹œ์— ํ…Œ์ŠคํŠธ๋ฅผ ์ง„ํ–‰ํ•˜๋ฉด์„œ ์‹ค์‹œ๊ฐ„์œผ๋กœ ์˜ค๋ฅ˜ ํŒŒ์•…์ด ๊ฐ€๋Šฅํ•จ ( ์‹œ์Šคํ…œ ๊ฒฐํ•จ ๋ฐฉ์ง€ )

์งง์€ ๊ฐœ๋ฐœ ์ฃผ๊ธฐ๋ฅผ ํ†ตํ•ด ๊ณ ๊ฐ์˜ ์š”๊ตฌ์‚ฌํ•ญ ๋น ๋ฅด๊ฒŒ ์ˆ˜์šฉ ๊ฐ€๋Šฅ. ํ”ผ๋“œ๋ฐฑ์ด ๊ฐ€๋Šฅํ•˜๊ณ  ์ง„ํ–‰ ์ƒํ™ฉ ํŒŒ์•…์ด ์‰ฌ์›€

์ž๋™ํ™” ๋„๊ตฌ๋ฅผ ์ด์šฉํ•œ TDD ํ…Œ์ŠคํŠธ์ผ€์ด์Šค๋ฅผ ๋‹จ์œ„ ํ…Œ์ŠคํŠธ๋กœ ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•จ

(์ž๋ฐ”๋Š” JUnit, C์™€ C++์€ CppUnit ๋“ฑ)

๊ฐœ๋ฐœ์ž๊ฐ€ ๊ธฐ๋Œ€ํ•˜๋Š” ์•ฑ์˜ ๋™์ž‘์— ๊ด€ํ•œ ๋ฌธ์„œ๋ฅผ ํ…Œ์ŠคํŠธ๊ฐ€ ์ œ๊ณตํ•ด์คŒ๋˜ํ•œ ์ด ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๋Š” ์ฝ”๋“œ์™€ ํ•จ๊ป˜ ์—…๋ฐ์ดํŠธ ๋˜๋ฏ€๋กœ ๋ฌธ์„œ ์ž‘์„ฑ๊ณผ ๊ฑฐ๋ฆฌ๊ฐ€ ๋จผ ๊ฐœ๋ฐœ์ž์—๊ฒŒ ๋งค์šฐ ์ข‹์Œ

โœจ ๋‹จ์ 

๊ธฐ์กด ๊ฐœ๋ฐœ ํ”„๋กœ์„ธ์Šค์— ํ…Œ์ŠคํŠธ์ผ€์ด์Šค ์„ค๊ณ„๊ฐ€ ์ถ”๊ฐ€๋˜๋ฏ€๋กœ ์ƒ์‚ฐ ๋น„์šฉ ์ฆ๊ฐ€

ํ…Œ์ŠคํŠธ์˜ ๋ฐฉํ–ฅ์„ฑ, ํ”„๋กœ์ ํŠธ ์„ฑ๊ฒฉ์— ๋”ฐ๋ฅธ ํ…Œ์ŠคํŠธ ํ”„๋ ˆ์ž„์›Œํฌ ์„ ํƒ ๋“ฑ ์ถ”๊ฐ€๋กœ ๊ณ ๋ คํ•  ๋ถ€๋ถ„์˜ ์ฆ๊ฐ€

โœจ ์ ์ˆ˜ ๊ณ„์‚ฐ ํ”„๋กœ๊ทธ๋žจ์„ ํ†ตํ•œ TDD ์˜ˆ์ œ ์ง„ํ–‰


์ค‘๊ฐ„๊ณ ์‚ฌ, ๊ธฐ๋ง๊ณ ์‚ฌ, ๊ณผ์ œ ์ ์ˆ˜๋ฅผ ํ†ตํ•œ ์„ฑ์ ์„ ๋‚ด๋Š” ๊ฐ„๋‹จํ•œ ํ”„๋กœ๊ทธ๋žจ์„ ๋งŒ๋“ค์–ด๋ณด์ž

์ ์ˆ˜ ์ดํ•ฉ 90์  ์ด์ƒ์€ A, 80์  ์ด์ƒ์€ B, 70์  ์ด์ƒ์€ C, 60์  ์ด์ƒ์€ D, ๋‚˜๋จธ์ง€๋Š” F๋‹ค.

TDD ํ…Œ์ŠคํŠธ์ผ€์ด์Šค๋ฅผ ๋จผ์ € ์ž‘์„ฑํ•œ๋‹ค.

35 + 25 + 25 = 85์ ์ด๋ฏ€๋กœ ๋“ฑ๊ธ‰์ด B๊ฐ€ ๋‚˜์™€์•ผ ํ•œ๋‹ค.

๋”ฐ๋ผ์„œ assertEquals์˜ ์ธ์ž๊ฐ’์„ "B"๋กœ ์ฃผ๊ณ , ํ…Œ์ŠคํŠธ ๊ฒฐ๊ณผ๊ฐ€ ์ผ์น˜ํ•˜๋Š”์ง€ ํ™•์ธํ•˜๋Š” ๊ณผ์ •์„ ์ง„ํ–‰ํ•ด๋ณด์ž

public class GradeTest {
    @Test
    public void scoreResult() {
        
        Score score = new Score(35, 25, 25); // Score ํด๋ž˜์Šค ์ƒ์„ฑ
        SimpleScoreStrategy scores = new SimpleScoreStrategy();
        
        String resultGrade = scores.computeGrade(score); // ์ ์ˆ˜ ๊ณ„์‚ฐ
        
        assertEquals("B", resultGrade); // ํ™•์ธ
    }
}

ํ˜„์žฌ๋Š” Score ํด๋ž˜์Šค์™€ computeGrade() ๋ฉ”์†Œ๋“œ๊ฐ€ ๊ตฌํ˜„๋˜์ง€ ์•Š์€ ์ƒํƒœ๋‹ค. (ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋กœ๋งŒ ์กด์žฌ)

ํ…Œ์ŠคํŠธ ์ฝ”๋“œ์— ๋งž์ถฐ์„œ ์ฝ”๋“œ ๊ฐœ๋ฐœ์„ ์ง„ํ–‰ํ•˜์ž

์šฐ์„  ์ ์ˆ˜๋ฅผ ์ €์žฅํ•  Score ํด๋ž˜์Šค๋ฅผ ์ƒ์„ฑํ•œ๋‹ค

public class Score {
    private int middleScore = 0;
    private int finalScore = 0;
    private int homeworkScore = 0;
    
    public Score(int middleScore, int finalScore, int homeworkScore) {
        this.middleScore = middleScore;
        this.finalScore = finalScore;
        this.homeworkScore = homeworkScore;
    }
    
    public int getMiddleScore(){
        return middleScore;
    }
    
    public int getFinalScore(){
        return finalScore;
    }
    
    public int getHomeworkScore(){
        return homeworkScore;
    }
}

์ด์ œ ์ ์ˆ˜ ๊ณ„์‚ฐ์„ ํ†ตํ•ด ์„ฑ์ ์„ ๋ฟŒ๋ ค์ค„ computeGrade() ๋ฉ”์†Œ๋“œ๋ฅผ ๊ฐ€์ง„ ํด๋ž˜์Šค๋ฅผ ๋งŒ๋“ ๋‹ค.

์šฐ์„  ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•˜์ž

public interface ScoreStrategy {
    public String computeGrade(Score score);
}

์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ฐ€์ ธ์™€ ์˜ค๋ฒ„๋ผ์ด๋”ฉํ•œ ํด๋ž˜์Šค๋ฅผ ๊ตฌํ˜„ํ•œ๋‹ค

public class SimpleScoreStrategy implements ScoreStrategy {
    public String computeGrade(Score score) {
        
        int totalScore = score.getMiddleScore() + score.getFinalScore() + score.getHomeworkScore(); // ์ ์ˆ˜ ์ดํ•ฉ
        
        String gradeResult = null; // ํ•™์  ์ €์žฅํ•  String ๋ณ€์ˆ˜
        
        if(totalScore >= 90) {
            gradeResult = "A";
        } else if(totalScore >= 80) {
            gradeResult = "B";
        } else if(totalScore >= 70) {
            gradeResult = "C";
        } else if(totalScore >= 60) {
            gradeResult = "D";
        } else {
            gradeResult = "F";
        }
        
        return gradeResult;
    }
}

์ด์ œ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋กœ ๋Œ์•„๊ฐ€์„œ, ์‹ค์ œ๋กœ ํ†ต๊ณผํ•  ์ •๋ณด๋ฅผ ์ž…๋ ฅํ•ด๋ณธ ๋’ค ๊ฒฐ๊ณผ๋ฅผ ํ™•์ธํ•ด๋ณด์ž

์ด๋•Œ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ, ์ค‘๋ณต ์ œ๊ฑฐ, ์ถ”๊ฐ€ ๊ธฐ๋Šฅ์„ ํ†ตํ•œ ๋ฆฌํŒฉํ† ๋ง ์ž‘์—…์„ ํ†ตํ•ด ์™„์„ฑ๋„ ๋†’์€ ํ”„๋กœ์ ํŠธ๋ฅผ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋…ธ๋ ฅํ•˜์ž!

ํ†ต๊ณผ๊ฐ€ ๊ฐ€๋Šฅํ•œ ์ •๋ณด๋ฅผ ๋„ฃ๊ณ  ์‹คํ–‰ํ•˜๋ฉด, ์•„๋ž˜์™€ ๊ฐ™์ด ์—๋Ÿฌ ์—†์ด ์ œ๋Œ€๋กœ ์‹คํ–‰๋˜๋Š” ๋ชจ์Šต์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

๊ตณ์ด ํ•„์š”ํ•˜๋‚˜์š”?

๋”ฑ๋ด๋„ ๊ท€์ฐฎ์•„ ๋ณด์ธ๋‹ค. ์ €๋ ‡๊ฒŒ ํ™•์ธ ์•ˆํ•ด๋„ ๊ฒฐ๊ณผ๋ฌผ์„ ์•Œ ์ˆ˜ ์žˆ์ง€ ์•Š๋ƒ๊ณ  ๋ฐ˜๋ฌธํ•  ์ˆ˜๋„ ์žˆ๋‹ค.

ํ•˜์ง€๋งŒ ์˜ˆ์‹œ๋Š” ๊ฐ„๋‹จํ•˜๊ฒŒ ๋ณด์˜€์„ ๋ฟ, ์‹ค์ œ ์‹ค๋ฌด ํ”„๋กœ์ ํŠธ์—์„œ๋Š” ๋‹ค์–‘ํ•œ ์ถœ๋ ฅ ๊ฒฐ๊ณผ๋ฌผ์ด ํ•„์š”ํ•˜๊ณ , ์›ํ•˜๋Š” ํ…Œ์ŠคํŠธ ๊ฒฐ๊ณผ๊ฐ€ ๋‚˜์˜ค๋Š” ์ง€ ํ™•์ธํ•˜๋Š” ๊ณผ์ •์€ ํ•„์ˆ˜์ ์ธ ๋ถ€๋ถ„์ด๋‹ค.

TDD๋ฅผ ํ™œ์šฉํ•˜๋ฉด, ์ฒ˜์Œ ์‹œ์ž‘ํ•˜๋Š” ๋‹จ๊ณ„์—์„œ ํ…Œ์ŠคํŠธ์ผ€์ด์Šค๋ฅผ ์„ค๊ณ„ํ•˜๊ธฐ ์œ„ํ•œ ์ดˆ๊ธฐ ๋น„์šฉ์ด ํ™•์‹คํžˆ ๋” ๋“ค๊ฒŒ ๋œ๋‹ค. ํ•˜์ง€๋งŒ ๊ฐœ๋ฐœ ๊ณผ์ •์— ์žˆ์–ด์„œ '์ดˆ๊ธฐ ๋น„์šฉ'๋ณด๋‹ค '์œ ์ง€๋ณด์ˆ˜ ๋น„์šฉ'์ด ๋” ํด ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ๋ช…์‹ฌํ•˜์ž

๋˜ํ•œ ์•ˆ์ „์„ฑ์ด ํ•„์š”ํ•œ ์†Œํ”„ํŠธ์›จ์–ด ํ”„๋กœ์ ํŠธ์—์„œ๋Š” ๊ฐœ๋ฐœ ์ดˆ๊ธฐ ๋‹จ๊ณ„๋ถ€ํ„ฐ ํ™•์‹คํ•˜๊ฒŒ ๋‹ค์ ธ๋†“๊ณ  ๊ฐ€๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•˜๋‹ค.

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

์• ์ž์ผ

์• ์ž์ผ์„ ํ†ตํ•œ ๊ฐ€์žฅ ๋งŽ์ด ์‚ฌ์šฉํ•˜๋Š” ๊ฐœ๋ฐœ ๋ฐฉ๋ฒ•๋ก ์ด '์Šคํฌ๋Ÿผ'

๋Ÿญ๋น„ ๊ฒฝ๊ธฐ์—์„œ ์‚ฌ์šฉ๋˜๋˜ ์šฉ์–ด์ธ๋ฐ, ๋ฐ˜์น™์œผ๋กœ ์ธํ•ด ๊ฒฝ๊ธฐ๊ฐ€ ์ค‘๋‹จ๋์„ ๋•Œ ์“ฐ๋Š” ๋Œ€ํ˜•์„ ๋งํ•จ

์ฆ‰, ์†Œํ”„ํŠธ์›จ์–ด ์ธก๋ฉด์—์„œ ํŒ€์ด๋ผ๋Š” ๋‹จ์–ด๊ฐ€ ์ฃผ๋Š” ์˜๋ฏธ๋ฅผ ์ ์šฉ์‹œํ‚ค๊ณ , ํšจ์œจ์ ์ธ ์„ฑ๊ณผ๋ฅผ ์–ป๊ธฐ ์œ„ํ•œ ๊ฒƒ

  1. ์ œํ’ˆ ๊ธฐ๋Šฅ ๋ชฉ๋ก ์ž‘์„ฑ

    ๊ฐœ๋ฐœํ•  ์ œํ’ˆ์— ๋Œ€ํ•œ ์š”๊ตฌ์‚ฌํ•ญ ๋ชฉ๋ก ์ž‘์„ฑ

    ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๋งค๊ฒจ์ง„, ์‚ฌ์šฉ์ž์˜ ์š”๊ตฌ์‚ฌํ•ญ ๋ชฉ๋ก์ด๋ผ๊ณ  ๋งํ•  ์ˆ˜ ์žˆ์Œ

    ๊ฐœ๋ฐœ ์ค‘์— ์ˆ˜์ •์ด ๊ฐ€๋Šฅํ•˜๊ธฐ๋Š” ํ•˜์ง€๋งŒ, ์ผ๋ฐ˜์ ์œผ๋กœ ํ•œ ์ฃผ๊ธฐ๊ฐ€ ๋๋‚  ๋•Œ๊นŒ์ง€๋Š” ์ œํ’ˆ ๊ธฐ๋Šฅ ๋ชฉ๋ก์„ ์ˆ˜์ •ํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์ด ์›์น™

  2. ์Šคํ”„๋ฆฐํŠธ Backlog

    ์Šคํ”„๋ฆฐํŠธ ๊ฐ๊ฐ์˜ ๋ชฉํ‘œ์— ๋„๋‹ฌํ•˜๊ธฐ ์œ„ํ•ด ํ•„์š”ํ•œ ์ž‘์—… ๋ชฉ๋ก

    • ์„ธ๋ถ€์ ์œผ๋กœ ์–ด๋–ค ๊ฒƒ์„ ๊ตฌํ˜„ํ•ด์•ผ ํ•˜๋Š”์ง€

    • ์ž‘์—…์ž

    • ์˜ˆ์ƒ ์ž‘์—… ์‹œ๊ฐ„

    ์ตœ์ข…์ ์œผ๋กœ ๊ฐœ๋ฐœ์ด ์–ด๋–ป๊ฒŒ ์ง„ํ–‰๋˜๊ณ  ์žˆ๋Š”์ง€ ์ƒํ™ฉ ํŒŒ์•… ๊ฐ€๋Šฅ

  3. ์Šคํ”„๋ฆฐํŠธ

    ์ž‘์€ ๋‹จ์œ„์˜ ๊ฐœ๋ฐœ ์—…๋ฌด๋ฅผ ๋‹จ๊ธฐ๊ฐ„ ๋‚ด์— ์ „๋ ฅ์งˆ์ฃผํ•˜์—ฌ ๊ฐœ๋ฐœํ•œ๋‹ค

    ํ•œ๋‹ฌ๋™์•ˆ์˜ ํฐ ๊ณ„ํš์„ 3~5์ผ ๋‹จ์œ„๋กœ ๋ฐ˜๋ณต ์ฃผ๊ธฐ๋ฅผ ์ •ํ–ˆ๋‹ค๋ฉด ์ด๊ฒƒ์ด ์Šคํฌ๋Ÿผ์—์„œ ์Šคํ”„๋ฆฐํŠธ์— ํ•ด๋‹นํ•จ

    • ์ฃผ๊ธฐ๊ฐ€ ํšŒ์˜๋ฅผ ํ†ตํ•ด ๊ฒฐ์ •๋˜๋ฉด (๋ณดํ†ต 2์ฃผ ~ 4์ฃผ) ๋ชฉํ‘œ์™€ ๋‚ด์šฉ์ด ๊ฐœ๋ฐœ ๋„์ค‘์— ๋ฐ”๋€Œ์ง€ ์•Š์•„์•ผ ํ•˜๊ณ , ํŒ€์›๋“ค ๋™์˜ ์—†์ด ๋ฐ”๊ฟ€ ์ˆ˜ ์—†๋Š” ๊ฒƒ์ด ์›์น™

  4. ์ผ์ผ ์Šคํฌ๋Ÿผ ํšŒ์˜

    ๋ช‡๊ฐ€์ง€ ๊ทœ์น™์ด ์žˆ๋‹ค.

    ๋ชจ๋“  ํŒ€์›์ด ์ฐธ์„ํ•˜์—ฌ ๋งค์ผํ•˜๊ณ , ์งง๊ฒŒ(15๋ถ„)ํ•˜๊ณ , ์ง„ํ–‰ ์ƒํ™ฉ ์ ๊ฒ€ํ•œ๋‹ค.

    ํ•œ์‚ฌ๋žŒ์”ฉ ์–ด์ œ ํ•œ ์ผ, ์˜ค๋Š˜ ํ•  ์ผ, ๋ฌธ์ œ์  ๋ฐ ์–ด๋ ค์šด ์ ์„ ์ด์•ผ๊ธฐํ•จ

    ์™„๋ฃŒ๋œ ์„ธ๋ถ€ ์ž‘์—… ํ•ญ๋ชฉ์„ ์Šคํ”„๋ฆฐํŠธ ํ˜„ํ™ฉํŒ์—์„œ ์—…๋ฐ์ดํŠธ ์‹œํ‚ด

  5. ์ œํ’ˆ์™„์„ฑ ๋ฐ ์Šคํ”„๋ฆฐํŠธ ๊ฒ€ํ†  ํšŒ์˜

    ๋ชจ๋“  ์Šคํ”„๋ฆฐํŠธ ์ฃผ๊ธฐ๊ฐ€ ๋๋‚˜๋ฉด, ์ œํ’ˆ ๊ธฐ๋Šฅ ๋ชฉ๋ก์—์„œ ์ž‘์„ฑํ•œ ์ œํ’ˆ์ด ์™„์„ฑ๋œ๋‹ค.

    ์ตœ์ข… ์ œํ’ˆ์ด ๋‚˜์˜ค๋ฉด ๊ณ ๊ฐ๋“ค ์•ž์—์„œ ์‹œ์—ฐ์„ ํ†ตํ•œ ์Šคํ”„๋ฆฐํŠธ ๊ฒ€ํ†  ํšŒ์˜ ์ง„ํ–‰

    • ๊ณ ๊ฐ์˜ ์š”๊ตฌ์‚ฌํ•ญ์— ์–ผ๋งˆ๋‚˜ ๋ถ€ํ•ฉํ–ˆ๋Š”๊ฐ€?

    • ๊ฐœ์„ ์  ๋ฐ ํ”ผ๋“œ๋ฐฑ

  6. ์Šคํ”„๋ฆฐํŠธ ํšŒ๊ณ 

    ์Šคํ”„๋ฆฐํŠธ์—์„œ ์ˆ˜ํ–‰ํ•œ ํ™œ๋™๊ณผ ๊ฐœ๋ฐœํ•œ ๊ฒƒ์„ ๋˜๋Œ์•„๋ณด๋ฉฐ ๊ฐœ์„ ์ ์ด๋‚˜ ๊ทœ์น™ ๋ฐ ํ‘œ์ค€์„ ์ž˜ ์ค€์ˆ˜ํ–ˆ๋Š”์ง€ ๊ฒ€ํ† 

    ํŒ€์˜ ๋‹จ์ ๋ณด๋‹ค๋Š” ๊ฐ•์ ๊ณผ ์žฅ์ ์„ ์ฐพ์•„ ๋” ๊ทน๋Œ€ํ™”ํ•˜๋Š”๋ฐ ์ดˆ์ ์„ ๋‘”๋‹ค

์Šคํฌ๋Ÿผ ์žฅ์ 


  • ์Šคํ”„๋ฆฐํŠธ๋งˆ๋‹ค ์ƒ์‚ฐ๋˜๋Š” ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ ์ œํ’ˆ์„ ํ†ตํ•ด ์‚ฌ์šฉ์ž์™€ ์˜๊ฒฌ์„ ๋‚˜๋ˆŒ ์ˆ˜ ์žˆ์Œ

  • ํšŒ์˜๋ฅผ ํ†ตํ•ด ํŒ€์›๋“ค๊ฐ„ ์‹ ์†ํ•œ ํ˜‘์กฐ์™€ ์กฐ์œจ์ด ๊ฐ€๋Šฅ

  • ์ž์‹ ์˜ ์ผ์ •์„ ์ง์ ‘ ๋ฐœํ‘œํ•จ์œผ๋กœ์จ ์—…๋ฌด ์ง‘์ค‘ ํ™˜๊ฒฝ ์กฐ์„ฑ

  • ํ”„๋กœ์ ํŠธ ์ง„ํ–‰ ํ˜„ํ™ฉ์„ ํ†ตํ•ด ์‹ ์†ํ•˜๊ฒŒ ๋ชฉํ‘œ์™€ ๊ฒฐ๊ณผ ์ถ”์ •์ด ๊ฐ€๋Šฅํ•˜๋ฉฐ ๋ณ€ํ™” ์‹œ๋„๊ฐ€ ์šฉ์ดํ•จ

์Šคํฌ๋Ÿผ ๋‹จ์ 


  • ์ถ”๊ฐ€ ์ž‘์—… ์‹œ๊ฐ„์ด ํ•„์š”ํ•จ (์Šคํ”„๋ฆฐํŠธ๋งˆ๋‹ค ํ…Œ์ŠคํŠธ ์ œํ’ˆ์„ ๋งŒ๋“ค์–ด์•ผํ•˜๊ธฐ ๋•Œ๋ฌธ)

  • 15๋ถ„์ด๋ผ๋Š” ํšŒ์˜ ์‹œ๊ฐ„์„ ์ง€ํ‚ค๊ธฐ ํž˜๋“ฌ ( ์‹œ๊ฐ„์ด ์ดˆ๊ณผ๋˜๋ฉด ๊ทธ๋งŒํผ ์ž‘์—… ์‹œ๊ฐ„์ด ์ค„์–ด๋“ฌ)

  • ์Šคํฌ๋Ÿผ์€ ํ”„๋กœ์ ํŠธ ๊ด€๋ฆฌ์— ๋ฌด๊ฒŒ์ค‘์‹ฌ์„ ๋‘๊ธฐ ๋•Œ๋ฌธ์— ํ”„๋กœ์„ธ์Šค ํ’ˆ์งˆ ํ‰๊ฐ€์—๋Š” ๋ฏธ์•ฝํ•จ

๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ

๋ณดํ†ต OOP๋ผ๊ณ  ๋งŽ์ด ๋ถ€๋ฅธ๋‹ค. ๊ฐ์ฒด์ง€ํ–ฅ์€ ์ˆ˜ ์—†์ด ๋งŽ์ด ๋“ค์–ด์™”์ง€๋งŒ, ์ด๊ฒŒ ๋ญ”์ง€ ์„ค๋ช…ํ•ด๋‹ฌ๋ผ๊ณ  ํ•˜๋ฉด ์–ด๋””์„œ๋ถ€ํ„ฐ ํ•ด์•ผํ•  ์ง€ ๋ง‰๋ง‰ํ•ด์ง„๋‹ค.. ๊ฐœ๋…์„ ์žก์•„๋ณด์ž

๊ฐ์ฒด์ง€ํ–ฅ ํŒจ๋Ÿฌ๋‹ค์ž„์ด ๋‚˜์˜ค๊ธฐ ์ด์ „์˜ ํŒจ๋Ÿฌ๋‹ค์ž„๋“ค๋ถ€ํ„ฐ ๊ฐ„๋‹จํ•˜๊ฒŒ ์‚ดํŽด๋ณด์ž.

ํŒจ๋Ÿฌ๋‹ค์ž„์˜ ๋ฐœ์ „ ๊ณผ์ •์„ ๋ณด๋ฉด ์ ์  ๊ฐœ๋ฐœ์ž๋“ค์ด ํŽธํ•˜๊ฒŒ ๊ฐœ๋ฐœํ•  ์ˆ˜ ์žˆ๋„๋ก ๊ฐœ์„ ๋˜๋Š” ๋ฐฉ์‹์œผ๋กœ ๋‚˜์•„๊ฐ€๊ณ  ์žˆ๋Š” ๊ฑธ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

๊ฐ€์žฅ ๋จผ์ € ์ˆœ์ฐจ์ , ๋น„๊ตฌ์กฐ์  ํ”„๋กœ๊ทธ๋ž˜๋ฐ์ด ์žˆ๋‹ค. ๋ง ๊ทธ๋Œ€๋กœ ์ˆœ์ฐจ์ ์œผ๋กœ ์ฝ”๋”ฉํ•ด๋‚˜๊ฐ€๋Š” ๊ฒƒ!

ํ•„์š”ํ•œ ๊ฒŒ ์žˆ์œผ๋ฉด ๊ณ„์† ์ˆœ์„œ๋Œ€๋กœ ์ถ”๊ฐ€ํ•ด๊ฐ€๋ฉฐ ๊ตฌํ˜„ํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค. ์ง๊ด€์ ์ผ ๊ฒƒ์ฒ˜๋Ÿผ ์ƒ๊ฐ๋˜์ง€๋งŒ, ์ ์  ๊ทœ๋ชจ๊ฐ€ ์ปค์ง€๊ฒŒ ๋˜๋ฉด ์–ด๋–ป๊ฒŒ ๋ ๊นŒ?

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

์ด๋Ÿฌ๋ฉด, ์ฝ”๋”ฉ๋ณด๋‹ค ํ๋ฆ„์„ ์ดํ•ดํ•˜๋Š” ๋ฐ ์‹œ๊ฐ„์„ ๋‹ค ์†Œ๋น„ํ•  ๊ฐ€๋Šฅ์„ฑ์ด ํฌ๋‹ค

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

์ด๋Ÿฐ ๋ฌธ์ œ์ ์„ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ํƒ„์ƒํ•œ ๊ฒƒ์ด ๋ฐ”๋กœ ์ ˆ์ฐจ์ , ๊ตฌ์กฐ์  ํ”„๋กœ๊ทธ๋ž˜๋ฐ์ด๋‹ค. ์ด๊ฑด ๋Œ€๋ถ€๋ถ„ ๋งŽ์ด ๋“ค์–ด๋ณธ ํŒจ๋Ÿฌ๋‹ค์ž„์ผ ๊ฒƒ์ด๋‹ค.

๋ฐ˜๋ณต๋  ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ๋Š” ๊ฒƒ๋“ค์„ ์žฌ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•œ ํ•จ์ˆ˜(ํ”„๋กœ์‹œ์ €)๋กœ ๋งŒ๋“ค์–ด ์‚ฌ์šฉํ•˜๋Š” ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋ฐฉ์‹์ด๋‹ค.

์—ฌ๊ธฐ์„œ ๋ณดํ†ต ์ ˆ์ฐจ๋ผ๋Š” ์˜๋ฏธ๋Š” ํ•จ์ˆ˜(ํ”„๋กœ์‹œ์ €)๋ฅผ ๋œปํ•˜๊ณ , ๊ตฌ์กฐ๋Š” ๋ชจ๋“ˆ์„ ๋œปํ•œ๋‹ค. ๋ชจ๋“ˆ์ด ํ•จ์ˆ˜๋ณด๋‹ค ๋” ์ž‘์€ ์˜๋ฏธ์ด๊ธด ํ•˜์ง€๋งŒ, ์š”์ฆ˜์€ ํฐ ํ‹€๋กœ ๊ฐ™์€ ์˜๋ฏธ๋กœ ์“ฐ์ด๊ณ  ์žˆ๋‹ค.

โœจ ํ”„๋กœ์‹œ์ €๋Š” ๋ญ”๊ฐ€์š”?

๋ฐ˜ํ™˜๊ฐ’(๋ฆฌํ„ด)์ด ๋”ฐ๋กœ ์กด์žฌํ•˜์ง€ ์•Š๋Š” ํ•จ์ˆ˜๋ฅผ ๋œปํ•œ๋‹ค. ์˜ˆ๋ฅผ ๋“ค๋ฉด, printf์™€ ๊ฐ™์€ ํ•จ์ˆ˜๋Š” ๋ฐ˜ํ™˜๊ฐ’์„ ์–ป๊ธฐ ์œ„ํ•œ ๊ฒƒ๋ณด๋‹จ, ํ™”๋ฉด์— ์ถœ๋ ฅํ•˜๋Š” ์šฉ๋„๋กœ ์“ฐ์ด๋Š” ํ•จ์ˆ˜๋‹ค. ์ด์™€ ๊ฐ™์€ ํ•จ์ˆ˜๋ฅผ ํ”„๋กœ์‹œ์ €๋กœ ๋ถ€๋ฅธ๋‹ค.

(์ •ํ™•ํžˆ ๋งํ•˜๋ฉด printf๋Š” intํ˜•์„ ๋ฆฌํ„ดํ•ด์ฃผ๊ธฐ๋Š” ํ•จ. ํ•˜์ง€๋งŒ ๋ชฉ์  ์ž์ฒด๋Š” ํ”„๋กœ์‹œ์ €์— ๊ฐ€๊นŒ์›€)

ํ•˜์ง€๋งŒ ์ด๋Ÿฐ ํŒจ๋Ÿฌ๋‹ค์ž„๋„ ๋ฌธ์ œ์ ์ด ์กด์žฌํ•œ๋‹ค. ๋ฐ”๋กœ ๋„ˆ๋ฌด ์ถ”์ƒ์ ์ด๋ผ๋Š” ๊ฒƒ..

์‹ค์ œ๋กœ ์‚ฌ์šฉ๋˜๋Š” ํ”„๋กœ๊ทธ๋žจ๋“ค์€ ์ถ”์ƒ์ ์ด์ง€๋งŒ์€ ์•Š๋‹ค. ํ•จ์ˆ˜๋Š” ๋…ผ๋ฆฌ์  ๋‹จ์œ„๋กœ ํ‘œํ˜„๋˜์ง€๋งŒ, ์‹ค์ œ ๋ฐ์ดํ„ฐ์— ํ•ด๋‹นํ•˜๋Š” ๋ณ€์ˆ˜๋‚˜ ์ƒ์ˆ˜ ๊ฐ’๋“ค์€ ๋ฌผ๋ฆฌ์  ์š”์†Œ๋กœ ๋˜์–ด์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

๋„์„œ๊ด€๋ฆฌ ํ”„๋กœ๊ทธ๋žจ์ด ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•ด๋ณด์ž.

์ฑ…์— ํ•ด๋‹นํ•˜๋Š” ์ž๋ฃŒํ˜•(ํ•„๋“œ)๋ฅผ ๊ตฌํ˜„ํ•ด์•ผ ํ•œ๋‹ค. ๋˜ํ•œ ์ฑ…๊ณผ ๊ด€๋ จ๋œ ํ•จ์ˆ˜๋ฅผ ๊ตฌํ˜„ํ•ด์•ผ ํ•œ๋‹ค. ๊ตฌ์กฐ์ ์ธ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์—์„œ๋Š” ์ด๋“ค์„ ๋”ฐ๋กœ ๋งŒ๋“ค์–ด์•ผ ํ•œ๋‹ค. ๊ฒฐ๊ตญ ๋งŽ์€ ๋ฐ์ดํ„ฐ๋ฅผ ๋งŒ๋“ค์–ด์•ผ ํ•  ๋•Œ, ๊ตฌ๋ถ„ํ•˜๊ธฐ ํž˜๋“ค๊ณ  ๋น„ํšจ์œจ์ ์œผ๋กœ ์ฝ”๋”ฉํ•  ๊ฐ€๋Šฅ์„ฑ์ด ๋†’์•„์ง„๋‹ค.

์ฑ…์— ๋Œ€ํ•œ ์ž๋ฃŒํ˜•, ์ฑ…์— ๋Œ€ํ•œ ํ•จ์ˆ˜๊ฐ€ ๋ฌผ๋ฆฌ์ ์œผ๋ก  ๊ฐ™์ด ์žˆ์„ ์ˆ˜ ์žˆ์ง€๋งŒ (๊ฐ™์€ ์œ„์น˜์— ๊ธฐ๋ก)

๋…ผ๋ฆฌ์ ์œผ๋กœ๋Š” ํ•จ๊ป˜ํ•  ์ˆ˜ ์—†๋Š” ๊ตฌ์กฐ๊ฐ€ ๋ฐ”๋กœ ๊ตฌ์กฐ์  ํ”„๋กœ๊ทธ๋ž˜๋ฐ

๋”ฐ๋ผ์„œ, ์ด๋ฅผ ํ•œ๋ฒˆ์— ๋ฌถ๊ธฐ ์œ„ํ•œ ํŒจ๋Ÿฌ๋‹ค์ž„์ด ํƒ„์ƒํ•œ๋‹ค.

๋ฐ”๋กœ ๊ฐ์ฒด์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์ด๋‹ค.

์šฐ๋ฆฌ๊ฐ€ vo๋ฅผ ๋งŒ๋“ค ๋•Œ์™€ ๊ฐ™์€ ํ˜•ํƒœ๋‹ค. ํด๋ž˜์Šค๋งˆ๋‹ค ํ•„์š”ํ•œ ํ•„๋“œ๋ฅผ ์„ ์–ธํ•˜๊ณ , getter์™€ setter๋กœ ๊ตฌ์„ฑ๋œ ๋ชจ์Šต์œผ๋กœ ํ•ด๊ฒฐํ•œ๋‹ค. ๋ฐ”๋กœ ํŠน์ •ํ•œ ๊ฐœ๋…์˜ ํ•จ์ˆ˜์™€ ์ž๋ฃŒํ˜•์„ ํ•จ๊ป˜ ๋ฌถ์–ด์„œ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ํƒ„์ƒํ•œ ๊ฒƒ!

๊ฐ€์žฅ ์ค‘์š”ํ•œ ์ ์€, ๊ฐ์ฒด ๋‚ด๋ถ€์— ์ž๋ฃŒํ˜•(ํ•„๋“œ)์™€ ํ•จ์ˆ˜(๋ฉ”์†Œ๋“œ)๊ฐ€ ๊ฐ™์ด ์กด์žฌํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

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

์ด์ฒ˜๋Ÿผ ๊ฐ€๋Šฅํ•œ ๋ชจ๋“  ๋ฌผ๋ฆฌ์ , ๋…ผ๋ฆฌ์  ์š”์†Œ๋ฅผ ๊ฐ์ฒด๋กœ ๋งŒ๋“œ๋ ค๋Š” ๊ฒƒ์ด ๊ฐ์ฒด์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์ด๋ผ๊ณ  ๋งํ•  ์ˆ˜ ์žˆ๋‹ค.

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

โœจ ํŠน์ง•

๊ฐ์ฒด์ง€ํ–ฅ์˜ ํŒจ๋Ÿฌ๋‹ค์ž„์ด ์ƒ๊ฒจ๋‚˜๋ฉด์„œ ํฌ๊ฒŒ 4๊ฐ€์ง€ ํŠน์ง•์„ ๊ฐ–์ถ”๊ฒŒ ๋˜์—ˆ๋‹ค.

์ด 4๊ฐ€์ง€ ํŠน์„ฑ์„ ์ž˜ ์ดํ•ดํ•˜๊ณ  ๊ตฌํ˜„ํ•ด์•ผ ๊ฐ์ฒด๋ฅผ ํ†ตํ•œ ํšจ์œจ์ ์ธ ๊ตฌํ˜„์ด ๊ฐ€๋Šฅํ•ด์ง„๋‹ค.

  1. ์ถ”์ƒํ™”(Abstraction)

    ํ•„์š”๋กœ ํ•˜๋Š” ์†์„ฑ์ด๋‚˜ ํ–‰๋™์„ ์ถ”์ถœํ•˜๋Š” ์ž‘์—…

    ์ถ”์ƒ์ ์ธ ๊ฐœ๋…์— ์˜์กดํ•˜์—ฌ ์„ค๊ณ„ํ•ด์•ผ ์œ ์—ฐํ•จ์„ ๊ฐ–์ถœ ์ˆ˜ ์žˆ๋‹ค.

    ์ฆ‰, ์„ธ๋ถ€์ ์ธ ์‚ฌ๋ฌผ๋“ค์˜ ๊ณตํ†ต์ ์ธ ํŠน์ง•์„ ํŒŒ์•…ํ•œ ํ›„ ํ•˜๋‚˜์˜ ์ง‘ํ•ฉ์œผ๋กœ ๋งŒ๋“ค์–ด๋‚ด๋Š” ๊ฒƒ์ด ์ถ”์ƒํ™”๋‹ค

    `ex. ์•„์šฐ๋””, BMW, ๋ฒค์ธ ๋Š” ๋ชจ๋‘ '์ž๋™์ฐจ'๋ผ๋Š” ๊ณตํ†ต์ ์ด ์žˆ๋‹ค.

    ์ž๋™์ฐจ๋ผ๋Š” ์ถ”์ƒํ™” ์ง‘ํ•ฉ์„ ๋งŒ๋“ค์–ด๋‘๊ณ , ์ž๋™์ฐจ๋“ค์ด ๊ฐ€์ง„ ๊ณตํ†ต์ ์ธ ํŠน์ง•๋“ค์„ ๋งŒ๋“ค์–ด ํ™œ์šฉํ•œ๋‹ค.`

    '์™œ ํ•„์š”ํ•˜์ฃ ?'

    ์˜ˆ๋ฅผ ๋“ค๋ฉด, 'ํ˜„๋Œ€'์™€ ๊ฐ™์€ ๋‹ค๋ฅธ ์ž๋™์ฐจ ๋ธŒ๋žœ๋“œ๊ฐ€ ์ถ”๊ฐ€๋  ์ˆ˜๋„ ์žˆ๋‹ค. ์ด๋•Œ ์ถ”์ƒํ™”๋กœ ๊ตฌํ˜„ํ•ด๋‘๋ฉด ๋‹ค๋ฅธ ๊ณณ์˜ ์ฝ”๋“œ๋Š” ์ˆ˜์ •ํ•  ํ•„์š” ์—†์ด ์ถ”๊ฐ€๋กœ ๋งŒ๋“ค ๋ถ€๋ถ„๋งŒ ์ƒˆ๋กœ ์ƒ์„ฑํ•ด์ฃผ๋ฉด ๋œ๋‹ค.

  2. ์บก์Аํ™”(Encapsulation)

    ๋‚ฎ์€ ๊ฒฐํ•ฉ๋„๋ฅผ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ๋„๋ก ์„ค๊ณ„ํ•˜๋Š” ๊ฒƒ

    ์‰ฝ๊ฒŒ ๋งํ•˜๋ฉด, ํ•œ ๊ณณ์—์„œ ๋ณ€ํ™”๊ฐ€ ์ผ์–ด๋‚˜๋„ ๋‹ค๋ฅธ ๊ณณ์— ๋ฏธ์น˜๋Š” ์˜ํ–ฅ์„ ์ตœ์†Œํ™” ์‹œํ‚ค๋Š” ๊ฒƒ์„ ๋งํ•œ๋‹ค.

    (๊ฐ์ฒด๊ฐ€ ๋‚ด๋ถ€์ ์œผ๋กœ ๊ธฐ๋Šฅ์„ ์–ด๋–ป๊ฒŒ ๊ตฌํ˜„ํ•˜๋Š”์ง€ ๊ฐ์ถ”๋Š” ๊ฒƒ!)

    ๊ฒฐํ•ฉ๋„๊ฐ€ ๋‚ฎ๋„๋ก ๋งŒ๋“ค์–ด์•ผ ํ•˜๋Š” ์ด์œ ๊ฐ€ ๋ฌด์—‡์ผ๊นŒ? ๊ฒฐํ•ฉ๋„(coupling)๋ž€, ์–ด๋–ค ๊ธฐ๋Šฅ์„ ์‹คํ–‰ํ•  ๋•Œ ๋‹ค๋ฅธ ํด๋ž˜์Šค๋‚˜ ๋ชจ๋“ˆ์— ์–ผ๋งˆ๋‚˜ ์˜์กด์ ์ธ๊ฐ€๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ๋ง์ด๋‹ค.

    ์ฆ‰, ๋…๋ฆฝ์ ์œผ๋กœ ๋งŒ๋“ค์–ด์ง„ ๊ฐ์ฒด๋“ค ๊ฐ„์˜ ์˜์กด๋„๊ฐ€ ์ตœ๋Œ€ํ•œ ๋‚ฎ๊ฒŒ ๋งŒ๋“œ๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•˜๋‹ค. ๊ฐ์ฒด๋“ค ๊ฐ„์˜ ์˜์กด๋„๊ฐ€ ๋†’์•„์ง€๋ฉด ๊ตณ์ด ๊ฐ์ฒด ์ง€ํ–ฅ์œผ๋กœ ์„ค๊ณ„ํ•˜๋Š” ์˜๋ฏธ๊ฐ€ ์—†์–ด์ง„๋‹ค.

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

    ์ด๊ฒƒ์ด ๋ฐ”๋กœ ์บก์Аํ™”์™€ ํฌ๊ฒŒ ์—ฐ๊ด€๋œ ๋ถ€๋ถ„์ด๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ๋‹ค.

    ๊ทธ๋ ‡๋‹ค๋ฉด, ์บก์Аํ™”๋Š” ์–ด๋–ป๊ฒŒ ๋†’์€ ์‘์ง‘๋„์™€ ๋‚ฎ์€ ๊ฒฐํ•ฉ๋„๋ฅผ ๊ฐ–๊ฒŒ ํ• ๊นŒ?

    ๋ฐ”๋กœ ์ •๋ณด ์€๋‹‰์„ ํ™œ์šฉํ•œ๋‹ค.

    ์™ธ๋ถ€์—์„œ ์ ‘๊ทผํ•  ํ•„์š”๊ฐ€ ์—†๋Š” ๊ฒƒ๋“ค์€ private์œผ๋กœ ์ ‘๊ทผํ•˜์ง€ ๋ชปํ•˜๋„๋ก ์ œํ•œ์„ ๋‘๋Š” ๊ฒƒ์ด๋‹ค.

    (๊ฐ์ฒด์•ˆ์˜ ํ•„๋“œ๋ฅผ ์„ ์–ธํ•  ๋•Œ private์œผ๋กœ ์„ ์–ธํ•˜๋ผ๋Š” ๋ง์ด ๋ฐ”๋กœ ์ด ๋•Œ๋ฌธ!!)

  3. ์ƒ์†

    ์ผ๋ฐ˜ํ™” ๊ด€๊ณ„(Generalization)๋ผ๊ณ ๋„ ํ•˜๋ฉฐ, ์—ฌ๋Ÿฌ ๊ฐœ์ฒด๋“ค์ด ์ง€๋‹Œ ๊ณตํ†ต๋œ ํŠน์„ฑ์„ ๋ถ€๊ฐ์‹œ์ผœ ํ•˜๋‚˜์˜ ๊ฐœ๋…์ด๋‚˜ ๋ฒ•์น™์œผ๋กœ ์„ฑ๋ฆฝํ•˜๋Š” ๊ณผ์ •

    ์ผ๋ฐ˜ํ™”(์ƒ์†)์€ ๋˜ ๋‹ค๋ฅธ ์บก์Аํ™”๋‹ค.

    ์ž์‹ ํด๋ž˜์Šค๋ฅผ ์™ธ๋ถ€๋กœ๋ถ€ํ„ฐ ์€๋‹‰ํ•˜๋Š” ์บก์Аํ™”์˜ ์ผ์ข…์ด๋ผ๊ณ  ๋งํ•  ์ˆ˜ ์žˆ๋‹ค.

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

    ์‚ฌ๋žŒ ํด๋ž˜์Šค์˜ ๊ด€์ ์œผ๋กœ๋Š”, ๊ตฌ์ฒด์ ์ธ ์ž๋™์ฐจ์˜ ์ข…๋ฅ˜๊ฐ€ ์ˆจ๊ฒจ์ ธ ์žˆ๋Š” ์ƒํƒœ๋‹ค. ๋Œ€๋ฆฌ ์šด์ „์ž ์ž…์žฅ์—์„œ๋Š” ์ž๋™์ฐจ์˜ ์ข…๋ฅ˜๊ฐ€ ์–ด๋–ค ๊ฒƒ์ธ์ง€๋Š” ์šด์ „ํ•˜๋Š”๋ฐ ํฌ๊ฒŒ ์ค‘์š”ํ•˜์ง€ ์•Š๋‹ค.

    ์ƒˆ๋กœ์šด ์ž๋™์ฐจ๋“ค์ด ์ถ”๊ฐ€๋œ๋‹ค๊ณ  ํ•ด๋„, ์‚ฌ๋žŒ ํด๋ž˜์Šค๋Š” ์˜ํ–ฅ์„ ๋ฐ›์ง€ ์•Š๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•˜๋‹ค. ๊ทธ๋Ÿฌ๋ฏ€๋กœ ์บก์Аํ™”๋ฅผ ํ†ตํ•ด ์‚ฌ๋žŒ ํด๋ž˜์Šค ์ž…์žฅ์—์„œ๋Š” ํ™•์ธํ•  ์ˆ˜ ์—†๋„๋ก ๊ตฌํ˜„ํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

    ์ด์ฒ˜๋Ÿผ, ์ƒ์† ๊ด€๊ณ„์—์„œ๋Š” ๋‹จ์ˆœํžˆ ํ•˜๋‚˜์˜ ํด๋ž˜์Šค ์•ˆ์—์„œ ์†์„ฑ ๋ฐ ์—ฐ์‚ฐ๋“ค์˜ ์บก์Аํ™”์— ํ•œ์ •๋˜์ง€ ์•Š๋Š”๋‹ค. ์ฆ‰, ์ž์‹ ํด๋ž˜์Šค ์ž์ฒด๋ฅผ ์บก์Аํ™”ํ•˜์—ฌ '์‚ฌ๋žŒ ํด๋ž˜์Šค'์™€ ๊ฐ™์€ ์™ธ๋ถ€์— ์€๋‹‰ํ•˜๋Š” ๊ฒƒ์œผ๋กœ ํ™•์žฅ๋˜๋Š” ๊ฒƒ์ด๋‹ค.

    ์ด์ฒ˜๋Ÿผ ์ž์‹ ํด๋ž˜์Šค๋ฅผ ์บก์Аํ™”ํ•ด๋‘๋ฉด, ์™ธ๋ถ€์—์„  ์ด๋Ÿฌํ•œ ํด๋ž˜์Šค๋“ค์— ์˜ํ–ฅ์„ ๋ฐ›์ง€ ์•Š๊ณ  ๊ฐœ๋ฐœ์„ ์ด์–ด๊ฐˆ ์ˆ˜ ์žˆ๋Š” ์žฅ์ ์ด ์žˆ๋‹ค.

    โœจ ์ƒ์† ์žฌ์‚ฌ์šฉ์˜ ๋‹จ์ 

    ์ƒ์†์„ ํ†ตํ•œ ์žฌ์‚ฌ์šฉ์„ ํ•  ๋•Œ ๋‚˜ํƒ€๋‚˜๋Š” ๋‹จ์ ๋„ ์กด์žฌํ•œ๋‹ค.

    1. ์ƒ์œ„ ํด๋ž˜์Šค(๋ถ€๋ชจ ํด๋ž˜์Šค)์˜ ๋ณ€๊ฒฝ์ด ์–ด๋ ค์›Œ์ง„๋‹ค.

    ๋ถ€๋ชจ ํด๋ž˜์Šค์— ์˜์กดํ•˜๋Š” ์ž์‹ ํด๋ž˜์Šค๊ฐ€ ๋งŽ์„ ๋•Œ, ๋ถ€๋ชจ ํด๋ž˜์Šค์˜ ๋ณ€๊ฒฝ์ด ํ•„์š”ํ•˜๋‹ค๋ฉด?

    ์ด๋ฅผ ์˜์กดํ•˜๋Š” ์ž์‹ ํด๋ž˜์Šค๋“ค์ด ์˜ํ–ฅ์„ ๋ฐ›๊ฒŒ ๋œ๋‹ค.

    1. ๋ถˆํ•„์š”ํ•œ ํด๋ž˜์Šค๊ฐ€ ์ฆ๊ฐ€ํ•  ์ˆ˜ ์žˆ๋‹ค.

    ์œ ์‚ฌ๊ธฐ๋Šฅ ํ™•์žฅ์‹œ, ํ•„์š” ์ด์ƒ์˜ ๋ถˆํ•„์š”ํ•œ ํด๋ž˜์Šค๋ฅผ ๋งŒ๋“ค์–ด์•ผ ํ•˜๋Š” ์ƒํ™ฉ์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค.

    1. ์ƒ์†์ด ์ž˜๋ชป ์‚ฌ์šฉ๋  ์ˆ˜ ์žˆ๋‹ค.

    ๊ฐ™์€ ์ข…๋ฅ˜๊ฐ€ ์•„๋‹Œ ํด๋ž˜์Šค์˜ ๊ตฌํ˜„์„ ์žฌ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด ์ƒ์†์„ ๋ฐ›๊ฒŒ ๋˜๋ฉด, ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค. ์ƒ์† ๋ฐ›๋Š” ํด๋ž˜์Šค๊ฐ€ ๋ถ€๋ชจ ํด๋ž˜์Šค์™€ IS-A ๊ด€๊ณ„๊ฐ€ ์•„๋‹ ๋•Œ ์ด์— ํ•ด๋‹นํ•œ๋‹ค.

    ํ•ด๊ฒฐ์ฑ…์€?

    ๊ฐ์ฒด ์กฐ๋ฆฝ(Composition), ์ปดํฌ์ง€์…˜์ด๋ผ๊ณ  ๋ถ€๋ฅด๊ธฐ๋„ ํ•œ๋‹ค.

    ๊ฐ์ฒด ์กฐ๋ฆฝ์€, ํ•„๋“œ์—์„œ ๋‹ค๋ฅธ ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ๊ตฌํ˜„๋œ๋‹ค.

    ์ƒ์†์— ๋น„ํ•ด ๋น„๊ต์  ๋Ÿฐํƒ€์ž„ ๊ตฌ์กฐ๊ฐ€ ๋ณต์žกํ•ด์ง€๊ณ , ๊ตฌํ˜„์ด ์–ด๋ ค์šด ๋‹จ์ ์ด ์กด์žฌํ•˜์ง€๋งŒ ๋ณ€๊ฒฝ ์‹œ ์œ ์—ฐํ•จ์„ ํ™•๋ณดํ•˜๋Š”๋ฐ ์žฅ์ ์ด ๋งค์šฐ ํฌ๋‹ค.

    ๋”ฐ๋ผ์„œ ๊ฐ™์€ ์ข…๋ฅ˜๊ฐ€ ์•„๋‹Œ ํด๋ž˜์Šค๋ฅผ ์ƒ์†ํ•˜๊ณ  ์‹ถ์„ ๋•Œ๋Š” ๊ฐ์ฒด ์กฐ๋ฆฝ์„ ์šฐ์„ ์ ์œผ๋กœ ์ ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค.

    ๊ทธ๋Ÿผ ์ƒ์†์€ ์–ธ์ œ ์‚ฌ์šฉ?

    • IS-A ๊ด€๊ณ„๊ฐ€ ์„ฑ๋ฆฝํ•  ๋•Œ

    • ์žฌ์‚ฌ์šฉ ๊ด€์ ์ด ์•„๋‹Œ, ๊ธฐ๋Šฅ์˜ ํ™•์žฅ ๊ด€์ ์ผ ๋•Œ

  4. ๋‹คํ˜•์„ฑ(Polymorphism)

    ์„œ๋กœ ๋‹ค๋ฅธ ํด๋ž˜์Šค์˜ ๊ฐ์ฒด๊ฐ€ ๊ฐ™์€ ๋ฉ”์‹œ์ง€๋ฅผ ๋ฐ›์•˜์„ ๋•Œ ๊ฐ์ž์˜ ๋ฐฉ์‹์œผ๋กœ ๋™์ž‘ํ•˜๋Š” ๋Šฅ๋ ฅ

    ๊ฐ์ฒด ์ง€ํ–ฅ์˜ ํ•ต์‹ฌ๊ณผ๋„ ๊ฐ™์€ ๋ถ€๋ถ„์ด๋‹ค.

    ๋‹คํ˜•์„ฑ์€, ์ƒ์†๊ณผ ํ•จ๊ป˜ ํ™œ์šฉํ•  ๋•Œ ํฐ ํž˜์„ ๋ฐœํœ˜ํ•œ๋‹ค. ์ด์™€ ๊ฐ™์€ ๊ตฌํ˜„์€ ์ฝ”๋“œ๋ฅผ ๊ฐ„๊ฒฐํ•˜๊ฒŒ ํ•ด์ฃผ๊ณ , ์œ ์—ฐํ•จ์„ ๊ฐ–์ถ”๊ฒŒ ํ•ด์ค€๋‹ค.

    ์ฆ‰, ๋ถ€๋ชจ ํด๋ž˜์Šค์˜ ๋ฉ”์†Œ๋“œ๋ฅผ ์ž์‹ ํด๋ž˜์Šค๊ฐ€ ์˜ค๋ฒ„๋ผ์ด๋”ฉํ•ด์„œ ์ž์‹ ์˜ ์—ญํ• ์— ๋งž๊ฒŒ ํ™œ์šฉํ•˜๋Š” ๊ฒƒ์ด ๋‹คํ˜•์„ฑ์ด๋‹ค.

    ์ด์ฒ˜๋Ÿผ ๋‹คํ˜•์„ฑ์„ ์‚ฌ์šฉํ•˜๋ฉด, ๊ตฌ์ฒด์ ์œผ๋กœ ํ˜„์žฌ ์–ด๋–ค ํด๋ž˜์Šค ๊ฐ์ฒด๊ฐ€ ์ฐธ์กฐ๋˜๋Š” ์ง€๋Š” ๋ฌด๊ด€ํ•˜๊ฒŒ ํ”„๋กœ๊ทธ๋ž˜๋ฐํ•˜๋Š” ๊ฒƒ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

    ์ƒ์† ๊ด€๊ณ„์— ์žˆ์œผ๋ฉด, ์ƒˆ๋กœ์šด ์ž์‹ ํด๋ž˜์Šค๊ฐ€ ์ถ”๊ฐ€๋˜์–ด๋„ ๋ถ€๋ชจ ํด๋ž˜์Šค์˜ ํ•จ์ˆ˜๋ฅผ ์ฐธ์กฐํ•ด์˜ค๋ฉด ๋˜๊ธฐ ๋•Œ๋ฌธ์— ๋‹ค๋ฅธ ํด๋ž˜์Šค๋Š” ์˜ํ–ฅ์„ ๋ฐ›์ง€ ์•Š๊ฒŒ ๋œ๋‹ค.

โœจ ๊ฐ์ฒด ์ง€ํ–ฅ ์„ค๊ณ„ ๊ณผ์ •

  • ์ œ๊ณตํ•ด์•ผ ํ•  ๊ธฐ๋Šฅ์„ ์ฐพ๊ณ  ์„ธ๋ถ„ํ™”ํ•œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๊ทธ ๊ธฐ๋Šฅ์„ ์•Œ๋งž์€ ๊ฐ์ฒด์— ํ• ๋‹นํ•œ๋‹ค.

  • ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•˜๋Š”๋ฐ ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ์ฒด์— ์ถ”๊ฐ€ํ•œ๋‹ค.

  • ๊ทธ ๋ฐ์ดํ„ฐ๋ฅผ ์ด์šฉํ•˜๋Š” ๊ธฐ๋Šฅ์„ ๋„ฃ๋Š”๋‹ค.

  • ๊ธฐ๋Šฅ์€ ์ตœ๋Œ€ํ•œ ์บก์Аํ™”ํ•˜์—ฌ ๊ตฌํ˜„ํ•œ๋‹ค.

  • ๊ฐ์ฒด ๊ฐ„์— ์–ด๋–ป๊ฒŒ ๋ฉ”์†Œ๋“œ ์š”์ฒญ์„ ์ฃผ๊ณ ๋ฐ›์„ ์ง€ ๊ฒฐ์ •ํ•œ๋‹ค.

โœจ ๊ฐ์ฒด ์ง€ํ–ฅ ์„ค๊ณ„ ์›์น™

SOLID๋ผ๊ณ  ๋ถ€๋ฅด๋Š” 5๊ฐ€์ง€ ์„ค๊ณ„ ์›์น™์ด ์กด์žฌํ•œ๋‹ค.

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

    ํด๋ž˜์Šค๋Š” ๋‹จ ํ•œ ๊ฐœ์˜ ์ฑ…์ž„์„ ๊ฐ€์ ธ์•ผ ํ•œ๋‹ค.

    ํด๋ž˜์Šค๋ฅผ ๋ณ€๊ฒฝํ•˜๋Š” ์ด์œ ๋Š” ๋‹จ ํ•œ๊ฐœ์—ฌ์•ผ ํ•œ๋‹ค.

    ์ด๋ฅผ ์ง€ํ‚ค์ง€ ์•Š์œผ๋ฉด, ํ•œ ์ฑ…์ž„์˜ ๋ณ€๊ฒฝ์— ์˜ํ•ด ๋‹ค๋ฅธ ์ฑ…์ž„๊ณผ ๊ด€๋ จ๋œ ์ฝ”๋“œ์— ์˜ํ–ฅ์ด ๊ฐˆ ์ˆ˜ ์žˆ๋‹ค.

  2. OCP(Open-Closed) - ๊ฐœ๋ฐฉ-ํ์‡„ ์›์น™

    ํ™•์žฅ์—๋Š” ์—ด๋ ค ์žˆ์–ด์•ผ ํ•˜๊ณ , ๋ณ€๊ฒฝ์—๋Š” ๋‹ซํ˜€ ์žˆ์–ด์•ผ ํ•œ๋‹ค.

    ๊ธฐ๋Šฅ์„ ๋ณ€๊ฒฝํ•˜๊ฑฐ๋‚˜ ํ™•์žฅํ•  ์ˆ˜ ์žˆ์œผ๋ฉด์„œ, ๊ทธ ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜๋Š” ์ฝ”๋“œ๋Š” ์ˆ˜์ •ํ•˜์ง€ ์•Š๋Š”๋‹ค.

    ์ด๋ฅผ ์ง€ํ‚ค์ง€ ์•Š์œผ๋ฉด, instanceof์™€ ๊ฐ™์€ ์—ฐ์‚ฐ์ž๋ฅผ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ๋‹ค์šด ์บ์ŠคํŒ…์ด ์ผ์–ด๋‚œ๋‹ค.

  3. LSP(Liskov Substitution) - ๋ฆฌ์Šค์ฝ”ํ”„ ์น˜ํ™˜ ์›์น™

    ์ƒ์œ„ ํƒ€์ž…์˜ ๊ฐ์ฒด๋ฅผ ํ•˜์œ„ ํƒ€์ž…์˜ ๊ฐ์ฒด๋กœ ์น˜ํ™˜ํ•ด๋„, ์ƒ์œ„ ํƒ€์ž…์„ ์‚ฌ์šฉํ•˜๋Š” ํ”„๋กœ๊ทธ๋žจ์€ ์ •์ƒ์ ์œผ๋กœ ๋™์ž‘ํ•ด์•ผ ํ•œ๋‹ค.

    ์ƒ์† ๊ด€๊ณ„๊ฐ€ ์•„๋‹Œ ํด๋ž˜์Šค๋“ค์„ ์ƒ์† ๊ด€๊ณ„๋กœ ์„ค์ •ํ•˜๋ฉด, ์ด ์›์น™์ด ์œ„๋ฐฐ๋œ๋‹ค.

  4. ISP(Interface Segregation) - ์ธํ„ฐํŽ˜์ด์Šค ๋ถ„๋ฆฌ ์›์น™

    ์ธํ„ฐํŽ˜์ด์Šค๋Š” ๊ทธ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ํด๋ผ์ด์–ธํŠธ๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๋ถ„๋ฆฌํ•ด์•ผ ํ•œ๋‹ค.

    ๊ฐ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ํ•„์š”๋กœ ํ•˜๋Š” ์ธํ„ฐํŽ˜์ด์Šค๋“ค์„ ๋ถ„๋ฆฌํ•จ์œผ๋กœ์จ, ๊ฐ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ์ธํ„ฐํŽ˜์ด์Šค์— ๋ณ€๊ฒฝ์ด ๋ฐœ์ƒํ•˜๋”๋ผ๋„ ์˜ํ–ฅ์„ ๋ฐ›์ง€ ์•Š๋„๋ก ๋งŒ๋“ค์–ด์•ผ ํ•œ๋‹ค.

  5. DIP(Dependency Inversion) - ์˜์กด ์—ญ์ „ ์›์น™

    ๊ณ ์ˆ˜์ค€ ๋ชจ๋“ˆ์€ ์ €์ˆ˜์ค€ ๋ชจ๋“ˆ์˜ ๊ตฌํ˜„์— ์˜์กดํ•ด์„œ๋Š” ์•ˆ๋œ๋‹ค.

    ์ €์ˆ˜์ค€ ๋ชจ๋“ˆ์ด ๊ณ ์ˆ˜์ค€ ๋ชจ๋“ˆ์—์„œ ์ •์˜ํ•œ ์ถ”์ƒ ํƒ€์ž…์— ์˜์กดํ•ด์•ผ ํ•œ๋‹ค.

    ์ฆ‰, ์ €์ˆ˜์ค€ ๋ชจ๋“ˆ์ด ๋ณ€๊ฒฝ๋ผ๋„ ๊ณ ์ˆ˜์ค€ ๋ชจ๋“ˆ์€ ๋ณ€๊ฒฝํ•  ํ•„์š”๊ฐ€ ์—†๋Š” ๊ฒƒ์ด๋‹ค.

ํ•จ์ˆ˜ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ

์ˆœ์ˆ˜ ํ•จ์ˆ˜๋ฅผ ์กฐํ•ฉํ•˜๊ณ  ๊ณต์œ  ์ƒํƒœ, ๋ณ€๊ฒฝ ๊ฐ€๋Šฅํ•œ ๋ฐ์ดํ„ฐ ๋ฐ ๋ถ€์ž‘์šฉ์„ ํ”ผํ•ด ์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ๋งŒ๋“œ๋Š” ํ”„๋กœ์„ธ์Šค

https://user-images.githubusercontent.com/6733004/46247710-5ce5fb00-c44a-11e8-9400-16dd44626820.png

'์„ ์–ธํ˜•' ํ”„๋กœ๊ทธ๋ž˜๋ฐ์œผ๋กœ, ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์ƒํƒœ๋Š” ์ˆœ์ˆ˜ ํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด ์ „๋‹ฌ๋œ๋‹ค.

์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์ƒํƒœ๊ฐ€ ์ผ๋ฐ˜์ ์œผ๋กœ ๊ณต์œ ๋˜๊ณ  ๊ฐ์ฒด์˜ ๋ฉ”์„œ๋“œ์™€ ํ•จ๊ป˜ ๋ฐฐ์น˜๋˜๋Š” OOP์™€๋Š” ๋Œ€์กฐ๋˜๋Š” ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋ฐฉ์‹

  • ๋ช…๋ นํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ(์ ˆ์ฐจ์ง€ํ–ฅ, ๊ฐ์ฒด์ง€ํ–ฅ)

    ์ƒํƒœ์™€ ์ƒํƒœ๋ฅผ ๋ณ€๊ฒฝ์‹œํ‚ค๋Š” ๊ด€์ ์—์„œ ์—ฐ์‚ฐ์„ ์„ค๋ช…ํ•˜๋Š” ๋ฐฉ์‹

    ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ๋ช…์‹œํ•˜๊ณ , ๋ชฉํ‘œ๋Š” ๋ช…์‹œํ•˜์ง€ ์•Š์Œ

  • ์„ ์–ธํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ

    How๋ณด๋‹ค๋Š” What์„ ์„ค๋ช…ํ•˜๋Š” ๋ฐฉ์‹ (์–ด๋–ป๊ฒŒ๋ณด๋‹จ ๋ฌด์—‡์„)

    ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ๋ช…์‹œํ•˜์ง€ ์•Š๊ณ  ๋ชฉํ‘œ๋งŒ ๋ช…์‹œํ•จ

๋ช…๋ นํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ์€ ์–ด๋–ป๊ฒŒ ํ• ์ง€ ํ‘œํ˜„ํ•˜๊ณ , ์„ ์–ธํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ์€ ๋ฌด์—‡์„ ํ•  ๊ฑด์ง€ ํ‘œํ˜„ํ•œ๋‹ค.

ํ•จ์ˆ˜ํ˜• ์ฝ”๋“œ๋Š” ๋ช…๋ นํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ์ด๋‚˜ OOP ์ฝ”๋“œ๋ณด๋‹ค ๋” ๊ฐ„๊ฒฐํ•˜๊ณ  ์˜ˆ์ธก๊ฐ€๋Šฅํ•˜์—ฌ ํ…Œ์ŠคํŠธํ•˜๋Š” ๊ฒƒ์ด ์‰ฝ๋‹ค.

(ํ•˜์ง€๋งŒ ์ต์ˆ™์น˜ ์•Š์œผ๋ฉด ๋” ๋ณต์žกํ•ด๋ณด์ด๊ณ  ์ดํ•ดํ•˜๊ธฐ ์–ด๋ ค์›€)

ํ•จ์ˆ˜ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ์€ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๋‚˜ ๋ฐฉ์‹์„ ๋ฐฐ์šฐ๋Š” ๊ฒƒ์ด ์•„๋‹Œ, ํ•จ์ˆ˜๋กœ ํ”„๋กœ๊ทธ๋ž˜๋ฐํ•˜๋Š” ์‚ฌ๊ณ ๋ฅผ ๋ฐฐ์šฐ๋Š” ๊ฒƒ์ด๋‹ค.

๊ธฐ์กด์˜ ์‚ฌ๊ณ ๋ฐฉ์‹์„ ์ „ํ™˜ํ•˜์—ฌ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ๋” ์œ ์—ฐํ•˜๊ฒŒ ๋ฌธ์ œํ•ด๊ฒฐ ํ•˜๋„๋ก ์ ‘๊ทผํ•˜๋Š” ๊ฒƒ

โœจ ํ•จ์ˆ˜ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ์˜ ์˜๋ฏธ๋ฅผ ํŒŒ์•…ํ•˜๊ธฐ ์ „ ๊ผญ ์•Œ์•„์•ผ ํ•  ๊ฒƒ๋“ค

  • ์ˆœ์ˆ˜ ํ•จ์ˆ˜ (Pure functions)

    ์ž…์ถœ๋ ฅ์ด ์ˆœ์ˆ˜ํ•ด์•ผํ•จ : ๋ฐ˜๋“œ์‹œ ํ•˜๋‚˜ ์ด์ƒ์˜ ์ธ์ž๋ฅผ ๋ฐ›๊ณ , ๋ฐ›์€ ์ธ์ž๋ฅผ ์ฒ˜๋ฆฌํ•ด ๋ฐ˜๋“œ์‹œ ๊ฒฐ๊ณผ๋ฌผ์„ ๋Œ๋ ค์ค˜์•ผ ํ•จ. ์ธ์ž ์™ธ ๋‹ค๋ฅธ ๋ณ€์ˆ˜ ์‚ฌ์šฉ ๊ธˆ์ง€

  • ํ•ฉ์„ฑ ํ•จ์ˆ˜ (Function composition)

  • ๊ณต์œ ์ƒํƒœ ํ”ผํ•˜๊ธฐ (Avoid shared state)

  • ์ƒํƒœ๋ณ€ํ™” ํ”ผํ•˜๊ธฐ (Avoid mutating state)

  • ๋ถ€์ž‘์šฉ ํ”ผํ•˜๊ธฐ (Avoid side effects)

    ํ”„๋กœ๊ทธ๋ž˜๋จธ๊ฐ€ ๋ฐ”๊พธ๊ณ ์ž ํ•˜๋Š” ๋ณ€์ˆ˜ ์™ธ์—๋Š” ๋ณ€๊ฒฝ๋˜๋ฉด ์•ˆ๋จ. ์›๋ณธ ๋ฐ์ดํ„ฐ๋Š” ์ ˆ๋Œ€ ๋ถˆ๋ณ€!

๋Œ€ํ‘œ์ ์ธ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ํ•จ์ˆ˜ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ ํ•จ์ˆ˜ : map, filter, reduce

โœจ ํ•จ์ˆ˜ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์˜ˆ์‹œ

var arr = [1, 2, 3, 4, 5];

var map = arr.map(function(x) { return x * 2; }); // [2, 4, 6, 8, 10]

arr์„ ๋„ฃ์–ด์„œ map์„ ์–ป์—ˆ์Œ. arr์„ ์‚ฌ์šฉํ–ˆ์ง€๋งŒ ๊ฐ’์€ ๋ณ€ํ•˜์ง€ ์•Š์•˜๊ณ  map์ด๋ผ๋Š” ๊ฒฐ๊ณผ๋ฅผ ๋‚ด๊ณ  ์–ด๋– ํ•œ ๋ถ€์ž‘์šฉ๋„ ๋‚ณ์ง€ ์•Š์Œ

์ด๋Ÿฐ ๊ฒƒ์ด ๋ฐ”๋กœ ํ•จ์ˆ˜ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ์˜ ์ˆœ์ˆ˜ํ•จ์ˆ˜๋ผ๊ณ  ๋งํ•œ๋‹ค.

var arr = [1, 2, 3, 4, 5];

var condition = function(x) { return x % 2 === 0; }

var ex = function(array) { return array.filter(condition); };

ex(arr); // [2, 4]

์ด๋Š” ์ˆœ์ˆ˜ํ•จ์ˆ˜๊ฐ€ ์•„๋‹ˆ๋‹ค. ์ด์œ ๋Š” ex ๋ฉ”์†Œ๋“œ์—์„œ ์ธ์ž๊ฐ€ ์•„๋‹Œ condition์„ ์‚ฌ์šฉํ–ˆ๊ธฐ ๋•Œ๋ฌธ.

์ˆœ์ˆ˜ํ•จ์ˆ˜๋กœ ๊ณ ์น˜๋ฉด ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

var ex = function(array, cond) { return array.filter(cond); }; ex(arr, condition);

์ˆœ์ˆ˜ํ•จ์ˆ˜๋กœ ๋งŒ๋“ค๋ฉด, ์—๋Ÿฌ๋ฅผ ์ถ”์ ํ•˜๋Š” ๊ฒƒ์ด ์‰ฌ์›Œ์ง„๋‹ค. ์ธ์ž์— ๋ฌธ์ œ๊ฐ€ ์žˆ๊ฑฐ๋‚˜ ํ•จ์ˆ˜ ๋‚ด๋ถ€์— ๋ฌธ์ œ๊ฐ€ ์žˆ๊ฑฐ๋‚˜ ๋‘˜ ์ค‘ ํ•˜๋‚˜์ผ ์ˆ˜ ๋ฐ–์— ์—†๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

โœจ Java์—์„œ์˜ ํ•จ์ˆ˜ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ

Java 8์ด ๋ฆด๋ฆฌ์ฆˆ๋˜๋ฉด์„œ, Java์—์„œ๋„ ํ•จ์ˆ˜ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ์ด ๊ฐ€๋Šฅํ•ด์กŒ๋‹ค.

ํ•จ์ˆ˜ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ : ๋ถ€์ˆ˜ํšจ๊ณผ๋ฅผ ์—†์• ๊ณ  ์ˆœ์ˆ˜ ํ•จ์ˆ˜๋ฅผ ๋งŒ๋“ค์–ด ๋ชจ๋“ˆํ™” ์ˆ˜์ค€์„ ๋†’์ด๋Š” ํ”„๋กœ๊ทธ๋ž˜๋ฐ ํŒจ๋Ÿฌ๋‹ค์ž„

๋ถ€์ˆ˜ํšจ๊ณผ : ์ฃผ์–ด์ง„ ๊ฐ’ ์ด์™ธ์˜ ์™ธ๋ถ€ ๋ณ€์ˆ˜ ๋ฐ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์‹คํ–‰์— ์˜ํ–ฅ์„ ๋ผ์น˜์ง€ ์•Š์•„์•ผ ๋œ๋‹ค๋Š” ์˜๋ฏธ

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

Java์˜ ๊ฐ์ฒด ์ง€ํ–ฅ์€ ๋ช…๋ นํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ์ด๊ณ , ํ•จ์ˆ˜ํ˜•์€ ์„ ์–ธํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ์ด๋‹ค.

๋‘˜์˜ ์ฐจ์ด๋Š” ๋ฌธ์ œํ•ด๊ฒฐ์˜ ๊ด€์ 

์—ฌํƒœ๊นŒ์ง€ ์šฐ๋ฆฌ๋Š” Java์—์„œ ๊ฐ์ฒด์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ํ•  ๋•Œ '๋ฐ์ดํ„ฐ๋ฅผ ์–ด๋–ป๊ฒŒ ์ฒ˜๋ฆฌํ•  ์ง€์— ๋Œ€ํ•ด ๋ช…๋ น์„ ํ†ตํ•ด ํ•ด๊ฒฐ'ํ–ˆ๋‹ค.

ํ•จ์ˆ˜ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ์€ ์„ ์–ธ์  ํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด '๋ฌด์—‡์„ ํ’€์–ด๋‚˜๊ฐ€์•ผํ• ์ง€ ๊ฒฐ์ •'ํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

โœจ Java์—์„œ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ํ•จ์ˆ˜ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ

  • ๋žŒ๋‹ค์‹

  • stream api

  • ํ•จ์ˆ˜ํ˜• ์ธํ„ฐํŽ˜์ด์Šค

Java 8์—๋Š” Stream API๊ฐ€ ์ถ”๊ฐ€๋˜์—ˆ๋‹ค.

import java.util.Arrays; 
import java.util.List;
public class stream {
    public static void main(String[] args) {
    	List<String> myList = Arrays.asList("a", "b", "c", "d", "e");
    
        // ๊ธฐ์กด๋ฐฉ์‹
        for(int i=0; i<myList.size(); i++){
            String s = myList.get(i);
            if(s.startsWith("c")){
                System.out.println(s.toUpperCase());
            }
        }
    
        // stream API๋ฅผ ์ด์šฉํ•œ ๋ฐฉ์‹
        myList.stream()
              .filter(s -> s.startsWith("c"))
              .map(String::toUpperCase)
              .forEach(System.out::println);
    
    }
}

๋ญ๊ฐ€ ๋‹ค๋ฅธ๊ฑด์ง€ ํฌ๊ฒŒ ์™€๋‹ฟ์ง€ ์•Š์„ ์ˆ˜ ์žˆ์ง€๋งŒ, ์ค‘์š”ํ•œ๊ฑด ํ”„๋กœ๊ทธ๋ž˜๋ฐ์˜ ํŒจ๋Ÿฌ๋‹ค์ž„ ๋ณ€ํ™”๋ผ๋Š” ๊ฒƒ์ด๋‹ค.

๋‹จ์ˆœํžˆ ํ•จ์ˆ˜๋ฅผ ์„ ์–ธํ•ด์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๋‚ด๊ฐ€ ์›ํ•˜๋Š” ๋ฐฉํ–ฅ์œผ๋กœ ์ฒ˜๋ฆฌํ•ด๋‚˜๊ฐ€๋Š” ํ•จ์ˆ˜ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋ฐฉ์‹์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค. ํ•œ๋ˆˆ์— ๋ณด๋”๋ผ๋„ ํ•จ์ˆ˜ํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ์€ ๋‚ด๊ฐ€ ๋ฌด์—‡์„ ๊ตฌํ˜„ํ–ˆ๋Š”์ง€ ๋ช…ํ™•ํžˆ ์•Œ ์ˆ˜ ์žˆ๋‹ค. (๋ฌด์Šจ ํ•จ์ˆ˜์ธ์ง€ ์‚ฌ์ „ํ•™์Šต์ด ํ•„์š”ํ•œ ์ ์ด ์žˆ์Œ)

์„œ๋“œ ํŒŒํ‹ฐ๋ž€ ?

๊ฐ„ํ˜น ์จ๋“œ ํŒŒํ‹ฐ๋ผ๋Š” ๋ง์„ ์ข…์ข… ๋ณผ ์ˆ˜ ์žˆ๋‹ค. ๊ฒฝ์ œ ์šฉ์–ด๊ฐ€ IT์—์„œ ์“ฐ์ด๋Š” ๋ถ€๋ถ„์ด๋‹ค.

โœจ 3rd party

ํ•˜๋“œ์›จ์–ด ์ƒ์‚ฐ์ž์™€ ์†Œํ”„ํŠธ์›จ์–ด ๊ฐœ๋ฐœ์ž์˜ ๊ด€๊ณ„๋ฅผ ๋‚˜ํƒ€๋‚ผ ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค.

๊ทธ ์ค‘์—์„œ ์„œ๋“œํŒŒํ‹ฐ๋Š”, ํ”„๋กœ๊ทธ๋ž˜๋ฐ์„ ๋„์™€์ฃผ๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๋งŒ๋“œ๋Š” ์™ธ๋ถ€ ์ƒ์‚ฐ์ž๋ฅผ ๋œปํ•œ๋‹ค.

ex) ๊ฒŒ์ž„์ œ์กฐ์‚ฌ์™€ ์†Œ๋น„์ž๋ฅผ ์—ฐ๊ฒฐํ•ด์ฃผ๋Š” ๊ฒŒ์ž„ํšŒ์‚ฌ(ํผํ”Œ๋ฆฌ์‹ฑ) ์Šค๋งˆ์ผ๊ฒŒ์ดํŠธ์™€ ๊ฐ™์€ ํšŒ์‚ฌ

โœจ ๊ฐœ๋ฐœ์ž ์ธก๋ฉด์œผ๋กœ ๋ณด๋ฉด?

  • ํ•˜๋“œ์›จ์–ด ์ƒ์‚ฐ์ž๊ฐ€ '์ง์ ‘' ์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ๊ฐœ๋ฐœํ•˜๋Š” ๊ฒฝ์šฐ : ํผ์ŠคํŠธ ํŒŒํ‹ฐ ๊ฐœ๋ฐœ์ž

  • ํ•˜๋“œ์›จ์–ด ์ƒ์‚ฐ์ž์ธ ๊ธฐ์—…๊ณผ ์ž์‚ฌ๊ฐ„์˜ ๊ด€๊ณ„(๋˜๋Š” ํ•˜์ฒญ์—…์ฒด)์— ์†ํ•œ ์†Œํ”„ํŠธ์›จ์–ด ๊ฐœ๋ฐœ์ž : ์„ธ์ปจ๋“œ ํŒŒํ‹ฐ ๊ฐœ๋ฐœ์ž

  • ์•„๋ฌด ๊ด€๋ จ์—†๋Š” ์ œ3์ž ์†Œํ”„ํŠธ์›จ์–ด ๊ฐœ๋ฐœ์ž : ์„œ๋“œ ํŒŒํ‹ฐ ๊ฐœ๋ฐœ์ž

์ฃผ๋กœ ํŽธํ•œ ๊ฐœ๋ฐœ์„ ์œ„ํ•ด ํ”Œ๋Ÿฌ๊ทธ์ธ์ด๋‚˜ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ํ˜น์€ ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ์‚ฌ์šฉํ•˜๋Š”๋ฐ, ์ด์ฒ˜๋Ÿผ ์ œ 3์ž๋กœ ์ค‘๊ฐ„๋‹ค๋ฆฌ ์—ญํ• ๋กœ ๋„์›€์„ ์ฃผ๋Š” ๊ฒƒ์ด ์„œ๋“œ ํŒŒํ‹ฐ๋กœ ๋ณผ ์ˆ˜ ์žˆ๊ณ , ์ด๋Ÿฐ ๊ฒƒ์„ ๋งŒ๋“œ๋Š” ๊ฐœ๋ฐœ์ž๊ฐ€ ์„œ๋“œ ํŒŒํ‹ฐ ๊ฐœ๋ฐœ์ž๋‹ค.

MSA

MSA๋Š” ์†Œํ”„ํŠธ์›จ์–ด ๊ฐœ๋ฐœ ๊ธฐ๋ฒ• ์ค‘ ํ•˜๋‚˜๋กœ, ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋‹จ์œ„๋ฅผ '๋ชฉ์ '์œผ๋กœ ๋‚˜๋ˆ„๋Š” ๊ฒƒ์ด ํ•ต์‹ฌ

โœจ Monolithic vs MSA

MSA๊ฐ€ ๋„์ž…๋˜๊ธฐ ์ „, Monolithic ์•„ํ‚คํ…์ฒ˜ ๋ฐฉ์‹์œผ๋กœ ๊ฐœ๋ฐœ์ด ์ด๋ฃจ์–ด์กŒ๋‹ค. Monolithic์˜ ์‚ฌ์ „์  ์ •์˜์— ๋งž๊ฒŒ 'ํ•œ ๋ฉ์–ด๋ฆฌ'์— ํ•ด๋‹นํ•˜๋Š” ๊ตฌ์กฐ๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ๋‹ค. ๋ชจ๋“  ๊ธฐ๋Šฅ์„ ํ•˜๋‚˜์˜ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ๊ตฌ์„ฑํ•ด ์šด์˜ํ•œ๋‹ค. ๋”ฐ๋ผ์„œ ๊ฐœ๋ฐœ์„ ํ•˜๊ฑฐ๋‚˜ ํ™˜๊ฒฝ์„ค์ •์— ์žˆ์–ด์„œ ๊ฐ„๋‹จํ•œ ์žฅ์ ์ด ์žˆ์–ด ์ž‘์€ ์‚ฌ์ด์ฆˆ์˜ ํ”„๋กœ์ ํŠธ์—์„œ๋Š” ์œ ๋ฆฌํ•˜์ง€๋งŒ, ์‹œ์Šคํ…œ์ด ์ ์  ํ™•์žฅ๋˜๊ฑฐ๋‚˜ ํฐ ํ”„๋กœ์ ํŠธ์—์„œ๋Š” ๋‹จ์ ๋“ค์ด ์กด์žฌํ•œ๋‹ค.

  • ๋นŒ๋“œ/ํ…Œ์ŠคํŠธ ์‹œ๊ฐ„์˜ ์ฆ๊ฐ€ : ํ•˜๋‚˜๋ฅผ ์ˆ˜์ •ํ•ด๋„ ์‹œ์Šคํ…œ ์ „์ฒด๋ฅผ ๋นŒ๋“œํ•ด์•ผ ํ•จ. ์ฆ‰, ์œ ์ง€๋ณด์ˆ˜๊ฐ€ ํž˜๋“ค๋‹ค

  • ์ž‘์€ ๋ฌธ์ œ๊ฐ€ ์‹œ์Šคํ…œ ์ „์ฒด์— ๋ฌธ์ œ๋ฅผ ์ผ์œผํ‚ด : ๋งŒ์•ฝ ํ•˜๋‚˜์˜ ์„œ๋น„์Šค ๋ถ€๋ถ„์— ํŠธ๋ž˜ํ”ฝ ๋ฌธ์ œ๋กœ ์„œ๋ฒ„๊ฐ€ ๋‹ค์šด๋˜๋ฉด, ๋ชจ๋“  ์„œ๋น„์Šค ์ด์šฉ์ด ๋ถˆ๊ฐ€๋Šฅํ•  ๊ฒƒ์ด๋‹ค.

  • ํ™•์žฅ์„ฑ์— ๋ถˆ๋ฆฌ : ์„œ๋น„์Šค ๋งˆ๋‹ค ์ด์šฉ๋ฅ ์ด ๋‹ค๋ฅผ ์ˆ˜ ์žˆ๋‹ค. ํ•˜๋‚˜์˜ ์„œ๋น„์Šค๋ฅผ ํ™•์žฅํ•˜๊ธฐ ์œ„ํ•ด ์ „์ฒด ํ”„๋กœ์ ํŠธ๋ฅผ ํ™•์žฅํ•ด์•ผ ํ•œ๋‹ค.

MSA๋Š” ์ข€ ๋” ์„ธ๋ถ„ํ™” ์‹œํ‚จ ์•„ํ‚คํ…์ฒ˜๋ผ๊ณ  ๋งํ•  ์ˆ˜ ์žˆ๋‹ค. ํ•œ๊บผ๋ฒˆ์— ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ๊ตฌ์„ฑํ•˜๋˜ Monolithic ๋ฐฉ์‹๊ณผ๋Š” ๋‹ค๋ฅด๊ฒŒ ๊ธฐ๋Šฅ(๋ชฉ์ )๋ณ„๋กœ ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋‚˜๋ˆ„๊ณ  ์กฐํ•ฉํ•  ์ˆ˜ ์žˆ๋„๋ก ๊ตฌ์ถ•ํ•œ๋‹ค.

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

์ฆ‰, ์„œ๋น„์Šค ๋ณ„๋กœ ๊ฐœ๋ฐœํŒ€์ด ๊พธ๋ ค์ง€๋ฉด ๋‹ค๋ฅธ ํŒ€๊ณผ ์˜์กด์—†์ด ํŒ€ ๋‚ด์—์„œ ํ”ผ๋“œ๋ฐฑ์„ ๋น ๋ฅด๊ฒŒ ํ•  ์ˆ˜ ์žˆ๊ณ , ๋น„๊ต์  ์œ ์—ฐํ•˜๊ฒŒ ์šด์˜์ด ๊ฐ€๋Šฅํ•  ๊ฒƒ์ด๋‹ค.

์ข‹์€ ์ ๋งŒ ์žˆ์ง€๋Š” ์•Š๋‹ค. MSA๋Š” ์„œ๋น„์Šค ๋ณ„๋กœ ํ˜ธ์ถœํ•  ๋•Œ API๋กœ ํ†ต์‹ ํ•˜๋ฏ€๋กœ ์†๋„๊ฐ€ ๋А๋ฆฌ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์„œ๋น„์Šค ๋ณ„๋กœ ํ†ต์‹ ์— ๋งž๋Š” ๋ฐ์ดํ„ฐ๋กœ ๋งž์ถ”๋Š” ๊ณผ์ •์ด ํ•„์š”ํ•˜๊ธฐ๋„ ํ•˜๋‹ค. Monolithic ๋ฐฉ์‹์€ ํ•˜๋‚˜์˜ ํ”„๋กœ์„ธ์Šค ๋‚ด์—์„œ ์ง„ํ–‰๋˜๊ธฐ ๋•Œ๋ฌธ์— ์†๋„ ๋ฉด์—์„œ๋Š” MSA๋ณด๋‹ค ํ›จ์”ฌ ๋น ๋ฅผ ๊ฒƒ์ด๋‹ค. ๋˜ํ•œ, MSA๋Š” DB ๋˜ํ•œ ๊ฐœ๋ณ„์ ์œผ๋กœ ์šด์˜๋˜๊ธฐ ๋•Œ๋ฌธ์— ํŠธ๋žœ์žญ์…˜์œผ๋กœ ๋ฌถ๊ธฐ ํž˜๋“  ์ ๋„ ์žˆ๋‹ค.

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

DDD

reference

CQRS

CQRS๋Š” ์ •๋ณด๋ฅผ ์—…๋ฐ์ดํŠธ ํ• ๋•Œ์™€ ์กฐํšŒํ•  ๋•Œ ๋‹ค๋ฅธ ๋ชจ๋ธ์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ๊ฐ€์žฅ ํ•ต์‹ฌ์ด๋‹ค.

์ข‹์€ ์ฝ”๋“œ๋ž€?

โ€˜์ข‹์€ ์ฝ”๋“œ๋ž€?โ€˜์ด๋ผ๊ณ  ๊ตฌ๊ธ€๋งํ•ด๋ณด๋ฉด ๋งŽ์€ ๊ฒ€์ƒ‰ ๊ฒฐ๊ณผ๊ฐ€ ๋‚˜์˜จ๋‹ค. ๋‚˜๋„ ๊ทธ๋ ‡๊ณ  ๋‹ค๋“ค ๊ถ๊ธˆํ–ˆ๋˜๋“ฏํ•˜๋‹ค. โ€˜์ข‹์€ ์ฝ”๋“œโ€™๋ž€ ๋…€์„์€ ์ •์ฒด๋„, ์‹ค์ฒด๋„ ์—†์ด ์ด ์„ธ์ƒ์— ๋– ๋Œ๊ณ  ์žˆ๋‹ค. ๋ชจ๋‘๊ฐ€ โ€˜์ข‹์€ ์ฝ”๋“œโ€™์˜ ๊ธฐ์ค€์ด ์กฐ๊ธˆ์”ฉ ๋‹ค๋ฅด๊ณ  ๊ฐ๊ฐ์˜ ๊ฒฝํ—˜์„ ๊ธฐ๋ฐ˜์œผ๋กœ ์ข‹์€ ์ฝ”๋“œ๋ฅผ ์ •์˜ํ•˜๊ณ  ์žˆ๋‹ค. ์„ธ๊ฐ„์— ์ข‹์€ ์ฝ”๋“œ์˜ ์ •์˜๋Š” ์ •๋ง ๋งŽ๋‹ค.

  • ์ฝ๊ธฐ ์‰ฌ์šด ์ฝ”๋“œ

  • ์ค‘๋ณต์ด ์—†๋Š” ์ฝ”๋“œ

  • ํ…Œ์ŠคํŠธ๊ฐ€ ์šฉ์ดํ•œ ์ฝ”๋“œ

RESTful API๋ž€ ?

์šฐ์„ , ์œ„ํ‚ค๋ฐฑ๊ณผ์˜ ์ •์˜๋ฅผ ์š”์•ฝํ•ด๋ณด์ž๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

์›”๋“œ ์™€์ด๋“œ ์›น(World Wide Web a.k.a WWW)๊ณผ ๊ฐ™์€ ๋ถ„์‚ฐ ํ•˜์ดํผ๋ฏธ๋””์–ด ์‹œ์Šคํ…œ์„ ์œ„ํ•œ ์†Œํ”„ํŠธ์›จ์–ด ์•„ํ‚คํ…์ฒ˜์˜ ํ•œ ํ˜•์‹์œผ๋กœ ์ž์›์„ ์ •์˜ํ•˜๊ณ  ์ž์›์— ๋Œ€ํ•œ ์ฃผ์†Œ๋ฅผ ์ง€์ •ํ•˜๋Š” ๋ฐฉ๋ฒ• ์ „๋ฐ˜์— ๋Œ€ํ•œ ํŒจํ„ด

REST๋ž€, REpresentational State Transfer ์˜ ์•ฝ์ž์ด๋‹ค. ์—ฌ๊ธฐ์— ~ful ์ด๋ผ๋Š” ํ˜•์šฉ์‚ฌํ˜• ์–ด๋ฏธ๋ฅผ ๋ถ™์—ฌ ~ํ•œ API ๋ผ๋Š” ํ‘œํ˜„์œผ๋กœ ์‚ฌ์šฉ๋œ๋‹ค. ์ฆ‰, REST ์˜ ๊ธฐ๋ณธ ์›์น™์„ ์„ฑ์‹คํžˆ ์ง€ํ‚จ ์„œ๋น„์Šค ๋””์ž์ธ์€ 'RESTful'ํ•˜๋‹ค๋ผ๊ณ  ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค.

REST๊ฐ€ ๋””์ž์ธ ํŒจํ„ด์ด๋‹ค, ์•„ํ‚คํ…์ฒ˜๋‹ค ๋งŽ์€ ์ด์•ผ๊ธฐ๊ฐ€ ์กด์žฌํ•˜๋Š”๋ฐ, ํ•˜๋‚˜์˜ ์•„ํ‚คํ…์ฒ˜๋กœ ๋ณผ ์ˆ˜ ์žˆ๋‹ค. ์ข€ ๋” ์ •ํ™•ํ•œ ํ‘œํ˜„์œผ๋กœ ๋งํ•˜์ž๋ฉด, REST ๋Š” Resource Oriented Architecture ์ด๋‹ค. API ์„ค๊ณ„์˜ ์ค‘์‹ฌ์— ์ž์›(Resource)์ด ์žˆ๊ณ  HTTP Method ๋ฅผ ํ†ตํ•ด ์ž์›์„ ์ฒ˜๋ฆฌํ•˜๋„๋ก ์„ค๊ณ„ํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

โœจ REST 6 ๊ฐ€์ง€ ์›์น™

  • Uniform Interface

  • Stateless

  • Caching

  • Client-Server

  • Hierarchical system

  • Code on demandcf) ๋ณด๋‹ค ์ž์„ธํ•œ ๋‚ด์šฉ์— ๋Œ€ํ•ด์„œ๋Š” Reference ๋ฅผ ์ฐธ๊ณ ํ•ด์ฃผ์„ธ์š”.

โœจ RESTful ํ•˜๊ฒŒ API ๋ฅผ ๋””์ž์ธ ํ•œ๋‹ค๋Š” ๊ฒƒ์€ ๋ฌด์—‡์„ ์˜๋ฏธํ•˜๋Š”๊ฐ€.(์š”์•ฝ)

  1. ๋ฆฌ์†Œ์Šค ์™€ ํ–‰์œ„ ๋ฅผ ๋ช…์‹œ์ ์ด๊ณ  ์ง๊ด€์ ์œผ๋กœ ๋ถ„๋ฆฌํ•œ๋‹ค.

  • ๋ฆฌ์†Œ์Šค๋Š” URI๋กœ ํ‘œํ˜„๋˜๋Š”๋ฐ ๋ฆฌ์†Œ์Šค๊ฐ€ ๊ฐ€๋ฆฌํ‚ค๋Š” ๊ฒƒ์€ ๋ช…์‚ฌ๋กœ ํ‘œํ˜„๋˜์–ด์•ผ ํ•œ๋‹ค.

  • ํ–‰์œ„๋Š” HTTP Method๋กœ ํ‘œํ˜„ํ•˜๊ณ , GET(์กฐํšŒ), POST(์ƒ์„ฑ), PUT(๊ธฐ์กด entity ์ „์ฒด ์ˆ˜์ •), PATCH(๊ธฐ์กด entity ์ผ๋ถ€ ์ˆ˜์ •), DELETE(์‚ญ์ œ)์„ ๋ถ„๋ช…ํ•œ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•œ๋‹ค.

  1. Message ๋Š” Header ์™€ Body ๋ฅผ ๋ช…ํ™•ํ•˜๊ฒŒ ๋ถ„๋ฆฌํ•ด์„œ ์‚ฌ์šฉํ•œ๋‹ค.

  • Entity ์— ๋Œ€ํ•œ ๋‚ด์šฉ์€ body ์— ๋‹ด๋Š”๋‹ค.

  • ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„œ๋ฒ„๊ฐ€ ํ–‰๋™ํ•  ํŒ๋‹จ์˜ ๊ทผ๊ฑฐ๊ฐ€ ๋˜๋Š” ์ปจํŠธ๋กค ์ •๋ณด์ธ API ๋ฒ„์ „ ์ •๋ณด, ์‘๋‹ต๋ฐ›๊ณ ์ž ํ•˜๋Š” MIME ํƒ€์ž… ๋“ฑ์€ header ์— ๋‹ด๋Š”๋‹ค.

  • header ์™€ body ๋Š” http header ์™€ http body ๋กœ ๋‚˜๋ˆŒ ์ˆ˜๋„ ์žˆ๊ณ , http body ์— ๋“ค์–ด๊ฐ€๋Š” json ๊ตฌ์กฐ๋กœ ๋ถ„๋ฆฌํ•  ์ˆ˜๋„ ์žˆ๋‹ค.

  1. API ๋ฒ„์ „์„ ๊ด€๋ฆฌํ•œ๋‹ค.

  • ํ™˜๊ฒฝ์€ ํ•ญ์ƒ ๋ณ€ํ•˜๊ธฐ ๋•Œ๋ฌธ์— API ์˜ signature ๊ฐ€ ๋ณ€๊ฒฝ๋  ์ˆ˜๋„ ์žˆ์Œ์— ์œ ์˜ํ•˜์ž.

  • ํŠน์ • API ๋ฅผ ๋ณ€๊ฒฝํ•  ๋•Œ๋Š” ๋ฐ˜๋“œ์‹œ ํ•˜์œ„ํ˜ธํ™˜์„ฑ์„ ๋ณด์žฅํ•ด์•ผ ํ•œ๋‹ค.

  1. ์„œ๋ฒ„์™€ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๊ฐ™์€ ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•ด์„œ ์š”์ฒญํ•˜๋„๋ก ํ•œ๋‹ค.

  • ๋ธŒ๋ผ์šฐ์ €๋Š” form-data ํ˜•์‹์˜ submit ์œผ๋กœ ๋ณด๋‚ด๊ณ  ์„œ๋ฒ„์—์„œ๋Š” json ํ˜•ํƒœ๋กœ ๋ณด๋‚ด๋Š” ์‹์˜ ๋ถ„๋ฆฌ๋ณด๋‹ค๋Š” json ์œผ๋กœ ๋ณด๋‚ด๋“ , ๋‘˜ ๋‹ค form-data ํ˜•์‹์œผ๋กœ ๋ณด๋‚ด๋“  ํ•˜๋‚˜๋กœ ํ†ต์ผํ•œ๋‹ค.

  • ๋‹ค๋ฅธ ๋ง๋กœ ํ‘œํ˜„ํ•˜์ž๋ฉด URI ๊ฐ€ ํ”Œ๋žซํผ ์ค‘๋ฆฝ์ ์ด์–ด์•ผ ํ•œ๋‹ค.

โœจ ์–ด๋– ํ•œ ์žฅ์ ์ด ์กด์žฌํ•˜๋Š”๊ฐ€?

  1. Open API ๋ฅผ ์ œ๊ณตํ•˜๊ธฐ ์‰ฝ๋‹ค

  2. ๋ฉ€ํ‹ฐํ”Œ๋žซํผ ์ง€์› ๋ฐ ์—ฐ๋™์ด ์šฉ์ดํ•˜๋‹ค.

  3. ์›ํ•˜๋Š” ํƒ€์ž…์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ  ๋ฐ›์„ ์ˆ˜ ์žˆ๋‹ค.

  4. ๊ธฐ์กด ์›น ์ธํ”„๋ผ(HTTP)๋ฅผ ๊ทธ๋Œ€๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

โœจ ๋‹จ์ ์€ ๋ญ๊ฐ€ ์žˆ์„๊นŒ?

  1. ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ฉ”์†Œ๋“œ๊ฐ€ 4 ๊ฐ€์ง€ ๋ฐ–์— ์—†๋‹ค.

  2. ๋ถ„์‚ฐํ™˜๊ฒฝ์—๋Š” ๋ถ€์ ํ•ฉํ•˜๋‹ค.

  3. HTTP ํ†ต์‹  ๋ชจ๋ธ์— ๋Œ€ํ•ด์„œ๋งŒ ์ง€์›ํ•œ๋‹ค.

์œ„ ๋‚ด์šฉ์€ ๊ฐ„๋‹จํžˆ ์š”์•ฝ๋œ ๋‚ด์šฉ์ด๋ฏ€๋กœ ๋ณด๋‹ค ์ž์„ธํ•œ ๋‚ด์šฉ์€ ๋‹ค์Œ Reference ๋ฅผ ์ฐธ๊ณ ํ•˜์‹œ๋ฉด ๋ฉ๋‹ˆ๋‹ค :)

โœจ Reference

MVC pattern ?

reference

Git & Github ?

Git ์ด๋ž€ VCS(Version Control System)์— ๋Œ€ํ•ด์„œ ๊ธฐ๋ณธ์ ์ธ ์ดํ•ด๋ฅผ ์š”๊ตฌํ•˜๊ณ  ์žˆ๋‹ค.

Git ์„ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•œ ๊ฐ์ข… ์ „๋žต(strategy)๋“ค์ด ์กด์žฌํ•œ๋‹ค. ํ•ด๋‹น ์ „๋žต๋“ค์— ๋Œ€ํ•œ ์ดํ•ด๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ Git ์„ ์‚ฌ์šฉํ•ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ฉด์ ‘์—์„œ ์ž์ฃผ ๋ฌผ์–ด๋ณธ๋‹ค. ์ฃผ๋กœ ์‚ฌ์šฉ๋˜๋Š” strategy ์ค‘์‹ฌ์œผ๋กœ ์งˆ๋ฌธ์ด ๋“ค์–ด์˜ค๋ฉฐ ์œ ๋ช…ํ•œ ์„ธ ๊ฐ€์ง€๋ฅผ ๋น„๊ตํ•œ ๊ธ€์„ ์ฒจ๋ถ€ํ•œ๋‹ค.

๋งŽ์€ ํšŒ์‚ฌ๋“ค์ด GitHub ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ˜‘์—…์„ ํ•˜๊ฒŒ ๋˜๋Š”๋ฐ, (BitBucket ์ด๋ผ๋Š” ํ›Œ๋ฅญํ•œ ๋„๊ตฌ๋„ ์กด์žฌํ•ฉ๋‹ˆ๋‹ค.) GitHub ์—์„œ ์–ด๋–ค ์ผ์„ ํ•  ์ˆ˜ ์žˆ๋Š”์ง€, ์–ด๋–ป๊ฒŒ GitHub Repository ์— ๊ธฐ์—ฌ๋ฅผ ํ•˜๋Š”์ง€ ์ •๋ฆฌํ•œ ๊ธ€์„ ์ฒจ๋ถ€ํ•œ๋‹ค.

Last updated