๊ด€๋ฆฌ ๋ฉ”๋‰ด

Daehyunii's Dev-blog

6์ฃผ์ฐจ ๊ณผ์ œ - ๊ณ ์–‘์ด ์‚ฌ์ง„์ฒฉ ์ตœ์ ํ™” ๋ฐ ์œ ํšจ์„ฑ ๊ฒ€์‚ฌํ•˜๊ธฐ ๋ณธ๋ฌธ

๐Ÿ“„ Dev Course/Assignment

6์ฃผ์ฐจ ๊ณผ์ œ - ๊ณ ์–‘์ด ์‚ฌ์ง„์ฒฉ ์ตœ์ ํ™” ๋ฐ ์œ ํšจ์„ฑ ๊ฒ€์‚ฌํ•˜๊ธฐ

Daehyunii 2022. 11. 24. 00:19

  ์ด๋ฒˆ 6์ฃผ์ฐจ ๊ณผ์ œ๋Š” ๊ธฐ์กด์˜ ๊ฐ•์˜๋ฅผ ํ† ๋Œ€๋กœ ์ตœ์ ํ™” ๋ฐ ๊ฐ„๋‹จํ•œ ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฐ„๋‹จํ•œ ๊ณผ์ œ์˜€๋‹ค. ์šฐ์„  ๊ณ ์–‘์ด ์‚ฌ์ง„์ฒฉ ๋งŒ๋“ค๊ธฐ ๊ฐ•์˜๋ฅผ ํ†ตํ•ด์„œ ๊ทธ ๋™์•ˆ ๋ฐฐ์› ๋˜, ๋‚ด์šฉ๋“ค์„ ๋ณต์Šตํ•˜๋Š” ์˜๋ฏธ๊ฐ€ ๊ฐ•ํ–ˆ๊ณ  ์ปดํฌ๋„ŒํŠธ๋ฅผ ๊ตฌ์„ฑํ•˜๊ณ  API๋ฅผ ํ†ตํ•ด์„œ ์„œ๋ฒ„์™€ ํ†ต์‹ ํ•˜๊ณ  ๋˜ ๋ฐ›์•„์˜จ ๋ฐ์ดํ„ฐ๋ฅผ ํ•˜์œ„ ์ปดํฌ๋„ŒํŠธ์—๊ฒŒ ๋ฟŒ๋ ค์ฃผ์–ด ์ด๋ฅผ ํ™œ์šฉํ•˜๋Š” ์ผ๋ จ์˜ ๊ณผ์ •์„ ๋‹ค์‹œ ํ•œ ๋ฒˆ ๊ณ ์–‘์ด ์‚ฌ์ง„์ฒฉ์„ ํ†ตํ•ด์„œ ๋ณต์Šตํ•˜๋Š” ๊ณผ์ •์ด์—ˆ๊ณ  ๊ทธ ๊ณผ์ •์—์„œ ๊ฐ„๋‹จํ•œ ๊ณผ์ œ๊ฐ€ ์ฃผ์–ด์กŒ๋‹ค.์š”๊ตฌ ์‚ฌํ•ญ์€ ์•„๋ž˜์™€ ๊ฐ™๋‹ค.


 

๊ณ ์–‘์ด ์‚ฌ์ง„์ฒฉ ์ปดํฌ๋„ŒํŠธ ๊ตฌ์กฐ


๊ณผ์ œ ๊ธฐ๋ณธ ์š”๊ตฌ ์‚ฌํ•ญ
1. ์ง€๊ธˆ ๊ตฌํ˜„๋œ ์ฝ”๋“œ์—์„œ๋Š” state์— ๋Œ€ํ•œ ์ •ํ•ฉ์„ฑ ์ฒดํฌ๋ฅผ ์ „ํ˜€ ํ•˜์ง€ ์•Š๋Š”๋ฐ, ์ด ๋ถ€๋ถ„์„ ๋ณด์ถฉํ•ด์ฃผ์„ธ์š”.
2. ์ปดํฌ๋„ŒํŠธ๋ณ„๋กœ ์˜ฌ๋ฐ”๋ฅด์ง€ ์•Š์€ state๋ฅผ๋„ฃ์œผ๋ฉด ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๋„๋ก ํ•ด์ฃผ์„ธ์š”.
3. ๊ฐ ์ปดํฌ๋„ŒํŠธ์˜ setState๋ฅผ ์ตœ์ ํ™”ํ•˜์—ฌ ์ด์ „ ์ƒํƒœ์™€ ๋น„๊ตํ•ด์„œ ๋ณ€๊ฒฝ์‚ฌํ•ญ์ด ์žˆ์„ ๋•Œ๋งŒ render ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜๋„๋ก ์ตœ์ ํ™”๋ฅผ ํ•ด๋ด…๋‹ˆ๋‹ค.
4. ๋ฃจํŠธ ํƒ์ƒ‰ ์ค‘์ด ์•„๋‹Œ ๊ฒฝ์šฐ, ๋ฐฑ์ŠคํŽ˜์ด์Šค ํ‚ค๋ฅผ ๋ˆŒ๋ €์„ ๋•Œ ์ด์ „ ๊ฒฝ๋กœ๋กœ ์ด๋™ํ•˜๋„๋ก ๋งŒ๋“ค์–ด๋ด…๋‹ˆ๋‹ค.

  1๋ฒˆ ์š”๊ตฌ์‚ฌํ•ญ์ธ ์ •ํ•ฉ์„ฑ ๊ฒ€์‚ฌ ์ฆ‰, ๊ฐ ์ปดํฌ๋„ŒํŠธ์˜ state์— ์•Œ๋งž์€ ๋ฐ์ดํ„ฐ๊ฐ€ ๋“ค์–ด๊ฐ€๋Š”์ง€ ํ™•์ธํ•˜๋Š” ์œ ํšจ์„ฑ์„ ๊ฒ€์‚ฌํ•˜๋Š” ์ฝ”๋“œ๋ฅผ ๊ตฌํ˜„ํ•˜๊ธฐ ์œ„ํ•ด์„œ ๋จผ์ € validation.jsํŒŒ์ผ์„ ๋งŒ๋“ค๊ณ  ๊ฐ ์ปดํฌ๋„ŒํŠธ์— ๋“ค์–ด๊ฐ€๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ํ™•์ธํ•œ ํ›„ Array, Object, Boolean๊ฐ’์„ ํ™•์ธํ•˜๋Š” ํ•จ์ˆ˜๋ฅผ ๋งŒ๋“ค๊ณ  exportํ–ˆ๊ณ  ๊ฐ ์ปดํฌ๋„ŒํŠธ์—์„œ importํ•ด์„œ ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ๋ฅผ ์‹ค์‹œํ–ˆ๋‹ค. 

 

export function isArray(array) {
  if (!Array.isArray(array)) {
    throw new Error("๋ฐฐ์—ด์„ ์ „๋‹ฌํ•ด ์ฃผ์„ธ์š”!");
  } else {
    return true;
  }
}

export function isObject(object) {
  if (!(object.constructor.toString().indexOf("Object") > -1)) {
    throw new Error("๊ฐ์ฒด๋ฅผ ์ „๋‹ฌํ•ด ์ฃผ์„ธ์š”!");
  } else {
    return true;
  }
}

export function isBoolean(boolean) {
  if (!(typeof boolean === "boolean")) {
    throw new Error("๋ถˆ๋ฆฌ์–ธ๊ฐ’์„ ์ „๋‹ฌํ•ด ์ฃผ์„ธ์š”!");
  } else {
    return true;
  }
}

 

  2๋ฒˆ ์š”๊ตฌ์‚ฌํ•ญ์ธ ์˜ฌ๋ฐ”๋ฅด์ง€ ์•Š์€ state๋ฅผ ๋„ฃ์—ˆ์„ ๊ฒฝ์šฐ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๋„๋ก ๋งŒ๋“œ๋Š” ์š”๊ตฌ ์‚ฌํ•ญ์€ 1๋ฒˆ ์š”๊ตฌ์‚ฌํ•ญ์— ๋ถ™์—ฌ์„œ ๋ฐ”๋กœ Error๊ฐ€ ๋ฐœ์ƒํ•˜๋„๋ก ๋งŒ๋“ค์–ด ์ฃผ์—ˆ๋‹ค.

 

  3๋ฒˆ ์š”๊ตฌ์‚ฌํ•ญ์ธ setState๋ฅผ ์ตœ์ ํ™”๋Š” this.state์™€ nextState์ค‘ ๋ณ€ํ™”๊ฐ€ ๋ฐœ์ƒํ•œ ๊ฒฝ์šฐ์—๋งŒ setState( )๋‚ด์˜ render( )๋ฅผ ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ๋„๋ก ๋ฐ์ดํ„ฐ๋ฅผ ์ง์ ‘ ๋น„๊ตํ•˜์—ฌ ์กฐ๊ธˆ์ด๋ผ๋„ ๋ณ€๊ฒฝ์ด ์žˆ๋Š”๊ฒฝ์šฐ์—๋งŒ render( ) ํ•จ์ˆ˜๊ฐ€ ํ˜ธ์ถœ ๋  ์žˆ๋Š” ์กฐ๊ฑด์„ ๋„ฃ์—ˆ๋‹ค.

 

  4๋ฒˆ ์š”๊ตฌ์‚ฌํ•ญ์ธ ๋ฐฑ์ŠคํŽ˜์ด์Šค ํ‚ค๋ฅผ ๋ˆŒ๋ €์„ ๋•Œ ์ด์ „ ๊ฒฝ๋กœ๋กœ์˜ ์ด๋™์€ ๊ธฐ์กด์— ๊ตฌํ˜„์ด ๋˜์–ด์žˆ๋˜ onPrevClick( )๋ฅผ ํ™œ์šฉํ•˜์—ฌ window์— ์ด๋ฒคํŠธ๋ฅผ ๋“ฑ๋กํ•˜๊ณ  ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ๋ฅผ ๋“ฑ๋กํ•˜์—ฌ root์ธ ๊ฒฝ์šฐ๋ฅผ ์ œ์™ธํ•˜๊ณ  ๋’ค๋กœ ๊ฐˆ ์ˆ˜ ์žˆ๋„๋ก ๊ตฌํ˜„ ํ•˜์˜€์Šต๋‹ˆ๋‹ค.


  ๊ณผ์ œ๋ฅผ ํ•˜๋ฉฐ ๋Š๋‚€์ 

 

  ์ •๋ง ์‹ ๊ธฐํ•˜๋‹ค๊ณ  ๋Š๋‚€๊ฒƒ์€ ์ด์ „์— ํ•œ ๋ฒˆ์”ฉ ํ•ด๋ดค๋˜ ๊ณผ์ •์ด์–ด์„œ ๊ทธ๋žฌ๋Š”์ง€ ์šฐ์„  ํฌ๊ฒŒ ๋ถ€๋‹ด์ด ์—†์—ˆ๋‹ค. ๋ฌผ๋ก  ๋‚ด์šฉ ์ž์ฒด๊ฐ€ ๊ทธ๋ ‡๊ฒŒ ์–ด๋ ค์šด ๋‚ด์šฉ์€ ์•„๋‹ˆ์—ˆ์ง€๋งŒ ์ฒ˜์Œ ์ •ํ•ฉ์„ฑ ๊ฒ€์‚ฌ๋ผ๋Š” ์ด์•ผ๊ธฐ๋ฅผ ๋“ค์—ˆ์„ ๋•Œ๋Š” ๊ทธ๊ฒŒ ๋ฌด์—‡์ธ์ง€, ์™œ ํ•ด์•ผํ•˜๋Š”์ง€ ๋ชฐ๋ž๊ธฐ ๋•Œ๋ฌธ์— ์—„์ฒญ ๋‹นํ™ฉํ–ˆ๋˜ ๊ธฐ์ƒ‰์ด ์žˆ์—ˆ๋‹ค. ํ•˜์ง€๋งŒ ์ด๋ฒˆ ๊ณผ์ œ๋ฅผ ์ง„ํ–‰ํ•  ๋•Œ๋Š” ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ์ž๋ฃŒ๊ตฌ์กฐ๊ฐ€ ์ปดํฌ๋„ŒํŠธ๋ณ„๋กœ ๋‹ฌ๋ผ์ง€๋Š” ๊ฒƒ์„ ์•Œ๊ณ  ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ validation๊ฒ€์‚ฌ๋ฅผ ์œ„ํ•œ ํŒŒ์ผ์„ ๋งŒ๋“ค๊ณ  ์ž๋ฃŒ๊ตฌ์กฐ๋ณ„๋กœ validation ๊ฒ€์‚ฌ๋ฅผ ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•จ์ˆ˜๋“ค์„ ๊ตฌํ˜„ํ•˜๊ณ  exportํ•ด์„œ ์‚ฌ์šฉํ•ด์•ผ ๊ฒ ๋‹ค๋Š” ์ƒ๊ฐ์ด ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ๋“ค์—ˆ๋‹ค. ๋ฐ˜๋ณต๋œ ๊ฐ•์˜๋ฅผ ํ†ตํ•ด์„œ ์ปดํฌ๋„ŒํŠธ์— ์กฐ๊ธˆ์€ ์ต์ˆ™ํ•ด ์ง„๊ฒŒ ์•„๋‹๊นŒ ํ•˜๋Š” ์ƒ๊ฐ์ด ๋“ค์—ˆ๊ณ , ์•„์ง๋„ ์ƒˆ๋กœ์šด ์ฝ”๋“œ์˜ ๊ตฌ์กฐ๋ฅผ ์™„๋ฒฝํ•˜๊ฒŒ ์ดํ•ดํ•˜๋Š”๋ฐ ๋งŽ์€ ์‹œ๊ฐ„์ด ๊ฑธ๋ฆฌ๊ธด ํ•˜์ง€๋งŒ ์ด์ „ ๋ณด๋‹ค๋Š” ํ™•์‹คํžˆ ๋‚˜์•„์กŒ๊ณ  ์ฝ”๋“œ๋ฅผ ์ˆ˜์ •ํ•˜๊ฑฐ๋‚˜ ๋ฐ”๊ฟ”์•ผ ํ•˜๋Š” ๋ถ€๋ถ„๋“ค์ด ์ƒ๊ธฐ๋ฉด ์ฝ”๋“œ๋ฅผ ์ดํ•ดํ•˜๊ณ  ๊ทธ ๋ถ€๋ถ„๋งŒ ์ฐพ์•„์„œ ๋ฐ”๊พธ๋Š” ๊ฒƒ์ด ์–ด๋Š์ •๋„ ๊ฐ€๋Šฅํ•ด ์ง„ ๊ฒƒ ๊ฐ™๋‹ค๋Š” ์ƒ๊ฐ์ด ๋“ค์—ˆ๋‹ค. ๊ทธ๋ž˜์„œ ๊พธ์ค€ํžˆ ๊ณ„์†ํ•ด์„œ ๊ณต๋ถ€ํ•˜๋‹ค ๋ณด๋ฉด ์˜ค๋Š˜๋ณด๋‹ค ๋‚ด์ผ ๋” ๋ฐœ์ „ํ•œ ๋‚ด๊ฐ€ ๋  ์ˆ˜ ์žˆ์„ ๊ฒƒ์ด๋ผ๋Š” ํ™•์‹ ์ด ๋“ค์—ˆ๋˜ ๊ฒƒ ๊ฐ™๋‹ค. 

 

https://github.com/WooDaeHyun/Dev-cours-6week-Assignment

 

GitHub - WooDaeHyun/Dev-cours-6week-Assignment

Contribute to WooDaeHyun/Dev-cours-6week-Assignment development by creating an account on GitHub.

github.com