<๊ฐ์>
ํ๋ก๊ทธ๋จ์ ๋ง๋ค ๋ ์๋ง์ ์์ธ์ฒ๋ฆฌ๊ฐ ํ์ํ๋ค.
๊ณ์ฐ๊ธฐ์๋ ์๋ง์ ์์ธ์ฒ๋ฆฌ๊ฐ ํ์ํ์ง๋ง ์ผ๋จ ๋ช ๊ฐ๋ง ํด๋ณด์
๋ฌธ์ 1: ๋ ๋ฒ์งธ ๊ฐ์ ํ ์๋ฆฌ ์ ๋ฐ์ ํด๋ฆญํ ์ ์๋ ์ด์
๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ ์ด์ :
const onPressNum = (num) => {
if(currentOperator) {
setResult(input);
setInput(num);
}
else{
const newInt = Number(`${input}${num}`)
setInput(newInt)
}
};
์ฒซ๋ฒ์งธ ์ซ์ ๋๋ฅด๊ธฐ -> = ์๋ ์ฐ์ฐ์ ๋๋ฅด๊ธฐ -> ๋ ๋ฒ์งธ ์ซ์ ๋๋ฅด๊ธฐ ์์ผ๋ก ์งํ๋๋ค.
์์ ๋ก์ง์ ๋ณด๋ฉด ํ์ฌ ์ฐ์ฐ์๊ฐ ๊ณจ๋ผ์ ธ ์์ผ๋ฉด, ๋ถ์ฌ์ฐ์ง ๋ง๊ณ , ๋ฐ๋ก ๋ฐ๋ก result๋ก ๊ฐ์ ๋๊ธฐ๊ฒ ๋์ด์๋ค. ๊ทธ๋์ ๋ ๋ฒ์งธ ์ซ์์์๋ ํ ์๋ฆฌ์ ์ด๊ณผํด์ ์ธ ์ ์๋ ๊ฒ์ด๋ค.
ํด๊ฒฐ๋ฐฉ์:
์ด๋ฅผ ๋ง์ผ๋ ค๋ฉด,
=์ด ์๋ ์ฐ์ฐ์๋ฅผ ๋๋ฅด๊ณ ๋ ๋ค ๋งจ ์ฒ์ ์ซ์ ํจ๋๋ฅผ ๋๋ฅผ ๋, ์ด๋ฏธ ์จ ์๋ ์ฒซ ๋ฒ์งธ ์ซ์๋ result๋ก ๋นผ๊ณ , input ์ฐฝ์ด ์ด๊ธฐํ ๋๊ฒ ํ๋ค.
๋ ๋ฒ์งธ ํจ๋ ๋๋ฅด๊ธฐ ๋ถํฐ๋ ์ด์ด๋ถ์ผ ์ ์๊ฒ ํ๋ค .
์ด๋ฅผ ์ํด์ boolean useState ๊ตฌ๋ฌธ์ด ํ์ํ๋ค.
const[isClickedOperator, setIsClickedOperator] = useState(false);
์ด๊ธฐ ์ํ๋ false ์ด๋ค.
๊ทธ๋ฆฌ๊ณ ์ฐ์ฐ์๋ฅผ ๋๋ฅด๋ ์๊ฐ์ ์ฐ์ฐ์๋ฅผ ๋๋ ๋๋ฅผ ๋ฌป๋ isClickedOperator๋ฅผ true๋ก ๋ฐ๊ฟ์ค๋ค.
๊ทธ๋ฆฌ๊ณ ์ซ์ ํจ๋๋ฅผ ๋๋ ์ ๋ ๋์ํ๋ ํจ์๋ฅผ ์ ๋ณด๊ฒ ๋ค.
const onPressNum = (num) => {
if(currentOperator && isClickedOperator) {
setResult(input);
setInput(num);
setIsClickedOperator(false);
}
else{
const newInt = Number(`${input}${num}`)
setInput(newInt)
}
};
๋ง์ฝ์ ์ง์ ์ ์ฐ์ฐ์๋ฅผ ๋๋ ์ผ๋ฉด if ๊ตฌ๋ฌธ์ด ์คํ ๋ ๊ฒ์ด๋ค. ๊ทธ๋ฆฌ๊ณ if ๊ตฌ๋ฌธ ๋งจ ๋ง์ง๋ง์ ๋ณด๋ฉด setIsClickedOperator๋ฅผ false๋ก ๋ฐ๊พธ์๋ค.
๋ค์ ๋ฒ์ ์ฌ์ฉ์๊ฐ ๋ค์ ์ซ์ ํจ๋๋ฅผ ๋๋ฅธ๋ค๋ฉด ์ด์ IsClickedOperator๊ฐ false ์ด๋ else ๊ตฌ๋ฌธ์ด ์คํ๋ ๊ฒ์ด๋ค.
๋ฌธ์ 2.
ํ๋์ ๊ณ์ฐ์ ๋๋ธ ๋ค =์ ๋ค์ ๋๋ฅด๋ฉด, ์ง์ ์ฐ์ฐ์์ ๋๋ฒ์งธ ์ ๋ ฅ ์ซ์๋ก ๊ณ์ ์ฐ์ฐ์ด ์ด๋ฃจ์ด์ ธ์ผ ํ๋๋ฐ, ์๊พธ ์ ๋ ฅ์ฐฝ์ ์๋ ๋ด์ฉ์ผ๋ก ์ฐ์ฐ์ด ์ด๋ฃจ์ด์ง
(์์: 12+ 3 = 15๋ฅผ ํ์. ์ด ๋ค์ =์ ๋๋ฅด๋ฉด 15+3 = 18, ๋ค์ = ๋๋ฅด๋ฉด 18+ 3 = 21... ์ด๋ฐ ์์ผ๋ก ๊ฐ์ผํจ.)
(ํ์ฌ ์ํ: 12+3 = 15๋ฅผ ํ์. ์ด ๋ค์ =์ ๋๋ฅด๋ฉด ์ ๋ ฅ์ฐฝ์ 15๊ฐ ๋ ๋ํด์ง. 15+ 15 = 30, ๋ค์ = ๋๋ฅด๋ฉด 30 + 30 = 60...)
๋ฌธ์ ๊ฐ ์๊ธด ์ด์ :
ํ์ฌ ๊ณ์ฐ ํจ์๋ฅผ ๋ณด๋ฉด =์ ๋๋ฅธ๋ค๋ฉด, ๊ณ์ result์ input์ ๋ ํจ.
๊ทธ๋ฌ๋๊น result์ input์ ๊ฐ์ ๊ฐ์ด๊ธฐ์ = ๋๋ฅด๋ฉด ๊ณ์ *2๊ฐ ๋ ๋ฟ์ด๋ค.
(๊ณ์ฐ ๊ฒฐ๊ณผ๋ฅผ ์ํ์ฐฝ์ ๋์ฐ๊ธฐ ๋๋ฌธ์ ์ํ์ฐฝ์ ํ์๋๋ input๋ ๊ณ์ ์ต์ ํ ๋๋ค. )
ํด๊ฒฐ ๋ฐฉ์:
ํ์ฌ ๋ณด๋ฉด ๋๋ฒ์งธ ์ ๋ ฅ์ ์ ์ฅํ๋ ๊ณต๊ฐ์ด ์๋ค.
๋ ๋ฒ์งธ ์ ๋ ฅ์ tempInput์ ์ ์ฅํ๊ณ , =์ ๋๋ ์ ์, ์ง์ ์ =์ ๋๋ฅธ ์ ๋ ฅ์ด ์๋ค๋ฉด result + tempInput , ์ง์ ์ = ๋๋ฅธ ์ด๋ ฅ์ด ์๋ค๋ฉด result + input ํํ๋ก ๊ฐ๋ฉด ๋ ๊ฒ์ด๋ค.
์ง์ ์ ๋๋ ๋์ง ๋ณด์ฌ์ฃผ๋ useState()
const[isClickedEqual, setIsClickedEqual] = useState(false);
const onPressOperator = (operator) => {
if(operator !== "=") {
setCurrentOperator(operator)
setIsClickedOperator(true)
setIsClickedEqual(false)
}
else{
let finalResult = result;
const finalInput = isClickedEqual ? tempInput : input;
switch (CurrentOperator) {
case "*":
finalResult *= finalInput;
break;
case "/":
finalResult /= finalInput;
break;
case "+":
finalResult += finalInput;
break;
case "-":
finalResult -= finalInput;
default:
break;
}
setInput(finalResult);
setResult(finalResult);
setTempInput(finalInput);
setIsClickedEqual(true);
}
};
=์ ๋๋ ๋ค๋ฉด setIsClickedEqual(true)๋ฅผ ํตํด IsEqual์ด true๋ก toggle ๋๋ค.
๋ฌธ์ 3: =์ ๋๋ฅด๋ฉด ์ ์ผ ์ต๊ทผ์ ๋๋ฅธ ์ฐ์ฐ์์์์ border ๊ตต๊ธฐ ์์ ์ฃผ๊ธฐ
= ๋๋ ์ ์ currentOperator๊ฐ null์ด ๋๋๋ก setCurrentOperator(null)๋ฅผ ์ฐ์ฐ ํจ์์ ์ถ๊ฐ
๋ฒํผ์ ์์ฑ์ ๋ณด๋ฉด Border ๊ตต๊ธฐ toggle์ ์ํด ์ฐ์ด๋ isSelected๊ฐ currentOperator๊ฐ ๋ค์ด๊ฐ์ ์ ์ ์๋ค.
๊ทผ๋ฐ currentOperator = null ์ด ๋๋ฉด ์ด๋ ์ฐ์ฐ์ด๊ฑด isSelected๊ฐ false๊ฐ ๋์ด ํ ๋๋ฆฌ ๊ตต๊ธฐ๊ฐ ๋น ์ง๋ค.
๋ฌธ์ ์ :
์ฐ๋ฆฌ๊ฐ ์ฐ์ฐ์ ํ ๋ CurrentOperator๋ฅผ ์ฌ์ฉํ์ฌ, ์ฐ์ฐํ๋๋ฐ, ์ด ๋ ์์ด null์ด ๋๋ฉด =์ ๋๋ฌ๋ ๋ค์ ์ฌ ์ฐ์ฐ์ด ๋ถ๊ฐ๋ฅ ํด์ง๋ค.
์ด๋ฅผ ๋ฐฉ์งํ๊ธฐ ์ํด์ CurrentOperatior์ ๊ฐ์ ์ ์ฅํด๋ ์์ ์ ์ฅ์ tempOperator๋ฅผ ๋ง๋ ๋ค.
๊ทธ๋ฆฌ๊ณ ์๊น 2๋ฒ๊ณผ ๊ฐ์ด ์ง์ ์ =์ ๋๋ ๋ค๋ฉด Current Operator ๋์ ์ tempOperator๊ฐ ์ฐ์ฐ์ ์ฐ์ด๋๋ก ๋ง๋ ๋ค.
๋ฌธ์ 4: ALL CLEAR์ CLEAR ๊ตฌ๋ถ
๋ชจ๋ ๋ด์ฉ ์ ๋ถ ์ง์ฐ๊ณ ์ถ์ ๋ AC
๋ฐฉ๊ธ ๋ด๊ฐ ์ ๋ ฅํ input๋ง ์ง์ฐ๊ณ ์ถ์ ๋ C
C ๋ฒํผ์ ํ๋ฒ ๋ ๋๋ฅด๋ฉด AC ๋ฒํผ์ด ๋๋๋ก ๋ง๋ค์.
C๋ฅผ ๋๋ฅด๋ฉด input === 0 ์ด ๋๋ฏ๋ก
input์ด 0์ธ๊ฐ? ํด์ true์ด๋ฉด AC ๋ฒํผ์ด ๋๊ณ ์๋๋ฉด C ๋ฒํผ์ด ๋๋๋ก ๋ก์ง์ ์ง๋ฉด ๋๋ค.
/* const hasInput = input? true : false; */
/* ์ซ์๋ String ๊ฐ์ boolean์ผ๋ก ๋ฐ๊พธ๋ ค๋ฉด ์ด์ค๋ถ์ ํด์ฃผ๋ฉด ๋๋ค. */
const hasInput = !!input;
2. 4๊ฐ์ ๋ฌธ์ ์์ธ์ฒ๋ฆฌ ์ค์ค๋ก ํด๋ณด๊ธฐ
๋ค์ ๋ ํ๋๋ฐ๋ ์ ๋ณด๊ณ ์ํจ.
๋ฆฌ๋ทฐํ ๋ ๊ทธ๋ฆผ์ ๊ทธ๋ฆฌ๋๊น ๋๊ฐ์ ์ํฉ์ด ๋ฅ์ณ๋ ๊ทธ๋ฆผ์ด ๊ทธ๋ ค์ ธ์ ํ ์ ์๋ ๊ฒ ๊ฐ์.