April 20, 2020
4์๋ถํฐ ์คํฐ๋๋ฅผ ์์ํ๋ค. ์คํฐ๋๋ java ์ธ์ด๋ฅผ ์ฌ์ฉํ์ง๋ง ๋๋ javascript๋ฅผ ์ฌ์ฉํด์ ์ฐธ์ฌํ๊ณ ์๋ค..!๐ ์ค์ ์ฝ๋์ ๋ํ ํผ๋๋ฐฑ์ ๋ง์ด ๋ฐ์ง ๋ชปํด์ ์์ฝ์ง๋ง java์ javascript ๊ฐ๊ฐ์ ์ธ์ด์ ๊ฐ๋ฐ์ฒ ํ๋ ๋น๊ตํด๋ณผ ์๋ ์๊ณ ๋ฌด์๋ณด๋ค ์ธ์ด์ ๊ตญํ๋์ง ์๋ ํ๋ก๊ทธ๋๋ฐ ๊ธฐ๋ณธ ์์น๋ค, ์ฝ๋ ์ง๋ ๋ฐฉ๋ฒ์ ๋ํด์ ๋ง์ด ์๊ฐํด๋ณผ ์ ์๋ ์ข์ ์๊ฐ์ด ๋ ๊ฒ์ด๋ผ๊ณ ์๊ฐํ๋ค. ๋งค์ฃผ ์๊ฒ๋ ๋ด์ฉ์ด๋ ์ ๋ฆฌํ ๋ง ํ ๋ด์ฉ์ ๊ธฐ๋กํ๋ คํ๋ค.
๋งค์ง๋๋ฒ๋ ์ค๋ช ์์ด ๋ฌด์์ ๋ฑ์ฅํ๋ ์์๋ฅผ ์๋ฏธํ๋ค.
if
๊ฐ์ ์ ์ด๋ฌธ์ด๋ for
๊ฐ์ ๋ฐ๋ณต๋ฌธ์์ ๋ง์ด ๋ฑ์ฅํ๋ฉฐ, ๋งค์ง๋๋ฒ๋ฅผ ์ฌ์ฉํ๋ฉด ์ฝ๋๋ฅผ ์์ ํ ๋ ์ผ์ผ์ด ๋ค ์์ ํด์ผํ๋ค๋ ๋ฒ๊ฑฐ๋ก์ ๋ฟ๋ง ์๋๋ผ ์ฝ๋๋ฅผ ๋ณด๊ณ ์ดํดํ๋๋ฐ ํฐ ์ด๋ ค์์ ์ค๋ค. ๊ทธ๋์ ์ด๋ฌํ ๋งค์ง๋๋ฒ๋ const
ํค์๋๋ฅผ ํตํด ํจ์ ์๋จ์ ์์ ๋ณ์์ ๋ฃ์ด์ค ํ, ์ฌ์ฉํด์ฃผ๋ ๊ฒ์ด ์ข๋ค.
์๋ ์ฝ๋๋ ์ซ์์ผ๊ตฌ ๋๋ค์ซ์๋ฅผ ๋ฌธ์์ด์ ๋ด๋ ํจ์์ธ๋ฐ ๋ฐ๋ณต๋ฌธ ๋ด๋ถ์ ๋งค์ง๋๋ฒ 3์ ์ฌ์ฉํ๋ค.
bad..!
const chooseRandomNumber = () => {
const numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9]
answerNum = ''
for (let i = 0; i < 3; i++) {
const randomNumber = Math.floor(Math.random() * (9 - i))
const chosenNumber = numbers.splice(randomNumber, 1)[0]
const chosen = String(chosenNumber)
answerNum += chosen
}
return answerNum
}
BASEBALLNUMBERLENGTH ๋ผ๋ ๋ณ์์ 3์ ์ด๊ธฐํํด์ค์ผ๋ก์จ, ๋งค์ง๋๋ฒ๋ฅผ ์์ ์ฃผ์๋ค.
good!๐
const chooseRandomNumber = () => {
const BASEBALL_NUMBER_LENGTH = 3
const numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9]
answerNum = ''
for (let i = 0; i < BASEBALL_NUMBER_LENGTH; i++) {
const randomNumber = Math.floor(Math.random() * (9 - i))
const chosenNumber = numbers.splice(randomNumber, 1)[0]
const chosen = String(chosenNumber)
answerNum += chosen
}
return answerNum
}
๋จผ์ ์๋ฐ์คํฌ๋ฆฝํธ์์๋ ๋ณ์๋ช ์ฒซ๊ธ์์ ๊ธ์ ํน์ _, $๋ง ์ฌ ์ ์๋ค. ๊ทธ ์ด์ธ์ ์ซ์๋ ๋ค๋ฅธ ํน์๋ฌธ์๋ ์๋ฌ๋ฅผ ์ถ๋ ฅํ๋ค.
const 1num; // x
const num1 // o
const _name; // o
const $name; // o
์ง์ญ๋ณ์๋ private ๋ณ์์ ๊ฒฝ์ฐ์๋ _
๋ฅผ ์ฌ์ฉํ๋ค.
let _privateVariableName
let _privateFunctionName
๊ทธ๋ฆฌ๊ณ ์์ฝ์ด๋ ๋ณ์๋ช ์ผ๋ก ๋ถ๊ฐ๋ฅํ๋ค. ๋ง์ฐฌ๊ฐ์ง๋ก ์๋ฌ๋ฅผ ์ถ๋ ฅํ๋ค. MDN ์์ฝ์ด ๋ชจ์
const true; // x
const case; // x
const break; // x
// ...
๊ทธ๋ฆฌ๊ณ ๋ณ์๋ช ์ ์ผ๋ฐ์ ์ผ๋ก ์นด๋ฉ์ผ์ด์ค์ ์ค๋ค์ดํฌ์ผ์ด์ค๋ฅผ ํผ์ฉํด์ ์์ฑํ๋ค.
์นด๋ฉ์ผ์ด์ค
๋ ์ฌ๋ฌ ๋จ์ด๊ฐ ๋ค์ด๊ฐ๋ ๋ณ์๋ช
์ผ ๊ฒฝ์ฐ, ์ฒซ๋จ์ด์ ์ฒซ๊ธ์๋ ์๋ฌธ์๋ก, ๋๋ฒ์งธ๋ถํฐ์ ์ฒซ๊ธ์๋ ๋๋ฌธ์๋ก ์์ฑํ๋ ํ๊ธฐ๋ฒ์ด๋ค.
let myname = 'taeeun' // bad
let myName = 'taeeun' // good
์ค๋ค์ดํฌ์ผ์ด์ค
๋ ์ฌ๋ฌ ๋จ์ด๊ฐ ๋ค์ด๊ฐ๋ ๋ณ์๋ช
์ผ ๊ฒฝ์ฐ, _๋ฅผ ํตํด ๋์ด์ ํ๊ธฐํ๋ ๋ฐฉ๋ฒ์ด๋ค.
const MAXLENGTH = 10 // bad
const MAX_LENGTH = 10 // good
๋ณดํต ์์์ ์ค๋ค์ดํฌ์ผ์ด์ค๋ฅผ, ์ผ๋ฐ์ ์ธ ๋ณ์์๋ ์นด๋ฉ์ผ์ด์ค๋ฅผ ์ฌ์ฉํ๋ ๊ฒ ๊ฐ๋ค.
๋ณ์๋ฅผ ๋ค์ด๋ฐํ ๋๋ ๊ตณ์ด ํ์ ์ด๋ ์๋ฃ๊ตฌ์กฐํ์ ๋ช ์ํ์ง ์๋ ๊ฒ์ด ์ข๋ค.
๊ทธ ์ด์ ๋ ํด๋น ๋ณ์์ ํ์ ์ด๋ ์๋ฃ๊ตฌ์กฐํ์ ๋ฐ๊ฟ ๊ฒฝ์ฐ, ๋ชจ๋ ๋ณ์์ด๋ฆ์ ๋ฐ๊ฟ์ค์ผ ํ๊ธฐ ๋๋ฌธ์ด๋ค. ๋ณ์ ๋ค์ด๋ฐ์ ๊ทธ ๋ณ์์ ํ์๋ณด๋ค๋ ํ ๋น๋ ๊ฐ์ ์๋ฏธ๋ฅผ ๋๋ฌ๋ด๋ ๊ฒ์ด ์ข๋ค.
ํจ์์ ๊ฒฝ์ฐ
// bad
const compareTwoArray = (numbers1, numbers2) => {}
// good!
const compareNumbers = (numbers1, numbers2) => {}
๋ฐฐ์ด์ ๊ฒฝ์ฐ
const numberArr = [1, 2, 3, 4]
const numbers = [1, 2, 3, 4]
์ค๋ณต๋ ๊ธฐ๋ฅ์ ์ต๋ํ ํผํ๊ณ ๊ฐ๋ฅํ ์ฃผ์ด์ง field๋ฅผ ์ฌ์ฉํ๋ค.
ํด๋น ์ฝ๋๋ ์๋์ฐจ๋ฅผ ์์ฑํ๊ณ ์ฌ์ฉ์๊ฐ ์ ๋ ฅํ ์ซ์๋งํผ ๋๋ค์ผ๋ก ๊ฐ๊ฐ์ ์๋์ฐจ๋ฅผ ์ด๋์์ผ ๊ฐ์ฅ ๋ฉ๋ฆฌ๊ฐ ์๋์ฐจ๋ฅผ ์ถ๋ ฅํ๋ ํ๋ก๊ทธ๋จ์ด๋ฉฐ,
์ฒ์ ์ฝ๋๋ฅผ ์์ฑํ ๋, ๋๋ ๊ธฐ์กด์ ์๋์ฐจ ๊ฐ์ฒด car ๋ด๋ถ position ๊ฐ์ด ์์ผ๋ฉด์๋ ์๋์ฐจ์ ์ด๋ํ ๊ฑฐ๋ฆฌ๋ฅผ ์ ์ญ์ carDistances ๋ฐฐ์ด์ ๋ฐ๋ก ์ ์ฅํ์๋ค.
bad..!
class Car {
name
position = 0
constructor(name) {
this.name = name
}
go() {
this.position = this.position + 1
}
}
const carDistances = [] // ๊ฐ๊ฐ์ ์๋์ฐจ ์ด๋๊ฑฐ๋ฆฌ
moveCar(car, carNames, carDistances) // ์๋์ฐจ๋ฅผ ์ด๋์ํค๊ณ carDistances ๊ฐ ๋ณ๊ฒฝ
// getWinner ํจ์์์๋ ๋ถํ์ํ๊ฒ carDistances ๋ฐฐ์ด์ ๋ฐ์์ผํ๋ค.
const getWinner = (carNames, carDistances) => {
const max = Math.max(...carDistances)
let winner = ''
for (let i = 0; i < carNames.length; i++) {
if (max === carDistances[i]) winner += `${carNames[i]},`
}
return winner
}
ํ์ง๋ง ๋ฐฐ์ด ๋์ car.position ์ ์ฌ์ฉํ๋ฉด ์ฝ๋๋ ๊น๋ํด์ง๊ณ ๋ถํ์ํ ๋ฉ๋ชจ๋ฆฌ ๋ญ๋น๋ฅผ ๋ง์ ์ ์๋ค.
good ๐
moveCar(car) // moceCar ํจ์๋ car๊ฐ์ฒด์ position๋ง ์ฌ๋ ค์ฃผ๋ ์ญํ ๋ง ์ํ!
// getWinner ํจ์๋ car๊ฐ์ฒด๋ค์ด ๋ค์ด์๋ cars ๋ฐฐ์ด๋ง ๋ฐ๊ณ position ๋น๊ต๋ง ํด์ฃผ๋ ์ญํ ๋ง ์ํ!
const getWinner = cars => {
let max = 0
cars.map(car => {
if (car.position > max) max = car.position
})
let winner = []
cars.map(car => {
if (max === car.position) winner.push(car.name)
})
return winner.join()
}
์ธ๋ฐ์๋ ์ค๋ณต์ ๊ผญ ํผํ๊ณ ๊ฐ๊ฐ์ ํจ์๋ ์ ๋ง ์๊ธฐ์ ๊ธฐ๋ฅ๋ง ์ํํ ์ ์๋๋ก ์ง๋ ๊ฒ์ด ์ข๋ค.
์คํฐ๋ ๋ฏธ์ ํ๋ก๊ทธ๋๋ฐ ์๊ตฌ์ฌํญ์์๋ ํญ์ ์ด๋ฌํ ์กฐ๊ฑด์ด ๋ค์ด์์๋ค.
์กฐ๊ฑด | |
---|---|
1 | ์ต๋ํ indent(์ธ๋ดํธ, ๋ค์ฌ์ฐ๊ธฐ) depth๋ฅผ 2์ด์ ์ฐ์ง ์์์ผํจ |
2๏ธ | ํจ์ (๋๋ ๋ฉ์๋)์ ๊ธธ์ด๊ฐ 10๋ผ์ธ์ ๋์ด๊ฐ์ง ์๋๋ก ๊ตฌํ |
์ด๋ ํจ์๋ฅผ ์ต๋ํ ์๊ธฐ ๊ธฐ๋ฅ๋ง ์ํํ ์ ์๋๋ก ์ชผ๊ฐ๋ ๊ฒ์ ์๊ตฌํ๋ค. ํจ์๋ฅผ ์ชผ๊ฐ๋ฏ๋ก์, ๊ฐ๋ ์ฑ๊ณผ ์ ์ง๋ณด์๊ฐ ์ข์์ง๋ฉฐ, ์์ ์ฑ์ ์ฌ๋ผ๊ฐ๋ค.
OO makes code understandable by encapsulating moving parts. FP makes code understandable by minimizing moving parts. -Michael Feathers
๊ฐ์ฒด์งํฅ์ ๋์ํ๋ ๋ถ๋ถ์ ์บก์ํํด์ ์ดํดํ ์ ์๊ฒ ํ๊ณ , ํจ์ํ ํ๋ก๊ทธ๋๋ฐ์ ๋์ํ๋ ๋ถ๋ถ์ ์ต์ํํด์ ์ฝ๋ ์ดํด๋ฅผ ๋๋๋ค. - ๋ง์ดํด ํ๋์ค
์๋ฐ์คํฌ๋ฆฝํธ๋ ๋ค๋ฅธ ๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ค์ ๋นํด ๋ ์ ์ฐํ ํน์ง์ ๊ฐ์ง์ง๋ง ๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ์ ์ง์ํ๋ฉฐ, ๋ํ ํจ์ํ ํ๋ก๊ทธ๋๋ฐ๋ ์ง์ํ๋ค. ์ฌ๊ธฐ์ ์ง์ํ๋ค๋ ์๋ฏธ๋ ์๋ฒฝํ ์ธ์ด์ ํน์ฑ์ ์๋์ง๋ง ๋น์ทํ๊ฒ ๊ตฌํ์ ๊ฐ๋ฅํ๋ค๋ ๋ง์ด๋ค. ์๋ฒฝํ๊ฒ ๊ฐ์ฒด์งํฅ์ ์ผ๋ก ์ฝ๋๋ฅผ ์์ฑํ๊ณ ๋ชจ๋ ํจ์๋ฅผ ํจ์ํ ํ๋ก๊ทธ๋๋ฐ์ผ๋ก ์์ฑํ๋ ๊ฒ์ ์ด๋ ต๊ฒ ์ง๋ง ์งํฅ์ ์ ์ ํ์ ํ๊ณ ์ต๋ํ ์ข์ ์ฝ๋๋ฅผ ์์ฑํ๊ณ ์ ํ๋ ๊ฒ์ด ์ค์ํ์ง ์์๊น? ์๊ฐํด๋ณด์๋ค.
๋ค์ ํจ์๋ ์ฌ์ฉ์๊ฐ ์ ๋ ฅํ ์๋์ฐจ์ด๋ฆ์ด 5๊ธ์ ์ด๊ณผ์ธ์ง ๊ฒ์ฌํ๋ ํจ์์ด๋ค.
ํด๋น ํจ์๋ ์ ๋ ฅํ ๊ฐ์ ๊ธธ์ด๋งํผ ๋ฐ๋ณต๋ฌธ์ ๋๋ฉด์ ์กฐ๊ฑด์ ๋ง์กฑํ๋ฉด errorCheck ๋ณ์๋ฅผ ๋ฐ๊พธ๋๋ก ์ง์ ์ค๊ฐ์ ์กฐ๊ฑด์ด ๋ง์กฑํ์ฌ๋ ๋ถํ์ํ๊ฒ ๋ชจ๋ ๋ฐ๋ณต๋ฌธ์ ์ํํ๋ค.
badโฆ!
const checkCarsNameLength = carNames => {
const MAX_CARNAME_LENGTH = 5
let errorCheck = true
for (let i = 0; i < carNames.length; i++) {
if (carNames[i].length > MAX_CARNAME_LENGTH) errorCheck = false
}
// ์ด๋ฆ์ด 5์ด๊ณผ์ธ ๊ฒ์ด ์์ผ๋ฉด false๋ฅผ, ์์ผ๋ฉด true๋ฅผ ๋ฆฌํด.
return errorCheck
}
ํ์ง๋ง ์กฐ๊ฑด์ ๋ง์กฑํ์ ๋ ๋ฐ๋ก ๊ฐ์ return ํ๋๋ก ๋ฐ๊ฟจ๋๋ ๋ณ์๋ฅผ ์ฐ์ง์์๋ ๋๊ณ , ์กฐ๊ฑด ๋ง์กฑ์, ๋ฐ๋ณต๋ฌธ๋ ์ ๋ถ ํ์ํ์ง ์์๋ ๋์๋ค.
good!!๐
const checkCarsNameLength = carNames => {
const MAX_CARNAME_LENGTH = 5
for (let i = 0; i < carNames.length; i++) {
if (carNames[i].length > MAX_CARNAME_LENGTH) return false
}
return true
}
์ด๋ ๊ฒ ๋ถํ์ํ ๋ณ์๋ฅผ ์ค์ด๊ณ , return ๊ณผ break ๋ก ๊ฐ๋ฅํ๋ฉด ๋ฐ๋ณต๋ฌธ์ ๋น ๋ฅด๊ฒ ๋น ์ ธ๋์ฌ ์ ์๋๋ก ์ง๋ ๊ฒ์ด ์ข๋ค.
java ์คํฐ๋์ฌ์ ์ฃผ์ด์ง ๋ฏธ์
์ ๊ฐ์ฒด์งํฅ์ ์ธ class Type
์ ์ฃผ๋ก ์ฌ์ฉํ๋ค. ์๋ฐ์คํฌ๋ฆฝํธ์๋ class ๋ฌธ๋ฒ์ด ์์ด์ ์ฝ๋ฉ์ ๊ฐ๋ฅํ์ง๋ง, ํ์
์ด ์ง์ ๋์ด์์ง ์์์ ์ฝ๋๋ฅผ ์ง๋ฉด์ ํ์ฌ ๋ณ์๊ฐ ์ด๋ค ํ์
์ธ์ง๊ฐ ๋งค์ฐ ํท๊ฐ๋ ธ๋ค.
Car๊ฐ์ฒด ๋ฐฐ์ด์ ์ธ์๋ก ๋ฐ๋ ํจ์์ ๊ฒฝ์ฐ
// javascript : ๋ฐฐ์ด์ธ๋ฐ, ๋ด๋ถ ์์๋ค์ ํ์
์ด ๋ถ๋ช
ํํจ
makeCars(cars, carNames)
// typescript : ๋ฐฐ์ด ๋ด๋ถ ํ์
๋ช
์๋ก ์๋ฌ๋ฐฉ์ง + ํท๊ฐ๋ฆผ๋ฐฉ์ง!
makeCars(cars: Car[], carNames: string[])
๋ค์ ์ฝ๋๋ ๋ก๋๋ฅผ ๊ตฌ๋งคํ๊ณ ๋น์ฒจ๋ก๋์ ๋น๊ตํ๋ ํ๋ก๊ทธ๋จ์ด๋ฉฐ, ๋ก๋ ํ์ฅ์ ์๋ฏธํ๋ Lotto
ํ์
๊ณผ ์ค์ ๋น์ฒจ๋ก๋๋ฅผ ์๋ฏธํ๋ WinningLotto
ํ์
์ด ๋ฐ๋ก ์ ์๋์ด์์ด ๋์ฑ ํท๊ฐ๋ ธ๋ค.
/**
* ๋ก๋ ํ์ฅ์ ์๋ฏธํ๋ ๊ฐ์ฒด
*/
class Lotto {
numbers = []
constructor(numbers) {
this.numbers = numbers
}
}
/**
* ๋น์ฒจ ๋ฒํธ๋ฅผ ๋ด๋นํ๋ ๊ฐ์ฒด
*/
class WinningLotto {
lotto = null
bonusNo = 0
constructor(lotto, bonusNo) {
this.lotto = lotto
this.bonusNo = bonusNo
}
match(userLotto) {
let count = 0
let bonusCount = 0
this.lotto.numbers.map(number => {
userLotto.numbers.indexOf(number) >= 0 && count++
})
userLotto.numbers.indexOf(this.bonusNo) >= 0 && bonusCount++
if (count === 6) return 'FIRST'
if (count === 5 && bonusCount) return 'SECOND'
if (count + bonusCount === 5) return 'THIRD'
if (count + bonusCount === 4) return 'FOURTH'
if (count + bonusCount === 3) return 'FIFTH'
return 'MISS'
}
}
// javascript : ํจ์์ ์ธ์๋ก ๋ค์ด๊ฐ๋ ๋ณ์๋ช
๋ค์ด ๋งค์ฐ ํท๊ฐ๋ฆผ!!
matchLottos(myLottos, winningLotto)
// typescript : ๋ด๋ถ ํ์
๋ช
์๋ก ์๋ฌ๋ฐฉ์ง + ํท๊ฐ๋ฆผ๋ฐฉ์ง!
matchLottos(myLottos: Lotto[], winningLotto: WinningLotto): void
์์ง ํ์ ์คํฌ๋ฆฝํธ๋ ์ต์์น ์์ง๋ง, ์ด ๊ธฐํ์ ๊ฐ์ด ํ์ตํ๋ฉด ์ข์ ๊ฒ ๊ฐ๋ค.
2020๋
4์ 18์ผ, ์ ์ค ์คํ๋ผ์ธ ์คํฐ๋์์ ํ
์คํธ
์ ๋ํด์ ๋ฐฐ์ ๋ค.
์คํฐ๋์์๋ java ํ ์คํ ํ๋ ์์ํฌ JUnit ๋ฅผ ์ฌ์ฉํ๋๋ฐ, ๋๋ ์๋ฐ์คํฌ๋ฆฝํธ์ด๊ธฐ ๋๋ฌธ์ jest๋ผ๋ ํ๋ ์์ํฌ๋ฅผ ์ ํํด์ ํ๋ฒ ํ ์คํธ ํด๋ณด์๋ค.
์ฌ์ฉ๋ฐฉ์์ ๋น์ทํ๋ค.
๋จผ์ jest ํ๋ ์์ํฌ๋ฅผ ์ค์นํ๊ณ ,
npm i -D jest
package.json
ํ์ผ์ script์ jest ๋ช
๋ น์ด๋ฅผ ์ถ๊ฐ์์ผ์ฃผ๋ฉด ๋๋ค. ์คํ์ : npm run test
"scripts": {
"test": "jest"
}
๊ทธ๋ฆฌ๊ณ test ๋๋ ํ ๋ฆฌ๋ฅผ ๋ง๋ค์ด ํด๋น ํ ์คํ ํ์ผ.js ์ ์์ฑํด์ฃผ๋ฉด ๋์๋ค.
// calculatorTest.js
class Calculator {
add(i, j) {
return i + j
}
subtract(i, j) {
return i - j
}
multiple(i, j) {
return i * j
}
divide(i, j) {
return i / j
}
}
test('๋ง์
', () => {
let calculator = new Calculator()
expect(calculator.add(1, 2)).toBe(3)
})
test('๋บ์
', () => {
let calculator = new Calculator()
expect(calculator.subtract(1, 2)).toBe(-1)
})
test('๊ณฑ์
', () => {
let calculator = new Calculator()
expect(calculator.multiple(1, 2)).toBe(2)
})
test('๋๋์
', () => {
let calculator = new Calculator()
expect(calculator.divide(2, 1)).toBe(2)
})
jest API์ test๋ผ๋ ๋ฉ์๋๋ฅผ ์ฌ์ฉํ๋๋ฐ, jest API ๋ฉ์๋๋ ๋ค์ํ๊ฒ ์๋ ๊ฒ ๊ฐ๋ค. ์๊ฐ๋ ๋ jest ๊ณต์๋ฌธ์๋ฅผ ํ๋ฒ ์ญ ๋ณผ ๊ฒ.
test("ํ
์คํธ ์ด๋ฆ", function, timeout)
1๏ธโฃ ํ ์คํธ ์ด๋ฆ์ ํ๊ธ๋ก ์์ฑํ๋ ๊ฒ์ด ์ข๋ค. ์์ ํ ์คํธ๋ ๋งค์ฐ ๊ฐ๋จํ์ง๋ง ํ๋ก๊ทธ๋จ์ด ๋ณต์กํด์ง๋ฉด ํ ์คํธ๋ช ๋ ๊ธธ์ด์ง ๊ฒ์ด๊ณ ๊ฐ๊ฐ ํ ์คํธ๋ง๋ค ์ดํดํ๊ธฐ ์ฝ๊ณ ์๋ฏธ๋ฅผ ์ ์ ๋ฌํด์ฃผ์ด์ผ ํ๊ธฐ ๋๋ฌธ์ด๋ค.
2๏ธโฃ ํ ์คํธ๋ ๊ฐ์ฅ ์์ ๋จ์์ ๊ธฐ๋ฅ๋ถํฐ ํ ์คํธํ๋ค. ์๋ฅผ๋ค์ด, A,B๊ฐ C๋ผ๋ ๊ธฐ๋ฅ์ ์์กด๋ ๊ฒฝ์ฐ, A,B๋ฅผ ํ ์คํธํ๊ณ ๊ฒ์ฆ์ด ์๋ฃ๋๋ฉด C์์ A,B๊ฐ ํฌํจ๋์ง ์์ ๊ธฐ๋ฅ๋ง ํ ์คํธํ๋ฉด ๋๋ค.
3๏ธโฃ ํ๋์ ํ ์คํธ๋ ๋ ๋ฆฝ์ ์ด์ด์ผ ํ๋ค. ํ ์คํธ๋ผ๋ฆฌ ์์กดํด์๋ ์๋๋ค.
https://ui.toast.com/fe-guide/ko_CODING-CONVENSION/#promise-executor-%ED%95%A8%EC%88%98
https://rinae.dev/posts/functional-js-tutorial
https://futurecreator.github.io/2018/10/05/why-functional-programming/
https://developer.mozilla.org/ko/docs/Web/JavaScript/IntroductiontoObject-Oriented_JavaScript
https://developer.mozilla.org/ko/docs/Are-introductionto_JavaScript
https://www.zerocho.com/category/JavaScript/post/576cafb45eb04d4c1aa35078
https://meetup.toast.com/posts/90
์ข์ ๊ธฐํ๊ฐ ์์ด์ OOP ์คํฐ๋๋ฅผ ํ๊ฒ ๋์๋ค. ๋น๋ก java ์คํฐ๋์ง๋ง ์คํฐ๋๋ฅผ ํ๋ฉด์ ๋ง์ ๊ฒ๋ค์ ๋ฐฐ์ฐ๋ ๊ฒ ๊ฐ๋ค. ํ์์ ๊ธฐ๋ฅ๊ตฌํ ์์ฃผ์ ๊ณต๋ถ๋ฅผ ํ๋ค๋ฉด ์ด๋ฒ ์คํฐ๋๋ฅผ ํตํด์๋ ์ฝ๋๋ฅผ ์์ฑํ๋ ๋ฐฉ๋ฒ์ ๋ํด์ ๋ง์ด ์๊ฐํด๋ณผ ์ ์์ด์ ์ข์๋ค. ํ์ฌ๋ ํ ์คํธ ์ฝ๋ ์์ฑ์ ๊ดํ ๋ฏธ์ ์ ์งํ ์ค์ ์๋๋ฐ ์์ผ๋ก ๋ ์ด์ฌํ ์ํด์ผ๊ฒ ๋ค!!