๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

๊ธฐํƒ€/์šฐ์•„ํ•œํ…Œํฌ์ฝ”์Šค > ํ”„๋ฆฌ์ฝ”์Šค

[ํ”„๋ฆฌ์ฝ”์Šค 3์ฃผ์ฐจ] - ์ข‹์€ ๋„ค์ด๋ฐ์„ ์œ„ํ•œ ๊ทœ์น™

โ™งํ•™์Šตํ•œ ๊ธ€์˜ ์›๋ณธ

โ–ท ๊ธฐ๋ณธ ๊ทœ์น™

โœ… [S-I-D] ๋”ฐ๋ฅด๊ธฐ

๊ธฐ์–ตํ•˜๊ธฐ ์‰ฝ๊ฒŒ Short

์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ์ฝํžˆ๋„๋ก Intuitive(์ง๊ด€์ ์œผ๋กœ)

๋ฌด์—‡์„ ํ•˜๊ณ  ์†Œ์œ ํ•˜๋Š”์ง€ ๊ฐ€์žฅ ํšจ๊ณผ์ ์ธ ๋ฐฉ๋ฒ•์œผ๋กœ Descriptive(์„œ์ˆ ํ•˜๊ธฐ)

 

โœ… ์ถ•์•ฝํ˜• ์ด๋ฆ„ ํ”ผํ•˜๊ธฐ

- onItmClk (x)

- onItemClick (o)

 

โœ… ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ํฌํ•จํ•œ ์ด๋ฆ„ ํ”ผํ•˜๊ธฐ

- List<Item> itemList (x)

- List<Item> items (o)

 

โœ… ๋ฌธ๋งฅ ์ƒ ์ค‘๋ณต์ด ์žˆ๋Š” ์ด๋ฆ„ ํ”ผํ•˜๊ธฐ

class MenuItem{
    handleMenuItemClick = ... (x)
    handleClick = ... (o)
}

MenuItem.handleMenuItemClick (x)
MenuItem.handleClick (o)

โœ… ์˜ˆ์ƒ๋œ ๊ฒฐ๊ณผ ๋ฐ˜์˜ํ•˜๋Š” ์ด๋ฆ„ ์ง“๊ธฐ

/* Bad */
const isEnabled = itemCount > 3
return <Button disabled={!isEnabled}>

/* Good */
const isDisabled = itemCount <= 3
return <Button disable={isDisabled}>

โœ… ํ•จ์ˆ˜ ์ด๋ฆ„์€ A/HC/LC ํŒจํ„ด์œผ๋กœ ์ง“๊ธฐ

ํ•จ์ˆ˜ ์ด๋ฆ„ = (prefix) + action(A) + high context(HC) + low context(LC)

ํ•จ์ˆ˜ ์ด๋ฆ„              Prefix	Action(A)  High context(HC)  Low context(LC)
getUser                          get	       User	
getUserMessages                  get	       User            Messages
handleClickOutside               handle	       Click           Outside
shouldDisplayMessage   should	 Display       Message

ํ•จ์ˆ˜์˜ ์˜๋ฏธ๋Š” ํ•จ์ˆ˜๋ฅผ ์ด๋ฃจ๋Š” ๋‹จ์–ด๋“ค์„ ์–ด๋–ป๊ฒŒ ๋ฐฐ์น˜ํ•˜๋ƒ์— ๋”ฐ๋ผ ๋ฌธ๋งฅ์ด ์™„์ „ํ•˜๊ฒŒ ๋‹ฌ๋ผ์ง„๋‹ค.

HC์™€ LC์˜ ์ฐจ์ด๋Š” ํ•จ์ˆ˜์˜ ๊ธฐ๋Šฅ์—์„œ ๊ฐ•์กฐํ•˜๊ณ  ์‹ถ์€๊ฒƒ์„ HC๋กœ ์ •ํ•˜๋Š” ๊ฒƒ์ด๋‹ค

 

์˜ˆ๋ฅผ ๋“ค์–ด, shouldUpdateComponent ๋Š” ์ปดํฌ๋„ŒํŠธ๋ฅผ ์—…๋ฐ์ดํŠธ ํ•˜๋Š” ๊ฒƒ์„ ๊ฐ•์กฐํ•œ๋‹ค๋Š” ์˜๋ฏธ์ด๊ณ ,

shouldComponentUpdate ๋Š” ์ปดํฌ๋„ŒํŠธ๊ฐ€ ์Šค์Šค๋กœ ์—…๋ฐ์ดํŠธ ๋˜์•ผํ•œ๋‹ค๋Š” ์˜๋ฏธ์ด๋‹ค.

โ–ท ํ•จ์ˆ˜์˜ Action ์— ์“ฐ์ผ ๋™์‚ฌ๋“ค

โœ… get ๊ณผ set

/* get */ ์ฆ‰์‹œ ๋ฐ์ดํ„ฐ์— ์ ‘๊ทผํ•  ๋•Œ
function getFruitCount() {
  return this.fruits.length
}

/* set */ A์˜ ๊ฐ’์„ B๋กœ ์„ค์ •ํ•  ๋•Œ
function setFruits(nextFruits) {
  fruits = nextFruits
}

โœ… remove ์™€ delete

remove : ์–ด๋–ค ๊ณณ(๋ณต์‚ฌ ๋œ ๊ณณ)์—์„œ ๋ฌด์–ธ๊ฐ€๋ฅผ ์ง€์šธ ๋•Œ

delete : ์‹ค์ œ ์˜์—ญ(์›๋ณธ ๋ฐ์ดํ„ฐ ๊ฐ™์€ ๊ณณ)์—์„œ ๋ฌด์–ธ๊ฐ€๋ฅผ ์™„์ „ํžˆ ์ง€์šธ ๋•Œ ex) DB์˜ ๋ฐ์ดํ„ฐ

 

โœ… add ์™€ create์˜ ์ฐจ์ด

add๋Š” ์žฅ์†Œ๊ฐ€ ํ•„์š”ํ•˜์ง€๋งŒ create๋Š” ์žฅ์†Œ๊ฐ€ ํ•„์š”์—†๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด, addItem์€ ์•„์ดํ…œ์„ ์ถ”๊ฐ€ํ•˜๋‹ค๋ž€ ๋œป์œผ๋กœ ๋ฌธ๋งฅ์ƒ ์–ด๋””์—? ์ถ”๊ฐ€ํ–ˆ๋‹ค๋Š” ๊ฑฐ์ง€? ๊ฐ™์€ ์˜๋ฌธ์ด ๋“ ๋‹ค.

์ด ์ฒ˜๋Ÿผ add๋Š” ์ถ”๊ฐ€์ ์œผ๋กœ ์–ด๋–ค ์žฅ์†Œ๊ฐ€ ํ•จ์ˆ˜์— ์ด๋ฆ„์— ํฌํ•จ๋˜์–ด์•ผ ํ•œ๋‹ค.

 

ํ•˜์ง€๋งŒ, createItem์€ ์•„์ดํ…œ์„ ๋งŒ๋“ ๋‹ค. ๋ผ๊ณ  ๋๋งบ์Œ์„ ๋งบ๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ํ•จ์ˆ˜์— ์žฅ์†Œ๊ฐ€ ํ•„์š” ์—†๋‹ค.

 

โœ… compose

compose : ์ด๋ฏธ ์กด์žฌํ•˜๋Š” ๊ฒƒ์—์„œ ์ƒˆ๋กœ์šด ๋ฐ์ดํ„ฐ๋ฅผ ์ฐฝ์กฐํ•  ๋•Œ ์“ด๋‹ค.

function composePageUrl(pageName, pageId) {
  return pageName.toLowerCase() + '-' + pageId
}

โœ… handle

handle : ํ–‰๋™์„ ๋‹ค๋ฃฐ ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค. ์ฃผ๋กœ, callback method ์˜ ์ด๋ฆ„์„ ์ง€์ •ํ•  ๋•Œ ์“ฐ์ธ๋‹ค๊ณ  ํ•œ๋‹ค. ์ถœ๋ ฅ ๋Š๋‚Œ

function handleLinkClick() {
  console.log('Clicked a link!')
}

link.addEventListener('click', handleLinkClick)

โ–ท ์ ‘๋‘์–ด (prefixes)

โœ… is

ํ˜„์žฌ์‹œ๊ฐ„์˜ ํŠน์ง•๊ณผ ์ƒํƒœ๋ฅผ ๋ฌ˜์‚ฌํ•  ๋•Œ ์ฃผ๋กœ boolean ๊ณผ ํ•จ๊ป˜ ์“ฐ์ธ๋‹ค.

const color = 'blue'
const isBlue = color === 'blue' // characteristic
const isPresent = true // state

if (isBlue && isPresent) {
  console.log('Blue is present!')
}

โœ… has

ํ˜„์žฌ ๋ฌธ๋งฅ์—์„œ ํŠน์ • ๊ฐ’์ด๋‚˜ ์ƒํƒœ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์„ ๋•Œ ์ฃผ๋กœ boolean๊ณผ ํ•จ๊ป˜ ์“ฐ์ธ๋‹ค.

/* Bad */
const isProductsExist = productsCount > 0
const areProductsPresent = productsCount > 0

/* Good */
const hasProducts = productsCount > 0

โœ… should

ํŠน์ • ํ–‰๋™์„ ์œ ๋ฐœํ•ด์•ผ ํ•˜๋Š” ์ƒํ™ฉ์ผ ๋•Œ ์ฃผ๋กœ boolean๊ณผ ํ•จ๊ป˜ ์“ฐ์ธ๋‹ค.

/* url๊ณผ ์˜ˆ์ƒ๋œUrl์ด ๋‹ค๋ฅด๋ฉด Url์„ ์—…๋ฐ์ดํŠธ ํ•ด์•ผํ•œ๋‹ค! */
function shouldUpdateUrl(url, expectedUrl) {
  return url !== expectedUrl
}

โœ… ๊ทธ ์™ธ

  • min/max ์™€ prev/next ๋„ ์žˆ๋‹ค.
  • ๋‹จ์ˆ˜๋Š” ํ•˜๋‚˜์˜ ๊ฐ’์ผ ๋•Œ, ๋ณต์ˆ˜๋Š” ์—ฌ๋Ÿฌ๊ฐœ์˜ ๊ฐ’์„ ๊ฐ€์ง€๊ณ  ์žˆ์„ ๋•Œ ์“ฐ๊ธฐ
/* Bad */
const friends = 'Bob'
const friend = ['Bob', 'Tony', 'Tanya']

/* Good */
const friend = 'Bob'
const friends = ['Bob', 'Tony', 'Tanya']