undefined

์ข‹์€ ์ด๋ฆ„์œผ๋กœ ์ ˆ์•ฝํ•˜๋Š” ์‹œ๊ฐ„์€ ์ข‹์€ ์ด๋ฆ„์„ ์ง“๊ธฐ ์œ„ํ•ด ๊ณ ๋ฏผํ•˜๋Š” ์‹œ๊ฐ„๋ณด๋‹ค ํ›จ์”ฌ ๋” ํฌ๋‹ค.

์ด ์žฅ์—์„œ๋Š” ์ด๋ฆ„์„ ์ž˜ ์ง“๋Š” ๊ฐ„๋‹จํ•œ ๊ทœ์น™์„ ๋ช‡ ๊ฐ€์ง€ ์†Œ๊ฐœํ•œ๋‹ค.

 

์˜๋„๋ฅผ ๋ถ„๋ช…ํžˆ ๋ฐํ˜€๋ผ

์˜๋„๊ฐ€ ๋“ค์–ด๋‚˜๋Š” ์ด๋ฆ„์€ ์ฝ”๋“œ ์ดํ•ด์™€ ๋ณ€๊ฒฝ์„ ์‰ฝ๊ฒŒ ๋งŒ๋“ ๋‹ค.

๋”ฐ๋กœ ์ฃผ์„์ด ํ•„์š”ํ•˜๋‹ค๋ฉด ์˜๋„๊ฐ€ ๋ถ„๋ช…ํ•˜์ง€ ์•Š๋‹ค๋Š” ์˜๋ฏธ๋‹ค. ์ด๋ฆ„์„ ์ง“๊ธฐ ์œ„ํ•ด ๋‹ค์Œ ์งˆ๋ฌธ์— ๋ชจ๋‘ ๋‹ตํ•ด์•ผ ํ•œ๋‹ค.

  • ๋ณ€์ˆ˜ ๋˜๋Š” ํ•จ์ˆ˜, ํด๋ž˜์Šค์˜ ์กด์žฌ ์ด์œ ๋Š”?
  • ์ˆ˜ํ–‰ํ•˜๋Š” ๊ธฐ๋Šฅ์€?
  • ์‚ฌ์šฉ ๋ฐฉ๋ฒ•?

์˜ˆ์‹œ

// ๐Ÿ”ด Bad
const getTheme = (theList: number[][]) => {
  const list1: number[][] = [[]];
  theList.forEach((x) => {
    if (x[0] === 4) {
      list1.push(x);
    }
  });
  return list1;
};

์ด ์ฝ”๋“œ์˜ ๋ฌธ์ œ์ ์€ ์ฝ”๋“œ์˜ ํ•จ์ถ•์„ฑ์— ์žˆ๋‹ค. ์ฝ”๋“œ์˜ ๋งฅ๋ฝ์ด ๋ช…์‹œ์ ์œผ๋กœ ๋“œ๋Ÿฌ๋‚˜์ง€ ์•Š๋Š”๋‹ค.

์œ„ ์ฝ”๋“œ๋ฅผ ์ดํ•ดํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋‹ค์Œ์˜ ์ •๋ณด๋ฅผ ์•Œ๊ณ  ์žˆ์–ด์•ผ ํ•œ๋‹ค.

  1. theList์— ๋ฌด์—‡์ด ๋“ค์–ด์žˆ๋Š”๊ฐ€
  2. theList์—์„œ 0๋ฒˆ์งธ ๊ฐ’์ด ์–ด์งธ์„œ ์ค‘์š”ํ•œ๊ฐ€
  3. ๊ฐ’ 4๋Š” ๋ฌด์Šจ ์˜๋ฏธ์ธ๊ฐ€
  4. ํ•จ์ˆ˜๊ฐ€ ๋ฐ˜ํ™˜ํ•˜๋Š” ๋ฆฌ์ŠคํŠธ list1์„ ์–ด๋–ป๊ฒŒ ์‚ฌ์šฉํ•˜๋Š”๊ฐ€

์ด ์ •๋ณด๊ฐ€ ์ฝ”๋“œ์— ๋“œ๋Ÿฌ๋‚˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ๋…์ž๋Š” ์ด ์ฝ”๋“œ๊ฐ€ ํ•˜๋Š” ์ผ์„ ์ง์ž‘ํ•˜๊ธฐ ์–ด๋ ต๋‹ค.

์ด ์ฝ”๋“œ๋Š” ์‚ฌ์‹ค ์ง€๋ขฐ์ฐพ๊ธฐ ๊ฒŒ์ž„์˜ ์ผ๋ถ€์ด๋‹ค. ์˜๋ฏธ์žˆ๋Š” ์ด๋ฆ„์„ ์‚ฌ์šฉํ•˜์—ฌ ์ฝ”๋“œ๋ฅผ ๋ณ€๊ฒฝํ•ด๋ณด์ž.

// ๐ŸŸข Good
const STATUS_VALUE = 0
const FLAGGED = 4
const getFlaggedCells = (gameBoard: number[][]) => {
  const flaggedCells: number[][] = [[]];
  gameBoard.forEach((cell) => {
    if (cell[STATUS_VALUE] === FLAGGED) {
      flaggedCells.push(cell);
    }
  });
  return flaggedCells;
};

์ฝ”๋“œ์˜ ๋‹จ์ˆœ์„ฑ์€ ๋ณ€ํ•˜์ง€ ์•Š์•˜์ง€๋งŒ ์ฝ”๋“œ๋Š” ๋”์šฑ ๋ช…ํ™•ํ•ด์กŒ๋‹ค.

๊ฐ ๊ฐœ๋…์— ์ด๋ฆ„์„ ๋ถ™์ธ๊ฒƒ ๋งŒ์œผ๋กœ ์ฝ”๋“œ๊ฐ€ ํ›จ์”ฌ ์ฝ๊ธฐ ์‰ฌ์›Œ์กŒ์Œ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค.

 

๊ทธ๋ฆ‡๋œ ์ •๋ณด๋ฅผ ํ”ผํ•˜๋ผ

๊ทธ๋ฆ‡๋œ ๋‹จ์„œ๋Š” ์ฝ”๋“œ ์˜๋ฏธ๋ฅผ ํ๋ฆฐ๋‹ค.

  • ๋„๋ฆฌ ์“ฐ์ด๋Š” ์˜๋ฏธ๊ฐ€ ์žˆ๋Š” ๋‹จ์–ด๋ฅผ ๋‹ค๋ฅธ ์˜๋ฏธ๋กœ ์‚ฌ์šฉํ•˜๋ฉด ์•ˆ๋œ๋‹ค.
    • ์‹ค์ œ ๋ฐฐ์—ด ํƒ€์ž…์ด ์•„๋‹ˆ๋ผ๋ฉด accountList, accountArray๋ผ ๋ช…๋ช…ํ•˜์ง€ ์•Š๋Š”๋‹ค.
  • ์„œ๋กœ ํก์‚ฌํ•œ ์ด๋ฆ„์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋„๋ก ์ฃผ์˜ํ•œ๋‹ค.
  • ์œ ์‚ฌํ•œ ๊ฐœ๋…์€ ์œ ์‚ฌํ•œ ํ‘œ๊ธฐ๋ฒ•์„ ์‚ฌ์šฉํ•œ๋‹ค.
    • ์ผ๊ด€์„ฑ์ด ๋–จ์–ด์ง€๋Š” ํ‘œ๊ธฐ๋ฒ•์€ ๊ทธ๋ฆ‡๋œ ์ •๋ณด์ด๋‹ค.
  • ๋งŽ์€ ๊ฐœ๋ฐœ์ž๋Š” ์ฝ”๋“œ ์ž๋™ ์™„์„ฑ ๊ธฐ๋Šฅ์— ๋œจ๋Š” ์ด๋ฆ„๋งŒ ๋ณด๊ณ  ๊ฐ์ฒด๋ฅผ ์„ ํƒํ•œ๋‹ค.
    • ์œ ์‚ฌํ•œ ๊ฐœ๋…์ด ์•ŒํŒŒ๋ฒณ ์ˆœ์œผ๋กœ ๋‚˜์˜ค๋ฉฐ, ๊ฐ ๊ฐœ๋… ์ฐจ์ด๊ฐ€ ๋ช…๋ฐฑํ•  ๋•Œ ์ด ๊ธฐ๋Šฅ์€ ๋งค์šฐ ์œ ์šฉํ•ด์ง„๋‹ค.

 

์˜๋ฏธ ์žˆ๊ฒŒ ๊ตฌ๋ถ„ํ•˜๋ผ

๊ฐ™์€ ์Šค์ฝ”ํ”„์—์„œ ๋ณ€์ˆ˜๋ฅผ ๊ตฌ๋ถ„ํ•  ๋•Œ, ์—ฐ์†๋œ ์ˆซ์ž๋ฅผ ๋ง๋ถ™์ด๊ฑฐ๋‚˜ ๋ถˆ์šฉ์–ด๋ฅผ ์ถ”๊ฐ€ํ•˜์ง€ ๋ง ๊ฒƒ

  • ์˜๋„์ ์ธ ์ด๋ฆ„๊ณผ ์ •๋ฐ˜๋Œ€๊ฐ€ ๋œ๋‹ค. ์•„๋ฌด๋Ÿฐ ์ •๋ณด๋„ ์ œ๊ณตํ•˜์ง€ ๋ชปํ•œ๋‹ค.
  • ์ฝ๋Š” ์‚ฌ๋žŒ์ด ๊ฐ ๋ณ€์ˆ˜์˜ ์ฐจ์ด๋ฅผ ์•Œ ์ˆ˜ ์žˆ๋„๋ก ์ง€์–ด์•ผ ํ•œ๋‹ค.
    • ๐Ÿ”ด ProductInfoProductData
    • ๐Ÿ”ด moneymoneyAmount

 

๋ฐœ์Œํ•˜๊ธฐ ์‰ฌ์šด ์ด๋ฆ„์„ ์‚ฌ์šฉํ•˜๋ผ

  • ์‚ฌ๋žŒ์€ ๋‹จ์–ด์— ๋Šฅ์ˆ™ํ•˜๋‹ค.
  • ๋ฐœ์Œํ•˜๊ธฐ ์–ด๋ ค์šด ์ด๋ฆ„์€ ํ† ๋ก ํ•˜๊ธฐ ํž˜๋“ค๋‹ค.
const genymdhms = new Date() // ๐Ÿ”ด ์   ์•ผ ๋ฌด๋‹ค ํž˜์ฆˆ ๊ฐ’์ด ์ด์ƒํ•ด์š”!
const generationTimestamp = new Date() // ๐ŸŸข Generation Timestamp ๊ฐ’์ด ์ด์ƒํ•˜๊ตฐ์š”!

ํ›„์ž๋Š” ์ง€์ ์ธ ๋Œ€ํ™”๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค๐Ÿ˜‚

 

๊ฒ€์ƒ‰ํ•˜๊ธฐ ์‰ฌ์šด ์ด๋ฆ„์„ ์‚ฌ์šฉํ•˜๋ผ

  • ๋ฌธ์ž ํ•˜๋‚˜๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ด๋ฆ„์€ ์‰ฝ๊ฒŒ ๋ˆˆ์— ๋„์ง€ ์•Š๋Š”๋‹ค
  • ๊ฒ€์ƒ‰ ์šฉ์ด์„ฑ์˜ ๊ด€์ ์—์„œ ๊ธด ์ด๋ฆ„์ด ์งง์€ ์ด๋ฆ„๋ณด๋‹ค ์ข‹๋‹ค.
  • ๊ฐ„๋‹จํ•œ ๋ฉ”์„œ๋“œ์—์„œ ๋กœ์ปฌ ๋ณ€์ˆ˜๋Š” ์งง์•„๋„ ๊ดœ์ฐฎ์ง€๋งŒ ๋ฒ”์œ„๊ฐ€ ์ปค์งˆ ์ˆ˜๋ก ์ด๋ฆ„๋„ ๊ธธ์–ด์ง€๋Š” ๊ฒƒ์ด ์ข‹๋‹ค.

 

์ธ์ฝ”๋”ฉ์„ ํ”ผํ•˜๋ผ

์ด๋ฆ„์— ํƒ€์ž…๊นŒ์ง€ ๋ช…์‹œํ•  ํ•„์š”๋Š” ์—†๋‹ค.

  • ๋ฌธ์ œ ํ•ด๊ฒฐ์— ์ง‘์ค‘ํ•˜๋Š” ๊ฒƒ์„ ๋ฐฉํ•ดํ•œ๋‹ค.
  • ์ธ์ฝ”๋”ฉํ•œ ์ด๋ฆ„์€ ๊ฑฐ์˜ ๋ฐœ์Œํ•˜๊ธฐ ์–ด๋ ค์šฐ๋ฉฐ ์˜คํƒ€๊ฐ€ ์ƒ๊ธฐ๊ธฐ ์‰ฝ๋‹ค.
  • ํƒ€์ž…์ด ๋ฐ”๋€Œ๋ฉด ๋ณ€์ˆ˜๋ช…๋„ ๋ฐ”๊ฟ”์•ผํ•œ๋‹ค.
  • IDE์˜ ๋ฐœ์ „์œผ๋กœ ๋ฉค๋ฒ„ ๋ณ€์ˆ˜, ์ธํ„ฐํŽ˜์ด์Šค, ํƒ€์ž… ๋“ฑ์„ ๋ชจ๋‘ ๊ตฌ๋ถ„ํ•  ์ˆ˜ ์žˆ๋‹ค.

๊ณผ๊ฑฐ์—๋Š” ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ํƒ€์ž… ์ฒดํฌ๋ฅผ ํ•˜์ง€ ์•Š์•˜๊ธฐ ๋•Œ๋ฌธ์— ํƒ€์ž…์— ๋Œ€ํ•œ ๋‹จ์„œ๊ฐ€ ํ•„์š”ํ–ˆ๋‹ค.

์š”์ฆ˜์€ IDE์—์„œ ํƒ€์ž…์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๊ณ  ๋ณ€์ˆ˜๋ฅผ ์„ ์–ธํ•œ ์œ„์น˜์™€ ์‚ฌ์šฉํ•˜๋Š” ์œ„์น˜๊ฐ€ ๊ฐ€๊นŒ์›Œ์ง€๋Š” ์ถ”์„ธ์ด๋‹ค.

// ๐Ÿ”ด Bad
type PointType = {x: number, y: number}
interface IShape {...}

// ๐ŸŸข Good
type Point = {x: number, y: number}
interface Shpae {...}

// IDE์—์„œ type์ธ์ง€ interface์ธ์ง€ ๋ณ€์ˆ˜์ธ์ง€ ๋ช…์‹œ์ ์œผ๋กœ ๋ณด์—ฌ์ฃผ๊ธฐ ๋•Œ๋ฌธ์— ์ด๋ฆ„์— ๋„ฃ์ง€ ์•Š์•„๋„ ๋œ๋‹ค.

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๊ฐ™์€ ๋™์  ํƒ€์ž… ์–ธ์–ด์—์„œ๋Š” ํƒ€์ž…์ด ๋ณ€ํ•˜์ง€ ์•Š์„ ๊ฒฝ์šฐ ์ด๋ฆ„์— ๋ช…์‹œํ•˜๋Š” ๊ฒƒ์ด ์œ ์šฉํ•  ๋•Œ๊ฐ€ ์žˆ์„ ๊ฒƒ์œผ๋กœ ์ƒ๊ฐ๋œ๋‹ค.

 

์ž์‹ ์˜ ๊ธฐ์–ต๋ ฅ์„ ์ž๋ž‘ํ•˜์ง€ ๋งˆ๋ผ

๋…์ž๊ฐ€ ์ฝ”๋“œ๋ฅผ ์ฝ์œผ๋ฉด์„œ ๋ณ€์ˆ˜ ์ด๋ฆ„์„ ์ž์‹ ์ด ์•„๋Š” ์ด๋ฆ„์œผ๋กœ ๋ฐ”๊ฟ” ์ƒ๊ฐํ•ด์•ผ ํ•œ๋‹ค๋ฉด ๊ทธ ์ด๋ฆ„์€ ์ ์ ˆํ•˜์ง€ ์•Š๋‹ค.

๋˜‘๋˜‘ํ•œ ํ”„๋กœ๊ทธ๋ž˜๋จธ๋Š” ๋ณ€์ˆ˜ r์˜ ์˜๋ฏธ๋ฅผ ์–ธ์ œ๋‚˜ ๊ธฐ์–ตํ•œ๋‹ค. ํ•˜์ง€๋งŒ ์ „๋ฌธ๊ฐ€ ํ”„๋กœ๊ทธ๋ž˜๋จธ๋Š” ๋ช…๋ฃŒํ•จ์ด ์ตœ๊ณ ๋ผ๋Š” ์‚ฌ์‹ค์„ ์ดํ•ดํ•œ๋‹ค.

 

ํด๋ž˜์Šค ๋˜๋Š” ๊ฐ์ฒด์˜ ์ด๋ฆ„

๋ช…์‚ฌ๋‚˜ ๋ช…์‚ฌ๊ตฌ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ๋™์‚ฌ๋Š” ์ง€์–‘ํ•œ๋‹ค.

๋ถˆ์šฉ์–ด๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค. (Data, Info ๋“ฑ)

 

๋ฉ”์„œ๋“œ ์ด๋ฆ„

๋™์‚ฌ๋‚˜ ๋™์‚ฌ๊ตฌ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

์ ‘๊ทผ์ž, ๋ณ€๊ฒฝ์ž, ์กฐ๊ฑด์ž์—๋Š” ๊ฐ๊ฐ get, set, is๋ฅผ ๋ถ™์ธ๋‹ค.

 

ํ•œ ๊ฐœ๋…์— ํ•œ ๋‹จ์–ด๋ฅผ ์‚ฌ์šฉํ•˜๋ผ

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

ex) fetch, retrieve, get ์ค‘ ํ•˜๋‚˜๋งŒ ์„ ํƒํ•ด ๊ณ ์ˆ˜ํ•œ๋‹ค.

  • ์ด๋ฆ„์ด ๋‹ค๋ฅด๋ฉด ๋…์ž๋Š” ํƒ€์ž…๋„ ๋‹ค๋ฅด๋ฆฌ๋ผ ์ƒ๊ฐํ•œ๋‹ค.

 

ํ•œ ๋‹จ์–ด๋ฅผ ๋‘๊ฐ€์ง€ ๋ชฉ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜์ง€ ๋งˆ๋ผ

๋‹ค๋ฅธ ๊ฐœ๋…์— ๊ฐ™์€ ๋‹จ์–ด๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค๋ฉด ๊ทธ๊ฒƒ์€ ๋ง์žฅ๋‚œ์— ๋ถˆ๊ณผํ•˜๋‹ค.

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

const add = (x:number, y:number) => x + y

// ๐Ÿ”ด Bad
const addStudent = (student: Student) => {
  rollBook.push(student)
}

// ๐ŸŸข Good
const insertStudent = (student: Student) => {
  rollBook.push(student)
}

 

ํ•ด๋ฒ• ์˜์—ญ์—์„œ ๊ฐ€์ ธ์˜จ ์ด๋ฆ„์„ ์‚ฌ์šฉํ•˜๋ผ

์ฝ”๋“œ๋ฅผ ์ฝ๋Š” ์‚ฌ๋žŒ๋„ ํ”„๋กœ๊ทธ๋ž˜๋จธ๋ผ๋Š” ์‚ฌ์‹ค์„ ๋ช…์‹ฌํ•œ๋‹ค.

  • ์ „์‚ฐ ์šฉ์–ด, ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ด๋ฆ„, ํŒจํ„ด ์ด๋ฆ„, ์ˆ˜ํ•™ ์šฉ์–ด ๋“ฑ์„ ์‚ฌ์šฉํ•ด๋„ ๊ดœ์ฐฎ๋‹ค.
  • ๋ชจ๋“  ์ด๋ฆ„์„ ๋ฌธ์ œ ์˜์—ญ์—์„œ ๊ฐ€์ ธ์˜ค๋Š” ์ •์ฑ…์€ ํ˜„๋ช…ํ•˜์ง€ ๋ชปํ•˜๋‹ค.
    • ๋งค๋ฒˆ ํ•ด๋‹น ๋„๋ฉ”์ธ ์ „๋ฌธ๊ฐ€์—๊ฒŒ ์˜๋ฏธ๋ฅผ ๋ฌผ์–ด์•ผํ•˜๊ธฐ ๋•Œ๋ฌธ
  • ๊ธฐ์ˆ  ๊ฐœ๋…์—๋Š” ๊ธฐ์ˆ  ์ด๋ฆ„์ด ๊ฐ€์žฅ ์ ํ•ฉํ•˜๋‹ค.
    • ex) JobQueue, historyStack

์ ์ ˆํ•œ ํ”„๋กœ๊ทธ๋ž˜๋จธ ์šฉ์–ด๊ฐ€ ์—†๋‹ค๋ฉด ๋ฌธ์ œ ์˜์—ญ์—์„œ ์ด๋ฆ„์„ ๊ฐ€์ ธ์˜จ๋‹ค

ํ•ด๋ฒ• ์˜์—ญ๊ณผ ๋ฌธ์ œ ์˜์—ญ์„ ๊ตฌ๋ถ„ํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•œ๋‹ค.

๋ฌธ์ œ ์˜์—ญ ๊ฐœ๋…๊ณผ ๊ด€๋ จ์ด ๊นŠ์€ ์ฝ”๋“œ๋ผ๋ฉด ๋ฌธ์ œ ์˜์—ญ์—์„œ ์ด๋ฆ„์„ ๊ฐ€์ ธ์™€์•ผ ํ•œ๋‹ค.

 

์˜๋ฏธ ์žˆ๋Š” ๋งฅ๋ฝ์„ ์ถ”๊ฐ€ํ•˜๋ผ

๋Œ€๋‹ค์ˆ˜ ์ด๋ฆ„์€ ์Šค์Šค๋กœ ์˜๋ฏธ๊ฐ€ ๋ถ„๋ช…ํ•˜์ง€ ์•Š๋‹ค.

์ด๋Ÿด ๋•Œ ํด๋ž˜์Šค, ํ•จ์ˆ˜, ์ด๋ฆ„ ๊ณต๊ฐ„์— ์˜๋ฏธ๋ฅผ ๋„ฃ์–ด ๋งฅ๋ฝ์„ ๋ถ€์—ฌํ•œ๋‹ค. ๋ชจ๋“  ๋ฐฉ๋ฒ•์ด ์‹คํŒจํ•œ๋‹ค๋ฉด ๋งˆ์ง€๋ง‰ ์ˆ˜๋‹จ์œผ๋กœ ์ ‘๋‘์–ด๋ฅผ ๋ถ™์ธ๋‹ค.

const printGuessStatistics = (candidate: string, count: number) => {
  let number: string;
  let verb: string;
  let pluralModifier: string;
  if (count === 0) {
    number = "no";
    verb = "are";
    pluralModifier = "s";
  } else if (count === 1) {
    number = "1";
    verb = "is";
    pluralModifier = "";
  } else {
    number = count.toString();
    verb = "are";
    pluralModifier = "s";
  }
  const guessMessage = `There ${verb} ${number} ${candidate}${pluralModifier}`;
  console.log(guessMessage);
};
  • ํ•จ์ˆ˜ ์ด๋ฆ„์€ ๋งฅ๋ฝ์˜ ์ผ๋ถ€๋งŒ ์ œ๊ณตํ•˜๊ณ  ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด ๋‚˜๋จธ์ง€ ๋งฅ๋ฝ์„ ์ œ๊ณตํ•œ๋‹ค.
  • ํ•จ์ˆ˜๋ฅผ ๋๊นŒ์ง€ ์ฝ์–ด์•ผ number, verb, pluralModifier๋ผ๋Š” ๋ณ€์ˆ˜ ์„ธ ๊ฐœ๊ฐ€ guess statistics ๋ฉ”์‹œ์ง€์— ์‚ฌ์šฉ๋œ๋‹ค๋Š” ์‚ฌ์‹ค์ด ๋“œ๋Ÿฌ๋‚œ๋‹ค. (๋…์ž๊ฐ€ ์ง์ ‘ ๋งฅ๋ฝ์„ ์œ ์ถ”ํ•ด์•ผ ํ•œ๋‹ค!)

ํ•จ์ˆ˜๋ฅผ ์ž‘์€ ์กฐ๊ฐ์œผ๋กœ ์ชผ๊ฐœ๊ณ  ์„ธ ๋ณ€์ˆ˜๊ฐ€ ํ™•์‹คํ•˜๊ฒŒ ๋ฉ”์‹œ์ง€์— ์†ํ•œ๋‹ค๋Š” ๋งฅ๋ฝ์„ ๋ถ€์—ฌํ•ด๋ณด์ž

๋ชจ๋“ˆํ™”๋Š” Class ๋Œ€์‹  ํŒŒ์ผ๋กœ ๋ถ„๋ฆฌํ•ด์„œ ๊ตฌํ˜„ํ•ด๋ณด์•˜๋‹ค.

// makeGuessStatisticsMessage.ts
type MessageParts = {
  number: string;
  verb: string;
  pluralModifier: string;
};  // makeGuessStatisticsMessage ๋ชจ๋“ˆ ๋‚ด ํƒ€์ž… ์„ ์–ธ๋งŒ์œผ๋กœ๋„ ๋งฅ๋ฝ์ด ๋ถ„๋ช…ํ•ด์กŒ๋‹ค.

export default function makeGuessStatisticsMessage(
  candidate: string,
  count: number
) {
  const {number, verb, pluralModifier} = createPluralDependentMessageParts(count)
  const guessMessage = `There ${verb} ${number} ${candidate}${pluralModifier}`;
  return guessMessage
    // ํ•จ์ˆ˜๋ฅผ ๋ถ„๋ฆฌํ•˜์—ฌ ๋ฉ”์‹œ์ง€๊ฐ€ ์–ด๋–ป๊ฒŒ ๊ตฌ์„ฑ๋˜๋Š” ์ง€ ํŒŒ์•…ํ•˜๊ธฐ ์‰ฌ์›Œ์กŒ๋‹ค.
}

function createPluralDependentMessageParts(count: number): MessageParts {
  if (count === 0) {
    return thereAreNoLetters();
  } else if (count === 1) {
    return thereIsOneLetter();
  } else {
    return thereAreManyLetters(count);
  }
}

function thereAreManyLetters(count: number): MessageParts {
  const number = count.toString();
  const verb = "are";
  const pluralModifier = "s";
  return { number, verb, pluralModifier };
}

function thereIsOneLetter(): MessageParts {
  const number = "1";
  const verb = "is";
  const pluralModifier = "";
  return { number, verb, pluralModifier };
}

function thereAreNoLetters(): MessageParts {
  const number = "no";
  const verb = "are";
  const pluralModifier = "s";
  return { number, verb, pluralModifier };
}

 

๋ถˆํ•„์š”ํ•œ ๋งฅ๋ฝ์„ ์—†์• ๋ผ

  • ์ผ๋ฐ˜์ ์œผ๋กœ ์งง์€ ์ด๋ฆ„์ด ๊ธด ์ด๋ฆ„๋ณด๋‹ค ์ข‹๋‹ค. ๋‹จ, ์˜๋ฏธ๊ฐ€ ๋ถ„๋ช…ํ•œ ๊ฒฝ์šฐ์— ํ•œํ•ด์„œ๋‹ค
  • ์ด๋ฆ„์— ๋ถˆํ•„์š”ํ•œ ๋งฅ๋ฝ์„ ์ถ”๊ฐ€ํ•˜์ง€ ์•Š๋„๋ก ์ฃผ์˜ํ•œ๋‹ค.

๊ฐ™์ด ์Šคํ„ฐ๋””ํ•˜์‹œ๋Š” ๋ถ„๊ป˜์„œ ์ž์‹ ์˜ ๊ฒฝํ—˜์„ ๊ณต์œ ํ•ด์ฃผ์…จ๋‹ค.

์ƒˆ๋กœ์šด ํ”ผ์ณ๋ฅผ ๊ฐœ๋ฐœํ•˜๋Š”๋ฐ ํ”ผ์ณ์˜ ์•ฝ์ž๋ฅผ ๋ชจ๋“  ๋ชจ๋“ˆ์˜ ์ ‘๋‘์–ด๋กœ ๋ถ™ํ˜”๋‹ค๊ฐ€ ํ›„ํšŒํ•œ ์ ์ด ์žˆ์œผ์…จ๋‹ค๊ณ  ํ•œ๋‹ค.

// src/components/[ํ”ผ์ณ๋ช…]
// ํ”ผ์ณ์˜ ์•ฝ์ž๊ฐ€ XYZ๋ผ๋ฉด,

// โŒ Bad
const useXYZTermsAgreement = () => {};
const useXYZProfit = () => {};

// โœ… Good
const useTermsAgreement = () => {};
const useProfit = () => {};
  • ์ด๋ฏธ ํ”ผ์ณ ๊ด€๋ จํ•œ ๋ชจ๋“  ์ฝ”๋“œ๋Š” [ํ”ผ์ณ๋ช…]์œผ๋กœ ๋œ ํด๋” ๋‚ด๋ถ€์— ์œ„์น˜ํ•ด ์žˆ๋‹ค. TTT ์ ‘๋‘์–ด๋Š” ๋ถˆํ•„์š”ํ•˜๊ฒŒ ์ค‘๋ณต๋œ ๋งฅ๋ฝ์ด๋‹ค.
  • ๋‹ค๋ฅธ ํ”ผ์ณ์—์„œ ์žฌ์‚ฌ์šฉํ•˜๊ธฐ ํž˜๋“ค๋‹ค

๋งˆ๋ฌด๋ฆฌ

ํด๋ฆฐ์ฝ”๋“œ๋Š” Java ๊ธฐ๋ฐ˜์œผ๋กœ ์„ค๋ช…ํ•˜๋Š” ์ฑ…์ด๋‹ค.

์ด ์ฑ…์„ ์˜จ์ „ํžˆ ๋‚ด ๊ฒƒ์œผ๋กœ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋” ํฐ ๊ด€์ ์—์„œ ์ €์ž์˜ ์˜๋„๋ฅผ ํŒŒ์•…ํ•˜๊ณ , ๋‚ด ์ฃผ์–ธ์–ด๋กœ ์˜ˆ์‹œ๋ฅผ ๋ฐ”๊ฟ”๋ณด๋Š” ๊ณผ์ •์ด ํ•„์š”ํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ๋‹ค.

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

์ด๋ฒˆ ์ฑ•ํ„ฐ๋Š” ๋„ค์ด๋ฐ์—์„œ ์ˆ˜์—†๋Š” ์‹œํ–‰์ฐฉ์˜ค๋กœ ์Šต๋“ํ–ˆ๋˜ ์š”๋ น๋“ค์„ ์‹œ์›ํ•˜๊ณ  ๋…ผ๋ฆฌ์ ์œผ๋กœ ์ •๋ฆฌํ•ด์ฃผ๋Š” ์ฑ•ํ„ฐ์˜€๋‹ค.