โท ๊ธฐ๋ณธ ๊ท์น
โ [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']
'๊ธฐํ > ์ฐ์ํํ ํฌ์ฝ์ค > ํ๋ฆฌ์ฝ์ค' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[ํ๋ฆฌ์ฝ์ค 4์ฃผ์ฐจ] ํฌ๋ฆฌ์ค๋ง์ค ํ๋ก๋ชจ์ ํ๊ณ (0) | 2023.11.17 |
---|---|
[ํ๋ฆฌ์ฝ์ค 3์ฃผ์ฐจ] ๋ก๋ ๊ฒ์ ํ๊ณ (1) | 2023.11.09 |
[ํ๋ฆฌ์ฝ์ค 2์ฃผ์ฐจ] 1์ฃผ์ฐจ ๊ณตํต ํผ๋๋ฐฑ ํ์ต (0) | 2023.11.02 |
[ํ๋ฆฌ์ฝ์ค 2์ฃผ์ฐจ] ์๋์ฐจ ๊ฒฝ์ฃผ ๊ฒ์ ํ๊ณ (0) | 2023.11.01 |
[ํ๋ฆฌ์ฝ์ค 1์ฃผ์ฐจ] ์๋ฐ ์ฝ๋ฉ ์ปจ๋ฒค์ (ํด์ค) (1) | 2023.10.26 |