/javascript-bridge

๐Ÿš ๋‹ค๋ฆฌ ๊ฑด๋„ˆ๊ธฐ ๋ฏธ์…˜์„ ์ง„ํ–‰ํ•˜๋Š” ์ €์žฅ์†Œ

Primary LanguageJavaScript

๋ฏธ์…˜ - ๋‹ค๋ฆฌ ๊ฑด๋„ˆ๊ธฐ

๐Ÿ” ์ง„ํ–‰ ๋ฐฉ์‹

  • ๋ฏธ์…˜์€ ๊ธฐ๋Šฅ ์š”๊ตฌ ์‚ฌํ•ญ, ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์š”๊ตฌ ์‚ฌํ•ญ, ๊ณผ์ œ ์ง„ํ–‰ ์š”๊ตฌ ์‚ฌํ•ญ ์„ธ ๊ฐ€์ง€๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ๋‹ค.
  • ์„ธ ๊ฐœ์˜ ์š”๊ตฌ ์‚ฌํ•ญ์„ ๋งŒ์กฑํ•˜๊ธฐ ์œ„ํ•ด ๋…ธ๋ ฅํ•œ๋‹ค. ํŠนํžˆ ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•˜๊ธฐ ์ „์— ๊ธฐ๋Šฅ ๋ชฉ๋ก์„ ๋งŒ๋“ค๊ณ , ๊ธฐ๋Šฅ ๋‹จ์œ„๋กœ ์ปค๋ฐ‹ ํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ์ง„ํ–‰ํ•œ๋‹ค.
  • ๊ธฐ๋Šฅ ์š”๊ตฌ ์‚ฌํ•ญ์— ๊ธฐ์žฌ๋˜์ง€ ์•Š์€ ๋‚ด์šฉ์€ ์Šค์Šค๋กœ ํŒ๋‹จํ•˜์—ฌ ๊ตฌํ˜„ํ•œ๋‹ค.

๐Ÿ“ฎ ๋ฏธ์…˜ ์ œ์ถœ ๋ฐฉ๋ฒ•

  • ๋ฏธ์…˜ ๊ตฌํ˜„์„ ์™„๋ฃŒํ•œ ํ›„ GitHub์„ ํ†ตํ•ด ์ œ์ถœํ•ด์•ผ ํ•œ๋‹ค.
  • GitHub์— ๋ฏธ์…˜์„ ์ œ์ถœํ•œ ํ›„ ์šฐ์•„ํ•œํ…Œํฌ์ฝ”์Šค ์ง€์› ์‚ฌ์ดํŠธ์— ์ ‘์†ํ•˜์—ฌ ํ”„๋ฆฌ์ฝ”์Šค ๊ณผ์ œ๋ฅผ ์ œ์ถœํ•œ๋‹ค.
    • ์ž์„ธํ•œ ๋ฐฉ๋ฒ•์€ ์ œ์ถœ ๊ฐ€์ด๋“œ ์ฐธ๊ณ 
    • Pull Request๋งŒ ๋ณด๋‚ด๊ณ  ์ง€์› ํ”Œ๋žซํผ์—์„œ ๊ณผ์ œ๋ฅผ ์ œ์ถœํ•˜์ง€ ์•Š์œผ๋ฉด ์ตœ์ข… ์ œ์ถœํ•˜์ง€ ์•Š์€ ๊ฒƒ์œผ๋กœ ์ฒ˜๋ฆฌ๋˜๋‹ˆ ์ฃผ์˜ํ•œ๋‹ค.

๐Ÿšจ ๊ณผ์ œ ์ œ์ถœ ์ „ ์ฒดํฌ ๋ฆฌ์ŠคํŠธ - 0์  ๋ฐฉ์ง€

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

ํ…Œ์ŠคํŠธ ์‹คํ–‰ ๊ฐ€์ด๋“œ

  • ํ…Œ์ŠคํŠธ ํŒจํ‚ค์ง€ ์„ค์น˜๋ฅผ ์œ„ํ•ด Node.js ๋ฒ„์ „ 14 ์ด์ƒ์ด ํ•„์š”ํ•˜๋‹ค.
  • ๋‹ค์Œ ๋ช…๋ น์–ด๋ฅผ ์ž…๋ ฅํ•ด ํŒจํ‚ค์ง€๋ฅผ ์„ค์น˜ํ•œ๋‹ค.
npm install
  • ์„ค์น˜๊ฐ€ ์™„๋ฃŒ๋˜์—ˆ๋‹ค๋ฉด, ๋‹ค์Œ ๋ช…๋ น์–ด๋ฅผ ์ž…๋ ฅํ•ด ํ…Œ์ŠคํŠธ๋ฅผ ์‹คํ–‰ํ•œ๋‹ค.
npm test

๐Ÿš€ ๊ธฐ๋Šฅ ์š”๊ตฌ ์‚ฌํ•ญ

์œ„์•„๋ž˜ ๋‘˜ ์ค‘ ํ•˜๋‚˜์˜ ์นธ๋งŒ ๊ฑด๋„ ์ˆ˜ ์žˆ๋Š” ๋‹ค๋ฆฌ๋ฅผ ๋๊นŒ์ง€ ๊ฑด๋„ˆ๊ฐ€๋Š” ๊ฒŒ์ž„์ด๋‹ค.

  • ์œ„์•„๋ž˜ ๋‘ ์นธ์œผ๋กœ ์ด๋ฃจ์–ด์ง„ ๋‹ค๋ฆฌ๋ฅผ ๊ฑด๋„ˆ์•ผ ํ•œ๋‹ค.
    • ๋‹ค๋ฆฌ๋Š” ์™ผ์ชฝ์—์„œ ์˜ค๋ฅธ์ชฝ์œผ๋กœ ๊ฑด๋„ˆ์•ผ ํ•œ๋‹ค.
    • ์œ„์•„๋ž˜ ๋‘˜ ์ค‘ ํ•˜๋‚˜์˜ ์นธ๋งŒ ๊ฑด๋„ ์ˆ˜ ์žˆ๋‹ค.
  • ๋‹ค๋ฆฌ์˜ ๊ธธ์ด๋ฅผ ์ˆซ์ž๋กœ ์ž…๋ ฅ๋ฐ›๊ณ  ์ƒ์„ฑํ•œ๋‹ค.
    • ๋‹ค๋ฆฌ๋ฅผ ์ƒ์„ฑํ•  ๋•Œ ์œ„ ์นธ๊ณผ ์•„๋ž˜ ์นธ ์ค‘ ๊ฑด๋„ ์ˆ˜ ์žˆ๋Š” ์นธ์€ 0๊ณผ 1 ์ค‘ ๋ฌด์ž‘์œ„ ๊ฐ’์„ ์ด์šฉํ•ด์„œ ์ •ํ•œ๋‹ค.
    • ์œ„ ์นธ์„ ๊ฑด๋„ ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ U, ์•„๋ž˜ ์นธ์„ ๊ฑด๋„ ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ D๊ฐ’์œผ๋กœ ๋‚˜ํƒ€๋‚ธ๋‹ค.
    • ๋ฌด์ž‘์œ„ ๊ฐ’์ด 0์ธ ๊ฒฝ์šฐ ์•„๋ž˜ ์นธ, 1์ธ ๊ฒฝ์šฐ ์œ„ ์นธ์ด ๊ฑด๋„ ์ˆ˜ ์žˆ๋Š” ์นธ์ด ๋œ๋‹ค.
  • ๋‹ค๋ฆฌ๊ฐ€ ์ƒ์„ฑ๋˜๋ฉด ํ”Œ๋ ˆ์ด์–ด๊ฐ€ ์ด๋™ํ•  ์นธ์„ ์„ ํƒํ•œ๋‹ค.
    • ์ด๋™ํ•  ๋•Œ ์œ„ ์นธ์€ ๋Œ€๋ฌธ์ž U, ์•„๋ž˜ ์นธ์€ ๋Œ€๋ฌธ์ž D๋ฅผ ์ž…๋ ฅํ•œ๋‹ค.
    • ์ด๋™ํ•œ ์นธ์„ ๊ฑด๋„ ์ˆ˜ ์žˆ๋‹ค๋ฉด O๋กœ ํ‘œ์‹œํ•œ๋‹ค. ๊ฑด๋„ ์ˆ˜ ์—†๋‹ค๋ฉด X๋กœ ํ‘œ์‹œํ•œ๋‹ค.
  • ๋‹ค๋ฆฌ๋ฅผ ๋๊นŒ์ง€ ๊ฑด๋„ˆ๋ฉด ๊ฒŒ์ž„์ด ์ข…๋ฃŒ๋œ๋‹ค.
  • ๋‹ค๋ฆฌ๋ฅผ ๊ฑด๋„ˆ๋‹ค ์‹คํŒจํ•˜๋ฉด ๊ฒŒ์ž„์„ ์žฌ์‹œ์ž‘ํ•˜๊ฑฐ๋‚˜ ์ข…๋ฃŒํ•  ์ˆ˜ ์žˆ๋‹ค.
    • ์žฌ์‹œ์ž‘ํ•ด๋„ ์ฒ˜์Œ์— ๋งŒ๋“  ๋‹ค๋ฆฌ๋กœ ์žฌ์‚ฌ์šฉํ•œ๋‹ค.
    • ๊ฒŒ์ž„ ๊ฒฐ๊ณผ์˜ ์ด ์‹œ๋„ํ•œ ํšŸ์ˆ˜๋Š” ์ฒซ ์‹œ๋„๋ฅผ ํฌํ•จํ•ด ๊ฒŒ์ž„์„ ์ข…๋ฃŒํ•  ๋•Œ๊นŒ์ง€ ์‹œ๋„ํ•œ ํšŸ์ˆ˜๋ฅผ ๋‚˜ํƒ€๋‚ธ๋‹ค.
  • ์‚ฌ์šฉ์ž๊ฐ€ ์ž˜๋ชป๋œ ๊ฐ’์„ ์ž…๋ ฅํ•œ ๊ฒฝ์šฐ throw๋ฌธ์„ ์‚ฌ์šฉํ•ด ์˜ˆ์™ธ๋ฅผ ๋ฐœ์ƒ์‹œํ‚ค๊ณ , "[ERROR]"๋กœ ์‹œ์ž‘ํ•˜๋Š” ์—๋Ÿฌ ๋ฉ”์‹œ์ง€๋ฅผ ์ถœ๋ ฅ ํ›„ ๊ทธ ๋ถ€๋ถ„๋ถ€ํ„ฐ ์ž…๋ ฅ์„ ๋‹ค์‹œ ๋ฐ›๋Š”๋‹ค.

์ž…์ถœ๋ ฅ ์š”๊ตฌ ์‚ฌํ•ญ

์ž…๋ ฅ

  • ์ž๋™์œผ๋กœ ์ƒ์„ฑํ•  ๋‹ค๋ฆฌ ๊ธธ์ด๋ฅผ ์ž…๋ ฅ ๋ฐ›๋Š”๋‹ค. 3 ์ด์ƒ 20 ์ดํ•˜์˜ ์ˆซ์ž๋ฅผ ์ž…๋ ฅํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ์˜ฌ๋ฐ”๋ฅธ ๊ฐ’์ด ์•„๋‹ˆ๋ฉด ์˜ˆ์™ธ ์ฒ˜๋ฆฌํ•œ๋‹ค.
3
  • ๋ผ์šด๋“œ๋งˆ๋‹ค ํ”Œ๋ ˆ์ด์–ด๊ฐ€ ์ด๋™ํ•  ์นธ์„ ์ž…๋ ฅ ๋ฐ›๋Š”๋‹ค. U(์œ„ ์นธ)์™€ D(์•„๋ž˜ ์นธ) ์ค‘ ํ•˜๋‚˜์˜ ๋ฌธ์ž๋ฅผ ์ž…๋ ฅํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ์˜ฌ๋ฐ”๋ฅธ ๊ฐ’์ด ์•„๋‹ˆ๋ฉด ์˜ˆ์™ธ ์ฒ˜๋ฆฌํ•œ๋‹ค.
U
  • ๊ฒŒ์ž„ ์žฌ์‹œ์ž‘/์ข…๋ฃŒ ์—ฌ๋ถ€๋ฅผ ์ž…๋ ฅ ๋ฐ›๋Š”๋‹ค. R(์žฌ์‹œ์ž‘)๊ณผ Q(์ข…๋ฃŒ) ์ค‘ ํ•˜๋‚˜์˜ ๋ฌธ์ž๋ฅผ ์ž…๋ ฅํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ์˜ฌ๋ฐ”๋ฅธ ๊ฐ’์ด ์•„๋‹ˆ๋ฉด ์˜ˆ์™ธ ์ฒ˜๋ฆฌํ•œ๋‹ค.
R

์ถœ๋ ฅ

  • ๊ฒŒ์ž„ ์‹œ์ž‘ ๋ฌธ๊ตฌ
๋‹ค๋ฆฌ ๊ฑด๋„ˆ๊ธฐ ๊ฒŒ์ž„์„ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค.
  • ๊ฒŒ์ž„ ์ข…๋ฃŒ ๋ฌธ๊ตฌ
์ตœ์ข… ๊ฒŒ์ž„ ๊ฒฐ๊ณผ
[ O |   |   ]
[   | O | O ]

๊ฒŒ์ž„ ์„ฑ๊ณต ์—ฌ๋ถ€: ์„ฑ๊ณต
์ด ์‹œ๋„ํ•œ ํšŸ์ˆ˜: 2
  • ์‚ฌ์šฉ์ž๊ฐ€ ์ด๋™ํ•  ๋•Œ๋งˆ๋‹ค ๋‹ค๋ฆฌ ๊ฑด๋„ˆ๊ธฐ ๊ฒฐ๊ณผ์˜ ์ถœ๋ ฅ ํ˜•์‹์€ ์‹คํ–‰ ๊ฒฐ๊ณผ ์˜ˆ์‹œ๋ฅผ ์ฐธ๊ณ ํ•œ๋‹ค.
    • ์ด๋™ํ•  ์ˆ˜ ์žˆ๋Š” ์นธ์„ ์„ ํƒํ•œ ๊ฒฝ์šฐ O ํ‘œ์‹œ
    • ์ด๋™ํ•  ์ˆ˜ ์—†๋Š” ์นธ์„ ์„ ํƒํ•œ ๊ฒฝ์šฐ X ํ‘œ์‹œ
    • ์„ ํƒํ•˜์ง€ ์•Š์€ ์นธ์€ ๊ณต๋ฐฑ ํ•œ ์นธ์œผ๋กœ ํ‘œ์‹œ
    • ๋‹ค๋ฆฌ์˜ ์‹œ์ž‘์€ [, ๋‹ค๋ฆฌ์˜ ๋์€ ]์œผ๋กœ ํ‘œ์‹œ
    • ๋‹ค๋ฆฌ ์นธ์˜ ๊ตฌ๋ถ„์€ |(์•ž๋’ค ๊ณต๋ฐฑ ํฌํ•จ) ๋ฌธ์ž์—ด๋กœ ๊ตฌ๋ถ„
    • ํ˜„์žฌ๊นŒ์ง€ ๊ฑด๋„Œ ๋‹ค๋ฆฌ๋ฅผ ๋ชจ๋‘ ์ถœ๋ ฅ
  • ์˜ˆ์™ธ ์ƒํ™ฉ ์‹œ ์—๋Ÿฌ ๋ฌธ๊ตฌ๋ฅผ ์ถœ๋ ฅํ•ด์•ผ ํ•œ๋‹ค. ๋‹จ, ์—๋Ÿฌ ๋ฌธ๊ตฌ๋Š” "[ERROR]"๋กœ ์‹œ์ž‘ํ•ด์•ผ ํ•œ๋‹ค.
[ERROR] ๋‹ค๋ฆฌ ๊ธธ์ด๋Š” 3๋ถ€ํ„ฐ 20 ์‚ฌ์ด์˜ ์ˆซ์ž์—ฌ์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์‹คํ–‰ ๊ฒฐ๊ณผ ์˜ˆ์‹œ

๋‹ค๋ฆฌ ๊ฑด๋„ˆ๊ธฐ ๊ฒŒ์ž„์„ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค.

๋‹ค๋ฆฌ์˜ ๊ธธ์ด๋ฅผ ์ž…๋ ฅํ•ด์ฃผ์„ธ์š”.
3

์ด๋™ํ•  ์นธ์„ ์„ ํƒํ•ด์ฃผ์„ธ์š”. (์œ„: U, ์•„๋ž˜: D)
U
[ O ]
[   ]

์ด๋™ํ•  ์นธ์„ ์„ ํƒํ•ด์ฃผ์„ธ์š”. (์œ„: U, ์•„๋ž˜: D)
U
[ O | X ]
[   |   ]

๊ฒŒ์ž„์„ ๋‹ค์‹œ ์‹œ๋„ํ• ์ง€ ์—ฌ๋ถ€๋ฅผ ์ž…๋ ฅํ•ด์ฃผ์„ธ์š”. (์žฌ์‹œ๋„: R, ์ข…๋ฃŒ: Q)
R
์ด๋™ํ•  ์นธ์„ ์„ ํƒํ•ด์ฃผ์„ธ์š”. (์œ„: U, ์•„๋ž˜: D)
U
[ O ]
[   ]

์ด๋™ํ•  ์นธ์„ ์„ ํƒํ•ด์ฃผ์„ธ์š”. (์œ„: U, ์•„๋ž˜: D)
D
[ O |   ]
[   | O ]

์ด๋™ํ•  ์นธ์„ ์„ ํƒํ•ด์ฃผ์„ธ์š”. (์œ„: U, ์•„๋ž˜: D)
D
[ O |   |   ]
[   | O | O ]

์ตœ์ข… ๊ฒŒ์ž„ ๊ฒฐ๊ณผ
[ O |   |   ]
[   | O | O ]

๊ฒŒ์ž„ ์„ฑ๊ณต ์—ฌ๋ถ€: ์„ฑ๊ณต
์ด ์‹œ๋„ํ•œ ํšŸ์ˆ˜: 2
๋‹ค๋ฆฌ ๊ฑด๋„ˆ๊ธฐ ๊ฒŒ์ž„์„ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค.

๋‹ค๋ฆฌ์˜ ๊ธธ์ด๋ฅผ ์ž…๋ ฅํ•ด์ฃผ์„ธ์š”.
3

์ด๋™ํ•  ์นธ์„ ์„ ํƒํ•ด์ฃผ์„ธ์š”. (์œ„: U, ์•„๋ž˜: D)
U
[ O ]
[   ]

์ด๋™ํ•  ์นธ์„ ์„ ํƒํ•ด์ฃผ์„ธ์š”. (์œ„: U, ์•„๋ž˜: D)
U
[ O | X ]
[   |   ]

๊ฒŒ์ž„์„ ๋‹ค์‹œ ์‹œ๋„ํ• ์ง€ ์—ฌ๋ถ€๋ฅผ ์ž…๋ ฅํ•ด์ฃผ์„ธ์š”. (์žฌ์‹œ๋„: R, ์ข…๋ฃŒ: Q)
Q
์ตœ์ข… ๊ฒŒ์ž„ ๊ฒฐ๊ณผ
[ O | X ]
[   |   ]

๊ฒŒ์ž„ ์„ฑ๊ณต ์—ฌ๋ถ€: ์‹คํŒจ
์ด ์‹œ๋„ํ•œ ํšŸ์ˆ˜: 1

๐ŸŽฏ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์š”๊ตฌ ์‚ฌํ•ญ

  • Node.js 14 ๋ฒ„์ „์—์„œ ์‹คํ–‰ ๊ฐ€๋Šฅํ•ด์•ผ ํ•œ๋‹ค. Node.js 14์—์„œ ์ •์ƒ์ ์œผ๋กœ ๋™์ž‘ํ•˜์ง€ ์•Š์„ ๊ฒฝ์šฐ 0์  ์ฒ˜๋ฆฌํ•œ๋‹ค.
  • ํ”„๋กœ๊ทธ๋žจ ์‹คํ–‰์˜ ์‹œ์ž‘์ ์€ App.js์˜ play ๋ฉ”์„œ๋“œ์ด๋‹ค. ์•„๋ž˜์™€ ๊ฐ™์ด ํ”„๋กœ๊ทธ๋žจ์„ ์‹คํ–‰์‹œํ‚ฌ ์ˆ˜ ์žˆ์–ด์•ผ ํ•œ๋‹ค.

์˜ˆ์‹œ

const app = new App();
app.play();
  • package.json์„ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์—†๊ณ  ์™ธ๋ถ€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ(jQuery, Lodash ๋“ฑ)๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค. ์ˆœ์ˆ˜ Vanilla JS๋กœ๋งŒ ๊ตฌํ˜„ํ•œ๋‹ค.
  • JavaScript ์ฝ”๋“œ ์ปจ๋ฒค์…˜์„ ์ง€ํ‚ค๋ฉด์„œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ํ•œ๋‹ค
  • ํ”„๋กœ๊ทธ๋žจ ์ข…๋ฃŒ ์‹œ process.exit()๋ฅผ ํ˜ธ์ถœํ•˜์ง€ ์•Š๋Š”๋‹ค.
  • ํ”„๋กœ๊ทธ๋žจ ๊ตฌํ˜„์ด ์™„๋ฃŒ๋˜๋ฉด ApplicationTest์˜ ๋ชจ๋“  ํ…Œ์ŠคํŠธ๊ฐ€ ์„ฑ๊ณตํ•ด์•ผ ํ•œ๋‹ค. ํ…Œ์ŠคํŠธ๊ฐ€ ์‹คํŒจํ•  ๊ฒฝ์šฐ 0์  ์ฒ˜๋ฆฌํ•œ๋‹ค.
  • ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์š”๊ตฌ ์‚ฌํ•ญ์—์„œ ๋‹ฌ๋ฆฌ ๋ช…์‹œํ•˜์ง€ ์•Š๋Š” ํ•œ ํŒŒ์ผ, ํŒจํ‚ค์ง€ ์ด๋ฆ„์„ ์ˆ˜์ •ํ•˜๊ฑฐ๋‚˜ ์ด๋™ํ•˜์ง€ ์•Š๋Š”๋‹ค.
  • indent(์ธ๋ดํŠธ, ๋“ค์—ฌ์“ฐ๊ธฐ) depth๋ฅผ 3์ด ๋„˜์ง€ ์•Š๋„๋ก ๊ตฌํ˜„ํ•œ๋‹ค. 2๊นŒ์ง€๋งŒ ํ—ˆ์šฉํ•œ๋‹ค.
    • ์˜ˆ๋ฅผ ๋“ค์–ด while๋ฌธ ์•ˆ์— if๋ฌธ์ด ์žˆ์œผ๋ฉด ๋“ค์—ฌ์“ฐ๊ธฐ๋Š” 2์ด๋‹ค.
    • ํžŒํŠธ: indent(์ธ๋ดํŠธ, ๋“ค์—ฌ์“ฐ๊ธฐ) depth๋ฅผ ์ค„์ด๋Š” ์ข‹์€ ๋ฐฉ๋ฒ•์€ ํ•จ์ˆ˜(๋˜๋Š” ๋ฉ”์„œ๋“œ)๋ฅผ ๋ถ„๋ฆฌํ•˜๋ฉด ๋œ๋‹ค.
  • ํ•จ์ˆ˜(๋˜๋Š” ๋ฉ”์„œ๋“œ)๊ฐ€ ํ•œ ๊ฐ€์ง€ ์ผ๋งŒ ํ•˜๋„๋ก ์ตœ๋Œ€ํ•œ ์ž‘๊ฒŒ ๋งŒ๋“ค์–ด๋ผ.
  • Jest๋ฅผ ์ด์šฉํ•˜์—ฌ ๋ณธ์ธ์ด ์ •๋ฆฌํ•œ ๊ธฐ๋Šฅ ๋ชฉ๋ก์ด ์ •์ƒ ๋™์ž‘ํ•จ์„ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋กœ ํ™•์ธํ•œ๋‹ค.
  • else๋ฅผ ์ง€์–‘ํ•œ๋‹ค.
    • ํžŒํŠธ: if ์กฐ๊ฑด์ ˆ์—์„œ ๊ฐ’์„ returnํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ๊ตฌํ˜„ํ•˜๋ฉด else๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š์•„๋„ ๋œ๋‹ค.
    • ๋•Œ๋กœ๋Š” if/else, switch๋ฌธ์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ๋” ๊น”๋”ํ•ด ๋ณด์ผ ์ˆ˜ ์žˆ๋‹ค. ์–ด๋Š ๊ฒฝ์šฐ์— ์“ฐ๋Š” ๊ฒƒ์ด ์ ์ ˆํ• ์ง€ ์Šค์Šค๋กœ ๊ณ ๋ฏผํ•ด ๋ณธ๋‹ค.
  • ๋„๋ฉ”์ธ ๋กœ์ง์— ๋‹จ์œ„ ํ…Œ์ŠคํŠธ๋ฅผ ๊ตฌํ˜„ํ•ด์•ผ ํ•œ๋‹ค. ๋‹จ, UI(Console.readLine, Console.print) ๋กœ์ง์— ๋Œ€ํ•œ ๋‹จ์œ„ ํ…Œ์ŠคํŠธ๋Š” ์ œ์™ธํ•œ๋‹ค.
    • ํ•ต์‹ฌ ๋กœ์ง์„ ๊ตฌํ˜„ํ•˜๋Š” ์ฝ”๋“œ์™€ UI๋ฅผ ๋‹ด๋‹นํ•˜๋Š” ๋กœ์ง์„ ๊ตฌ๋ถ„ํ•œ๋‹ค.

์ถ”๊ฐ€๋œ ์š”๊ตฌ ์‚ฌํ•ญ

  • ํ•จ์ˆ˜(๋˜๋Š” ๋ฉ”์„œ๋“œ)์˜ ๊ธธ์ด๊ฐ€ 10๋ผ์ธ์„ ๋„˜์–ด๊ฐ€์ง€ ์•Š๋„๋ก ๊ตฌํ˜„ํ•œ๋‹ค.
    • ํ•จ์ˆ˜(๋˜๋Š” ๋ฉ”์„œ๋“œ)๊ฐ€ ํ•œ ๊ฐ€์ง€ ์ผ๋งŒ ์ž˜ํ•˜๋„๋ก ๊ตฌํ˜„ํ•œ๋‹ค.
  • ๋ฉ”์„œ๋“œ์˜ ํŒŒ๋ผ๋ฏธํ„ฐ ๊ฐœ์ˆ˜๋Š” ์ตœ๋Œ€ 3๊ฐœ๊นŒ์ง€๋งŒ ํ—ˆ์šฉํ•œ๋‹ค.
  • ์•„๋ž˜ ์žˆ๋Š” InputView, OutputView, BridgeGame, BridgeMaker ํด๋ž˜์Šค(๋˜๋Š” ๊ฐ์ฒด)์˜ ์š”๊ตฌ์‚ฌํ•ญ์„ ์ฐธ๊ณ ํ•˜์—ฌ ๊ตฌํ˜„ํ•œ๋‹ค.
    • ๊ฐ ํด๋ž˜์Šค(๋˜๋Š” ๊ฐ์ฒด)์˜ ์ œ์•ฝ ์‚ฌํ•ญ์€ ์•„๋ž˜ ํด๋ž˜์Šค๋ณ„ ์„ธ๋ถ€ ์„ค๋ช…์„ ์ฐธ๊ณ ํ•œ๋‹ค.
    • ์ด์™ธ ํ•„์š”ํ•œ ํด๋ž˜์Šค(๋˜๋Š” ๊ฐ์ฒด)์™€ ๋ฉ”์„œ๋“œ๋Š” ์ž์œ ๋กญ๊ฒŒ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค.
    • InputView ์—์„œ๋งŒ MissionUtils์˜ Console.readLine() ์„ ์ด์šฉํ•ด ์‚ฌ์šฉ์ž์˜ ์ž…๋ ฅ์„ ๋ฐ›์„ ์ˆ˜ ์žˆ๋‹ค.
    • BridgeGame ํด๋ž˜์Šค์—์„œ InputView, OutputView ๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค.

InputView ๊ฐ์ฒด

  • ์ œ๊ณต๋œ InputView ๊ฐ์ฒด๋ฅผ ํ™œ์šฉํ•ด ๊ตฌํ˜„ํ•ด์•ผ ํ•œ๋‹ค.
  • InputView์˜ ํŒŒ์ผ ๊ฒฝ๋กœ๋Š” ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋‹ค.
  • InputView์˜ ๋ฉ”์„œ๋“œ์˜ ์ธ์ž๋Š” ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ์‚ฌ์šฉ์ž ๊ฐ’ ์ž…๋ ฅ์„ ์œ„ํ•ด ํ•„์š”ํ•œ ๋ฉ”์„œ๋“œ๋ฅผ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ๋‹ค.
const InputView = {
  readBridgeSize() {},

  readMoving() {},

  readGameCommand() {},
};

OutputView ๊ฐ์ฒด

  • ์ œ๊ณต๋œ OutputView ๊ฐ์ฒด๋ฅผ ํ™œ์šฉํ•ด ๊ตฌํ˜„ํ•ด์•ผ ํ•œ๋‹ค.
  • OutputView์˜ ํŒŒ์ผ ๊ฒฝ๋กœ๋Š” ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋‹ค.
  • OutputView์˜ ๋ฉ”์„œ๋“œ์˜ ์ด๋ฆ„์€ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์—†๊ณ , ์ธ์ž๋Š” ํ•„์š”์— ๋”ฐ๋ผ ์ถ”๊ฐ€ํ•˜๊ฑฐ๋‚˜ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ๊ฐ’ ์ถœ๋ ฅ์„ ์œ„ํ•ด ํ•„์š”ํ•œ ๋ฉ”์„œ๋“œ๋ฅผ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ๋‹ค.
const OutputView = {
  printMap() {},

  printResult() {},
};

BridgeGame ํด๋ž˜์Šค

  • ์ œ๊ณต๋œ BridgeGame ํด๋ž˜์Šค๋ฅผ ํ™œ์šฉํ•ด ๊ตฌํ˜„ํ•ด์•ผ ํ•œ๋‹ค.
  • BridgeGame์— ํ•„๋“œ(์ธ์Šคํ„ด์Šค ๋ณ€์ˆ˜)๋ฅผ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • BridgeGame์˜ ํŒŒ์ผ ๊ฒฝ๋กœ๋Š” ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋‹ค.
  • BridgeGame์˜ ๋ฉ”์„œ๋“œ์˜ ์ด๋ฆ„์€ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์—†๊ณ , ์ธ์ž๋Š” ํ•„์š”์— ๋”ฐ๋ผ ์ถ”๊ฐ€ํ•˜๊ฑฐ๋‚˜ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ๊ฒŒ์ž„ ์ง„ํ–‰์„ ์œ„ํ•ด ํ•„์š”ํ•œ ๋ฉ”์„œ๋“œ๋ฅผ ์ถ”๊ฐ€ ํ•˜๊ฑฐ๋‚˜ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋‹ค.
class BridgeGame {
  move() {}

  retry() {}
}

BridgeMaker ๊ฐ์ฒด

  • ์ œ๊ณต๋œ BridgeMaker ๊ฐ์ฒด๋ฅผ ํ™œ์šฉํ•ด ๊ตฌํ˜„ํ•ด์•ผ ํ•œ๋‹ค.
  • BridgeMaker์— ํ”„๋กœํผํ‹ฐ๋ฅผ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์—†๋‹ค.
  • BridgeMaker์˜ ํŒŒ์ผ ๊ฒฝ๋กœ๋Š” ๋ณ€๊ฒฝํ•  ์ˆ˜ ์—†๋‹ค.
  • BridgeMaker์˜ ๋ฉ”์„œ๋“œ์˜ ์‹œ๊ทธ๋‹ˆ์ฒ˜(์ธ์ž, ์ด๋ฆ„)์™€ ๋ฐ˜ํ™˜ ํƒ€์ž…์€ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์—†๋‹ค.
const BridgeMaker = {
  makeBridge(size, generateRandomNumber) {},
};

BridgeRandomNumberGenerator ๊ฐ์ฒด

  • Random ๊ฐ’ ์ถ”์ถœ์€ ์ œ๊ณต๋œ BridgeRandomNumberGenerator์˜ generate()๋ฅผ ํ™œ์šฉํ•œ๋‹ค.
  • BridgeRandomNumberGenerator์˜ ์ฝ”๋“œ๋Š” ๋ณ€๊ฒฝํ•  ์ˆ˜ ์—†๋‹ค.

์‚ฌ์šฉ ์˜ˆ์‹œ

  • ๋‹ค๋ฆฌ ์นธ์„ ์ƒ์„ฑํ•˜๊ธฐ ์œ„ํ•œ Random ๊ฐ’์€ ์•„๋ž˜์™€ ๊ฐ™์ด ์ถ”์ถœํ•œ๋‹ค.
const number = generateRandomNumber();

๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ


โœ๏ธ ๊ณผ์ œ ์ง„ํ–‰ ์š”๊ตฌ ์‚ฌํ•ญ

  • ๋ฏธ์…˜์€ javascript-bridge ์ €์žฅ์†Œ๋ฅผ Fork & Cloneํ•ด ์‹œ์ž‘ํ•œ๋‹ค.
  • ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•˜๊ธฐ ์ „ docs/README.md์— ๊ตฌํ˜„ํ•  ๊ธฐ๋Šฅ ๋ชฉ๋ก์„ ์ •๋ฆฌํ•ด ์ถ”๊ฐ€ํ•œ๋‹ค.
  • Git์˜ ์ปค๋ฐ‹ ๋‹จ์œ„๋Š” ์•ž ๋‹จ๊ณ„์—์„œ docs/README.md์— ์ •๋ฆฌํ•œ ๊ธฐ๋Šฅ ๋ชฉ๋ก ๋‹จ์œ„๋กœ ์ถ”๊ฐ€ํ•œ๋‹ค.
  • ๊ณผ์ œ ์ง„ํ–‰ ๋ฐ ์ œ์ถœ ๋ฐฉ๋ฒ•์€ ํ”„๋ฆฌ์ฝ”์Šค ๊ณผ์ œ ์ œ์ถœ ๋ฌธ์„œ๋ฅผ ์ฐธ๊ณ ํ•œ๋‹ค.