[JS] Calculator ๋ง๋ค๊ธฐ
Categories: javascript
Tags: js, ๊ฐ๋ ์ ๋ฆฌ
๐ ๊ฐ์ธ์ ์ธ ๊ณต๊ฐ์ผ๋ก ๊ณต๋ถ๋ฅผ ๊ธฐ๋กํ๊ณ ๋ณต์ตํ๊ธฐ ์ํด ์ฌ์ฉํ๋ ๋ธ๋ก๊ทธ์
๋๋ค.
์ ํํ์ง ์์ ์ ๋ณด๊ฐ ์์ ์ ์์ผ๋ ์ฐธ๊ณ ๋ฐ๋๋๋ค :๐ธ
[ํ๋ฆฐ ๋ด์ฉ์ ๋๊ธ๋ก ๋จ๊ฒจ์ฃผ์๋ฉด ๋ณต๋ฐ์ผ์ค๊ฑฐ์์]
๊ณ์ฐ๊ธฐ ๊ตฌํ
DOM๋ ๋ฐฐ์ ์ผ๋
์ด์ Post์์ ์ ์ฉํ๋ ๊ณ์ฐ๊ธฐ ๋์์ธ์ ์ค์ ๋ก ๊ณ์ฐ ๊ธฐ๋ฅ์ ์ถ๊ฐํด๋ณด๊ธฐ๋ก ํ๋ค.
์๋ ๋งํฌ๋ CSS ๋ฐฐ์ฐ๋ฉด์ ๋ง๋ค์๋ ๊ณ์ฐ๊ธฐ ๋์์ธ๋ง ๊ตฌํํ ๊ฒ์ด๋ค.
๊ตฌํ ์ ์ ์ดํดํ๊ธฐ (DOM, JS)
1
2
3
4
5
6
7
const calculator = document.querySelector('.calculator');
const buttons = calculator.querySelector('.calculator__buttons');
const firstOperend = document.querySelector('.calculator__operend--left');
const operator = document.querySelector('.calculator__operator');
const secondOperend = document.querySelector('.calculator__operend--right');
const calculatedResult = document.querySelector('.calculator__result');
- document.querySelector : html์ ํด๋นํ๋ ํด๋์ค์ ์์๋ฅผ ์์๋ก ๊ฐ์ ธ์ด.
- const calculator๋ .calculator๊ฐ ๊ฐ์ง๊ณ ์๋ ์์๋ฅผ ๊ฐ์ ธ์ด (html์ calculator ํด๋์ค )
- buttons๋ claculator ํด๋์ค์ .calculator_buttonsํด๋์ค์ ์์๋ฅผ ๊ฐ์ ธ์ค๋ ๊ฒ
- firstOperand = .calculator__operendโleft ํด๋์ค์ ์์๋ฅผ ๊ฐ์ ธ์ด
- operator =.calculator__operator ํด๋์ค์ ์์
- secondOperend= .calculator__operendโright ํด๋์ค์์ ๊ฐ์ ธ์จ ์์
- calculatedResult =.calculator__result ํด๋์ค์์ ๊ฐ์ ธ์จ ์์
- ๋๋จธ์ง๋ document.querySelector์ธ๋ฐ buttons๋ง calculators.queryselector๋ก ๊ฐ์ ธ์ค๋ ์ด์ ?
- ํ์ด์ง ๋ด์ ๋์ผํ buttons๊ฐ ์๊ฑฐ๋ (ํ์ด์ง ์ ์ฒด์์ ์ ์ผํ ์์๊ฐ ์๋๊ฒฝ์ฐ)
- buttons ๋ calculator ๋ด๋ถ์ ์์ผ๋ฏ๋ก calculator.querySelector๋ฅผ ์ฌ์ฉํ์ฌ ๊ฒ์ํ๋ ๊ฒ์ด ๋ ํจ์จ์ ์ด๊ณ ๋ช ํ โ ์ฝ๋ ๊ฐ๋ ์ฑ์ ์ฌ๋ฆด ์ ์๊ณ ์ ์ง๋ณด์์๋ ์ฉ์ด
- ๋ฌธ์ ์ ์ฒด(Document)๊ฐ ์๋ ํน์ ์ปจํ ์ด๋์์๋ง ๊ฒ์ํ๊ธฐ ๋๋ฌธ์ ๋ถํ์ํ ๊ฒ์์ ์ค์ผ ์ ์์
- document๋ ๋ฌด์์ธ์ง??? =ํ์ฌ ์นํ์ด์ง๋ฅผ ๋ํ๋ด๋ ๊ฐ์ฒด
document
๋ ์น ๋ธ๋ผ์ฐ์ ์ Document Object Model (DOM) ์ธํฐํ์ด์ค๋ฅผ ๋ํ๋ด๋ ์ ์ญ ๊ฐ์ฒด- ํ์ฌ ๋ก๋๋ ์น ํ์ด์ง์ ์ ์ฒด ๊ตฌ์กฐ์ ๋ด์ฉ์ ๋ํ๋ด๋ฉฐ, JavaScript์์ HTML ๋ฐ CSS์ ์ํธ์์ฉํ๊ธฐ ์ํด ์ฌ์ฉ๋๋ค
document
๊ฐ์ฒด๋ ์น ํ์ด์ง์ ๋ฃจํธ ์์๋ก, ํ์ด์ง์ ์ฝํ ์ธ ์ ์ ๊ทผํ๊ณ ์กฐ์ํ ์ ์๋ ๋ค์ํ ๋ฉ์๋์ ์์ฑ์ ์ ๊ณตํ๋ค.
EventListener
1
2
3
4
5
buttons.addEventListener('click', function (event) {
const target = event.target;
const action = target.classList[0];
const buttonContent = target.textContent;
- .calculator_buttonsํด๋์ค์ ์์๋ฅผ ๊ฐ์ ธ์จ buttons๋ฅผ ํด๋ฆญํ ๊ฒฝ์ฐ ํจ์๊ฐ ์คํ๋จ.
- event.target์ ํด๋ฆญ๋ HTML ์์๋ฅผ ์ฐธ์กฐ ,
- target์ ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ DOM ์์๋ฅผ ๊ฐ๋ฆฌํด.
- const action = target.classList[0];
- target.classList๋ ํด๋ฆญ๋ ๋ฒํผ์ ํด๋์ค ๋ฆฌ์คํธ(DOMTokenList)๋ฅผ ๋ฐํ,
[0]
์ ์ฒซ ๋ฒ์งธ ํด๋์ค - target.textcontent๋ ํด๋ฆญ๋ ๋ฒํผ์ ํ ์คํธ ์ปจํ ์ธ ๋ฅผ ๋ฐํ
buttonContent
๋ ๋ฒํผ์ ํ์๋ ํ ์คํธ ๊ฐ์ ์ ์ฅํ๋ค ์ด๋ฅผ ํตํด ๋ฒํผ์ ์ด๋ค ๊ฐ(์: โ1โ, โ+โ, โ=โ)์ด ์๋์ง ์ ์ ์๋ค.
๊ณ์ฐ๊ธฐ ๋ก์ง ๊ตฌํํ๊ธฐ
1
2
3
4
5
6
7
8
9
10
11
12
const calculator =document.querySelector('.calculator');
const buttons = calculator.querySelector('.calculator__buttons');
let firstNum, operatorForAdvanced, previousKey, previousNum;
const display=document.querySelector(#print);
buttons.addEventListener('click', funtion(event){
const target = event.target;
const action = target.classList[0];
const buttonContent=target.textContent;
});
-
์์ฑ ์ event ์์ ์ค๋ฅ๋จ
- fuction ์คํ, function ๊ณ์ c ๋ n๋นผ๋จน์.ใ ใ ใ
- ์ฟผ๋ฆฌ๋ฌธ ๋ฌธ์๋ก ์ ๋ ฅ querySelector (โ#printโ)๋ก ์์ฑํด์ผ๋จ.)
- previous key ์ค๋ฅ
- operator ํด๋ฆญํ ๋ previouskey๊ฐ operator๋ฉด ๋ค์ด์ค์ง ๋ชปํ๊ฒ ๋ง์ ๋๊ณณ์ ๋ค์ด์์ js๋ else if๊ฐ ์์๋ ๊ฐ์๊ธฐ ์๋ฌธ์ด ๋ค ์ ๋์๋ค. ๊ทธ๋์ ์ฝ์๋ก ๋ค ์ถ๋ ฅ๋๊ฒ ์ฐ์๋๋ ์ ์ number๋ฅผ ์ ๋ ฅํ๊ณ operator๋ฅผ ํด๋ฆญํด๋ previousKey๊ฐ operator๋ก ์ธ์๋์ด์ ๊ทธ๋ฐ๊ฑฐ์๊ณ ์ ๊ทธ๋ฐ์ง ํ์ฐธ์ ๋ชจ๋ฅด๋ค๊ฐ ์๋ฅผ ์ฌ๋ ค๋ดค๋๋โฆ๋ด๊ฐ ์ ์ previousKey๋ฅผ ์ฌ์ฉํ๋๊ฒ ๋ฌธ์ ์๋ค.
- ๋๋ ์ฌํ๋ฅผ ๊ตฌํํ ๊ฒ์ด๋ผ ์ ๋ถ๋ถ์ ์๊ฐ ์ํ๊ณ ์์๋๋ฐ ํ์ฐธ ๊ฑธ๋ ธ์ง๋ง ๊ทธ๋๋ ์์์ ๋คํ์ด์ง๋ญโฆ ํ๋ค..
- ์ฐ์ฐ์ ๋ฌธ์
- ์ฒ์์ ์ซ์๋ฐ๊ณ (์ซ์ ํ operator ๋๋ฅด๊ธฐ ์ ๊น์ง)
- ๊ทธ ๋ค์์ ๊ณ์ ๋ํด์ค ์ซ์๋ ๋ค previousNum์ผ๋ก ๋ง๋ค๊ณ ์ถ์๋๋ฐ
- clear ๋ฐ undefined ์๋ฌ
- ์ด๊ธฐํ ํ ๋ ์ฒ์์ 0์ผ๋ก ๋ค ๋ณ๊ฒฝํ์..๊ทผ๋ฐ ๋ฐ๋ก ์ด์ํ๊ฒ ์ถ๋ ฅ๋์ ์,,ํ๊ณ ๋ฐ๋ก undefined๋ก ๋ณ๊ฒฝ, ๊ทผ๋ฐ ์ด์ํ๊ฒ undefined๋ก ํ๋๋ ๋ฌธ์์ด๋ก ์ธ์ํด๋ฒ๋ฆผ
- ๊ทผ๋ฐ ๋ previousNum!==undefined์ด๋ฉด ๋ชป ๋ค์ด์ค๊ฒ ๋ง์๋๋ฐ ๋ค์ด์ค๊ธธ๋ typeof๋ ๋ฌธ์์ด๋ก ํ์ ์ ๋ ฅํด์ ํท๊ฐ๋ ธ๋๋ฐ ๋ฐ์ดํ ์์ ๋ ๊ธ๋ฐฉ ํด๊ฒฐ๋จ
ํ๋ฉด์ ์ถ๋ ฅ ์๋๋ ๋ฌธ์
-
๊ณ์ฐ๊ธฐ์ ํ๋ฉด์ด ์ถ๋ ฅ๋์ง ์์์ ์ฝ์ ๋ก๊ทธ๋ฅผ ๋จ๊ฒจ์ ํ์ธํด๋ดค๋ค.
-
๋ก๊ทธ ๋จ๊ฒผ๋๋ฐ ๊ฐ๋ฐ์ ์ฐฝ์์๋ ๋ก๊ทธ๊ฐ ๋ค ๋์จ๋ค
-
์ฌ๊ธฐ๊ฐ ์๋ง ๋ฌธ์ ์ธ ๊ฒ ๊ฐ๋ค. input type๊ณผ placeholder ์ง์
-
๋ณ๊ฒฝ ์
-
๋ณ๊ฒฝ ํ
-
์ถ๋ ฅ ์ ๋จ. ์์ฑ
-
Leave a comment