[JS] Calculator ๋งŒ๋“ค๊ธฐ

Updated:

Categories:

Tags: ,

๐Ÿ“Œ ๊ฐœ์ธ์ ์ธ ๊ณต๊ฐ„์œผ๋กœ ๊ณต๋ถ€๋ฅผ ๊ธฐ๋กํ•˜๊ณ  ๋ณต์Šตํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•˜๋Š” ๋ธ”๋กœ๊ทธ์ž…๋‹ˆ๋‹ค.
์ •ํ™•ํ•˜์ง€ ์•Š์€ ์ •๋ณด๊ฐ€ ์žˆ์„ ์ˆ˜ ์žˆ์œผ๋‹ˆ ์ฐธ๊ณ ๋ฐ”๋ž๋‹ˆ๋‹ค :๐Ÿ˜ธ
[ํ‹€๋ฆฐ ๋‚ด์šฉ์€ ๋Œ“๊ธ€๋กœ ๋‚จ๊ฒจ์ฃผ์‹œ๋ฉด ๋ณต๋ฐ›์œผ์‹ค๊ฑฐ์—์š”]

๊ณ„์‚ฐ๊ธฐ ๊ตฌํ˜„

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'); 
  1. 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 ํด๋ž˜์Šค์—์„œ ๊ฐ€์ ธ์˜จ ์š”์†Œ
  2. ๋‚˜๋จธ์ง€๋Š” document.querySelector์ธ๋ฐ buttons๋งŒ calculators.queryselector๋กœ ๊ฐ€์ ธ์˜ค๋Š” ์ด์œ ?
    1. ํŽ˜์ด์ง€ ๋‚ด์— ๋™์ผํ•œ buttons๊ฐ€ ์žˆ๊ฑฐ๋‚˜ (ํŽ˜์ด์ง€ ์ „์ฒด์—์„œ ์œ ์ผํ•œ ์š”์†Œ๊ฐ€ ์•„๋‹๊ฒฝ์šฐ)
    2. buttons ๋Š” calculator ๋‚ด๋ถ€์— ์žˆ์œผ๋ฏ€๋กœ calculator.querySelector๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ฒ€์ƒ‰ํ•˜๋Š” ๊ฒƒ์ด ๋” ํšจ์œจ์ ์ด๊ณ  ๋ช…ํ™• โ‡’ ์ฝ”๋“œ ๊ฐ€๋…์„ฑ์„ ์˜ฌ๋ฆด ์ˆ˜ ์žˆ๊ณ  ์œ ์ง€๋ณด์ˆ˜์—๋„ ์šฉ์ด
    3. ๋ฌธ์„œ ์ „์ฒด(Document)๊ฐ€ ์•„๋‹Œ ํŠน์ • ์ปจํ…Œ์ด๋„ˆ์—์„œ๋งŒ ๊ฒ€์ƒ‰ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ถˆํ•„์š”ํ•œ ๊ฒ€์ƒ‰์„ ์ค„์ผ ์ˆ˜ ์žˆ์Œ
  3. 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;
});

  1. ์ž‘์„ฑ ์‹œ event ์—์„œ ์˜ค๋ฅ˜๋‚จ

    1. fuction ์˜คํƒ€, function ๊ณ„์† c ๋‚˜ n๋นผ๋จน์Œ.ใ… ใ… ใ… 
    2. ์ฟผ๋ฆฌ๋ฌธ ๋ฌธ์ž๋กœ ์ž…๋ ฅ querySelector (โ€™#printโ€™)๋กœ ์ž‘์„ฑํ•ด์•ผ๋จ.)
  2. previous key ์˜ค๋ฅ˜
    1. operator ํด๋ฆญํ• ๋•Œ previouskey๊ฐ€ operator๋ฉด ๋“ค์–ด์˜ค์ง€ ๋ชปํ•˜๊ฒŒ ๋ง‰์•„ ๋‘”๊ณณ์— ๋“ค์–ด์™€์„œ js๋Š” else if๊ฐ€ ์—†์—ˆ๋‚˜ ๊ฐ‘์ž๊ธฐ ์˜๋ฌธ์ด ๋“ค ์ •๋„์˜€๋‹ค. ๊ทธ๋ž˜์„œ ์ฝ˜์†”๋กœ ๋‹ค ์ถœ๋ ฅ๋˜๊ฒŒ ์ฐ์—ˆ๋”๋‹ˆ ์ „์— number๋ฅผ ์ž…๋ ฅํ•˜๊ณ  operator๋ฅผ ํด๋ฆญํ•ด๋„ previousKey๊ฐ€ operator๋กœ ์ธ์‹๋˜์–ด์„œ ๊ทธ๋Ÿฐ๊ฑฐ์˜€๊ณ  ์™œ ๊ทธ๋Ÿฐ์ง€ ํ•œ์ฐธ์„ ๋ชจ๋ฅด๋‹ค๊ฐ€ ์œ„๋ฅผ ์˜ฌ๋ ค๋ดค๋”๋‹ˆโ€ฆ๋‚ด๊ฐ€ ์ „์— previousKey๋ฅผ ์‚ฌ์šฉํ–ˆ๋˜๊ฒŒ ๋ฌธ์ œ์˜€๋‹ค.
    2. ๋‚˜๋Š” ์‹ฌํ™”๋ฅผ ๊ตฌํ˜„ํ•  ๊ฒƒ์ด๋ผ ์œ— ๋ถ€๋ถ„์€ ์ƒ๊ฐ ์•ˆํ•˜๊ณ  ์žˆ์—ˆ๋Š”๋ฐ ํ•œ์ฐธ ๊ฑธ๋ ธ์ง€๋งŒ ๊ทธ๋ž˜๋„ ์•Œ์•„์„œ ๋‹คํ–‰์ด์ง€๋ญโ€ฆ ํ–ˆ๋‹ค..
  3. ์—ฐ์‚ฐ์ž ๋ฌธ์ œ
    1. ์ฒ˜์Œ์— ์ˆซ์ž๋ฐ›๊ณ  (์ˆซ์ž ํ›„ operator ๋ˆ„๋ฅด๊ธฐ ์ „๊นŒ์ง€)
    2. ๊ทธ ๋‹ค์Œ์€ ๊ณ„์† ๋”ํ•ด์ค€ ์ˆซ์ž๋Š” ๋‹ค previousNum์œผ๋กœ ๋งŒ๋“ค๊ณ  ์‹ถ์—ˆ๋Š”๋ฐ
  4. clear ๋ฐ undefined ์—๋Ÿฌ
    1. ์ดˆ๊ธฐํ™” ํ•  ๋•Œ ์ฒ˜์Œ์— 0์œผ๋กœ ๋‹ค ๋ณ€๊ฒฝํ–ˆ์Œ..๊ทผ๋ฐ ๋ฐ”๋กœ ์ด์ƒํ•˜๊ฒŒ ์ถœ๋ ฅ๋˜์„œ ์•„,,ํ•˜๊ณ  ๋ฐ”๋กœ undefined๋กœ ๋ณ€๊ฒฝ, ๊ทผ๋ฐ ์ด์ƒํ•˜๊ฒŒ undefined๋กœ ํ–ˆ๋”๋‹ˆ ๋ฌธ์ž์—ด๋กœ ์ธ์‹ํ•ด๋ฒ„๋ฆผ
    2. ๊ทผ๋ฐ ๋˜ previousNum!==undefined์ด๋ฉด ๋ชป ๋“ค์–ด์˜ค๊ฒŒ ๋ง‰์•˜๋Š”๋ฐ ๋“ค์–ด์˜ค๊ธธ๋ž˜ typeof๋Š” ๋ฌธ์ž์—ด๋กœ ํƒ€์ž… ์ž…๋ ฅํ•ด์„œ ํ—ท๊ฐˆ๋ ธ๋Š”๋ฐ ๋”ฐ์˜ดํ‘œ ์—†์• ๋‹ˆ ๊ธˆ๋ฐฉ ํ•ด๊ฒฐ๋จ

ํ™”๋ฉด์— ์ถœ๋ ฅ ์•ˆ๋˜๋Š” ๋ฌธ์ œ

  1. ๊ณ„์‚ฐ๊ธฐ์— ํ™”๋ฉด์ด ์ถœ๋ ฅ๋˜์ง€ ์•Š์•„์„œ ์ฝ˜์†” ๋กœ๊ทธ๋ฅผ ๋‚จ๊ฒจ์„œ ํ™•์ธํ•ด๋ดค๋‹ค.

  2. ๋กœ๊ทธ ๋‚จ๊ฒผ๋Š”๋ฐ ๊ฐœ๋ฐœ์ž ์ฐฝ์—์„œ๋Š” ๋กœ๊ทธ๊ฐ€ ๋‹ค ๋‚˜์˜จ๋‹ค

  3. ์—ฌ๊ธฐ๊ฐ€ ์•„๋งˆ ๋ฌธ์ œ์ธ ๊ฒƒ ๊ฐ™๋‹ค. input type๊ณผ placeholder ์ง€์›€

    • ๋ณ€๊ฒฝ ์ „

    • ๋ณ€๊ฒฝ ํ›„

    • ์ถœ๋ ฅ ์ž˜ ๋จ. ์™„์„ฑ

์™„์„ฑ์ž‘

์™„์„ฑ ๊ณ„์‚ฐ๊ธฐ

javascript ์นดํ…Œ๊ณ ๋ฆฌ ๋‚ด ๋‹ค๋ฅธ ๊ธ€ ๋ณด๋Ÿฌ๊ฐ€๊ธฐ

Leave a comment