๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

Frontend Dev/๐Ÿฅ ์ฝ”๋“œ์Šคํ…Œ์ด์ธ  FE ๋ถ€ํŠธ์บ ํ”„

Section1 Unit6 ๊ฐ„๋‹จํ•œ ์›น์•ฑ ๋งŒ๋“ค๊ธฐ - ๊ณ„์‚ฐ๊ธฐ ๊ตฌํ˜„ (๊ธฐ๋ณธ)

๋ฐ˜์‘ํ˜•


Section1 Unit6 ๊ฐ„๋‹จํ•œ ์›น์•ฑ ๋งŒ๋“ค๊ธฐ - ๊ณ„์‚ฐ๊ธฐ ๊ตฌํ˜„ (๊ธฐ๋ณธ)

 

โญ๏ธ ๊ณผ์ œ1. ๊ณ„์‚ฐ๊ธฐ ๊ตฌํ˜„ํ•˜๊ธฐ

Bare Minimum Requirements

โœ“ clear ๋ฒ„ํŠผ์„ ๋ˆŒ๋ €์„ ๋•Œ, ํ™”๋ฉด์— 0, +, 0, =, 0 ์ˆœ์„œ๋กœ ๋ณด์—ฌ์•ผ ํ•ฉ๋‹ˆ๋‹ค.

โœ“ ์ฒ˜์Œ ์ˆซ์ž ๋ฒ„ํŠผ์„ ๋ˆŒ๋ €์„ ๋•Œ, ์ฒซ ๋ฒˆ์งธ ํ™”๋ฉด์— ๋ˆ„๋ฅธ ์ˆซ์ž๊ฐ€ ๋ณด์—ฌ์•ผ ํ•ฉ๋‹ˆ๋‹ค.

โœ“ ์ˆซ์ž ๋ฒ„ํŠผ๊ณผ ์—ฐ์‚ฐ์ž ๋ฒ„ํŠผ์„ ๋ˆŒ๋ €์„ ๋•Œ, ์ฒซ ๋ฒˆ์งธ ํ™”๋ฉด๋Š” ์ˆซ์ž, ๋‘ ๋ฒˆ์งธ ํ™”๋ฉด์—๋Š” ์—ฐ์‚ฐ์ž๊ฐ€ ๋ณด์—ฌ์•ผ ํ•ฉ๋‹ˆ๋‹ค.

โœ“ ์ˆซ์ž ๋ฒ„ํŠผ, ์—ฐ์‚ฐ์ž ๋ฒ„ํŠผ, ์ˆซ์ž ๋ฒ„ํŠผ์„ ๋ˆŒ๋ €์„ ๋•Œ, ํ™”๋ฉด์— ์ˆซ์ž, ์—ฐ์‚ฐ์ž, ์ˆœ์ž์˜ ์ˆœ์„œ๋กœ ๋ณด์—ฌ์•ผ ํ•ฉ๋‹ˆ๋‹ค.

โœ“ ์ˆซ์ž ๋ฒ„ํŠผ, ์—ฐ์‚ฐ์ž ๋ฒ„ํŠผ, ์ˆซ์ž ๋ฒ„ํŠผ, ์—”ํ„ฐ ๋ฒ„ํŠผ์„ ๋ˆŒ๋ €์„ ๋•Œ, ํ™”๋ฉด์— ์ˆซ์ž, ์—ฐ์‚ฐ์ž, ์ˆซ์ž, =, ์—ฐ์‚ฐ ๊ฒฐ๊ณผ์˜ ์ˆœ์„œ๋กœ ๋ณด์—ฌ์•ผ ํ•ฉ๋‹ˆ๋‹ค.

โœ“ ์—ฐ์‚ฐ ์‹œ script.js์˜ calculate ํ•จ์ˆ˜๋ฅผ ํ™œ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

โœ“ clear ๋ฒ„ํŠผ์„ ๋ˆŒ๋ €์„ ๋•Œ, ํ™”๋ฉด์— 0, +, 0, =, 0 ์ˆœ์„œ๋กœ ๋ณด์—ฌ์•ผ ํ•ฉ๋‹ˆ๋‹ค.

 

 

๐Ÿ‘ฉ๐Ÿป‍๐Ÿ’ป script.js

function calculate(n1, operator, n2) {
  let result = 0;
  // TODO : n1๊ณผ n2๋ฅผ operator์— ๋”ฐ๋ผ ๊ณ„์‚ฐํ•˜๋Š” ํ•จ์ˆ˜๋ฅผ ๋งŒ๋“œ์„ธ์š”.
  
  n1 = Number(n1);
  n2 = Number(n2);

  // n1 = Number(n1.textContent);
  // n2 = Number(n2.textContent);
  // operator = operator.textContent;

  if (operator === "+") {
    result = n1 + n2
  } else if (operator === "-") {
    result = n1 - n2;
  } else if (operator === "*") {
    result = n1 * n2;
  } else if (operator === "/") {
    result = n1 / n2;
  }

  return String(result);
}

buttons.addEventListener('click', function (event) {

  const target = event.target;
  const action = target.classList[0]; 
  const buttonContent = target.textContent;
  
  if (target.matches('button')) {
    // TODO : ๊ณ„์‚ฐ๊ธฐ๊ฐ€ ์ž‘๋™ํ•  ์ˆ˜ ์žˆ๋„๋ก ์•„๋ž˜ ์ฝ”๋“œ๋ฅผ ์ˆ˜์ •ํ•˜์„ธ์š”. ์ž‘์„ฑ๋˜์–ด ์žˆ๋Š” ์กฐ๊ฑด๋ฌธ๊ณผ console.log๋ฅผ ํ™œ์šฉํ•˜์‹œ๋ฉด ์‰ฝ๊ฒŒ ๋ฌธ์ œ๋ฅผ ํ’€ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

    if (action === 'number') {
      if (firstOperend.textContent === "0") {
        firstOperend.textContent = buttonContent;
      } else {
        secondOperend.textContent = buttonContent;
      }
    }

    if (action === 'operator') {
      operator.textContent = buttonContent;
    }

    if (action === 'clear') {
      firstOperend.textContent = "0";
      operator.textContent = "+";
      secondOperend.textContent = "0";
      calculatedResult.textContent = "0";
    }

    if (action === 'calculate') {
      let result = calculate(firstOperend.textContent, operator.textContent, secondOperend.textContent);
      // let result = calculate(firstOperend, operator, secondOperend);
      calculatedResult.textContent = result;
    }
  }  
});

 

 ๊ณ„์‚ฐ๊ธฐ ๊ธฐ๋Šฅ ๊ตฌํ˜„์„ ํ•˜๋Š”๋ฐ, ๊ตฌํ˜„์€ ๋˜๋Š”๋ฐ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ํ†ต๊ณผ๋ฅผ ๋ชปํ•œ ๋ถ€๋ถ„์ด ๊ถ๊ธˆํ•ด์„œ ๋ผ์ด๋ธŒ ์„ธ์…˜ ๋•Œ ์งˆ๋ฌธ์„ ํ–ˆ์—ˆ๋‹ค. (ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋ฅผ ์ฒ˜์Œ ๋ด์„œ ๋„ˆ๋ฌด ์‹ ๊ธฐํ•˜๊ณ  ์žฌ๋ฐŒ์—ˆ๋Š”๋ฐ, ์ฝ์„์ค„ ๋ชฐ๋ผ์„œ ์™œ ํ†ต๊ณผ๊ฐ€ ์•ˆ๋˜๋Š”์ง€ ๊ถ๊ธˆํ–ˆ์—ˆ๋‹ค.) ๋„ˆ๋ฌด ๋ช…ํ™•ํ•˜๊ฒŒ ๋‹ต์„ ํ•ด์ฃผ์…”์„œ ๐Ÿ˜Š ์†์‹œ์›ํžˆ ๊ถ๊ธˆ์ฆ ํ•ด๊ฒฐ!


Q. calculate ํ•จ์ˆ˜ ํ˜ธ์ถœํ•  ๋•Œ calculate(firstOperend, operator, secondOperend); ์ด๋ ‡๊ฒŒ ํ•˜๊ณ , ํ•จ์ˆ˜ ๋‚ด๋ถ€์— n1 = Number(n1.textContent); n2 = Number(n2.textContent); operator = operator.textContent; ์ด๋Ÿฐ์‹์œผ๋กœ ๋„ฃ์œผ๋ฉด ๊ตฌํ˜„์€ ๋˜๋˜๋ฐ, ํ…Œ์ŠคํŠธ์ฝ”๋“œ ํ†ต๊ณผ๋Š” ์•ˆ๋˜๋˜๋ฐ ์ด์œ 

A. ์ด๊ฑด ํ•จ์ˆ˜๋ฅผ ๋งŒ๋“ค๊ณ  ๊ตฌํ˜„ํ•  ๋•Œ์˜ ๋ฃฐ๊ฐ™์€ ๊ฑด๋ฐ, ํ•จ์ˆ˜ ๋‚ด๋ถ€์—์„œ๋Š” ํ•จ์ˆ˜ ์™ธ๋ถ€์˜ ๊ฒƒ์„ ๊ฑด๋“œ๋ฆฌ์ง€ ์•Š๋Š”๊ฒƒ์„ ์„ ํ˜ธํ•œ๋‹ค. ๋”ฐ๋ผ์„œ ์• ์ดˆ์— ํ•จ์ˆ˜์˜ ์ „๋‹ฌ์ธ์ž๋กœ ๋ถˆ๋Ÿฌ์˜ฌ๋•Œ textContent๋ฅผ ๋ถ™์ด๋Š”๊ฑธ ์„ ํ˜ธํ•˜๊ณ , ๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— ํ…Œ์ŠคํŠธ์ฝ”๋“œ๋ฅผ ๊ทธ๋Ÿฐ์‹์œผ๋กœ ์งฐ๋‹ค. ์œ„ ์ฝ”๋“œ์ฒ˜๋Ÿผ ํ•˜๋ฉด ์•ˆ๋˜๋Š”๊ฑด ์•„๋‹ˆ์ง€๋งŒ ์„ ํ˜ธํ•˜๋Š” ๋ฐฉ์‹์€ ์•„๋‹ˆ๋‹ค.


 ๋งˆ์นจ Javascript.info ์‚ฌ์ดํŠธ์—์„œ ํ•จ์ˆ˜ ๋ถ€๋ถ„์„ ๋ณด๊ณ  ์žˆ์—ˆ๋Š”๋ฐ, ์ด๋Ÿฐ ๋ฌธ๊ตฌ๊ฐ€ ์žˆ์—ˆ๋‹ค.

 “๊น”๋”ํ•˜๊ณ  ์ดํ•ดํ•˜๊ธฐ ์‰ฌ์šด ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋ ค๋ฉด ํ•จ์ˆ˜ ๋‚ด๋ถ€์—์„œ ์™ธ๋ถ€ ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ• ๋Œ€์‹  ์ง€์—ญ ๋ณ€์ˆ˜์™€ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ํ™œ์šฉํ•˜๋Š” ๊ฒŒ ์ข‹์Šต๋‹ˆ๋‹ค. ๊ฐœ๋ฐœ์ž๋Š” ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ๋ฐ›์•„์„œ ๊ทธ ๋ณ€์ˆ˜๋ฅผ ๊ฐ€์ง€๊ณ  ๋ฐ˜ํ™˜ ๊ฐ’์„ ๋งŒ๋“ค์–ด ๋‚ด๋Š” ํ•จ์ˆ˜๋ฅผ ๋” ์‰ฝ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋งค๊ฐœ๋ณ€์ˆ˜ ์—†์ด ํ•จ์ˆ˜ ๋‚ด๋ถ€์—์„œ ์™ธ๋ถ€ ๋ณ€์ˆ˜๋ฅผ ์ˆ˜์ •ํ•ด ๋ฐ˜ํ™˜ ๊ฐ’์„ ๋งŒ๋“ค์–ด ๋‚ด๋Š” ํ•จ์ˆ˜๋Š” ์‰ฝ๊ฒŒ ์ดํ•ดํ•˜๊ธฐ ํž˜๋“ญ๋‹ˆ๋‹ค.”

 ์ด๊ฒŒ ๋น„์Šทํ•œ ๋งฅ๋ฝ์ธ๊ฐ€? ํ—ท๊ฐˆ๋ฆฌ์ง€๋งŒ ์—ฌํŠผ ํ•จ์ˆ˜ ๋‚ด๋ถ€์—์„œ ์™ธ๋ถ€์˜ ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฑด ์ง€์–‘ํ•˜๋Š”๊ฒŒ ์ข‹๋‹ค๋Š” ๋ง์ธ๊ฒƒ ๊ฐ™๋‹ค.

 

 

โฌ‡๏ธŽ ๊ธฐ๋ณธ ๊ธฐ๋Šฅ๋งŒ ๋„ฃ์–ด์„œ ๊ตฌํ˜„ํ•œ ๊ณ„์‚ฐ๊ธฐ

See the Pen Untitled by sowon (@hello_FAY) on CodePen.

 


๐ŸŒ™  ์˜ค๋Š˜์˜ ํšŒ๊ณ 

 ์•„์นจ๋ถ€ํ„ฐ ๊ณ„์‚ฐ๊ธฐ ๋งŒ๋“ค๊ธฐ ๊ณผ์ œ๋กœ ํŽ˜์–ดํ™œ๋™์„ ํ–ˆ๋‹ค. ์ง€๊ธˆ๊นŒ์ง€ HTML, CSS, JS ๊ธฐ์ดˆ๋Š” ์ด๋ฏธ ์•Œ์•˜๋˜ ๋‚ด์šฉ์„ ํ•™์Šต ์ž๋ฃŒ์—์„œ ๊ธ€๋กœ ์ฝ์œผ๋ ค๋‹ˆ ์ดํ•ด๋„ ๋นจ๋ž๊ณ , ๋ณ„๋กœ ์–ด๋ ต๋‹ค๊ณ  ์ƒ๊ฐ๋˜์ง€ ์•Š์•˜๋Š”๋ฐ ์ด๋ฒˆ ๊ณ„์‚ฐ๊ธฐ ๊ณผ์ œ๋Š” ์ฒ˜์Œ์—๋Š” ๊ธ€๋กœ๋งŒ ๋ฌธ์ œ๋ฅผ ๋ณด๋ ค๋‹ˆ ๋„ˆ๋ฌด ํ—ท๊ฐˆ๋ ค์„œ ์ง„๋„๊ฐ€ ๋‚˜๊ฐ€์ง€ ์•Š์•˜๋‹ค. ๊ทธ๋ž˜๋„ ์ง€๊ธˆ๊นŒ์ง€ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๊ณต๋ถ€๋ฅผ ์—ด์‹ฌํžˆ ํ–ˆ๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ๋Š”๋ฐ, ๊ฐ„๋‹จํ•œ ๋ฌธ์ œ๋„ ๋ง‰ํ˜€๋ฒ„๋ฆฌ๋Š”๊ฒŒ ๋‹ต๋‹ตํ•˜๊ธฐ๋„ ํ–ˆ๊ณ  ์˜ค๊ธฐ๋„ ์ƒ๊ฒผ๋˜ ๊ฒƒ ๊ฐ™๋‹ค. ๊ธ€์„ ๋ช‡ ๋ฒˆ์ด๋‚˜ ์ฝ๊ณ  ๋‚˜์„œ์•ผ ๋ฌด์—‡์„ ํ•˜๋ผ๋Š”์ง€ ์ดํ•ด๋ฅผ ํ–ˆ๊ณ , ์ฒ˜์Œ ์ดํ•ด๋ฅผ ํ•˜๊ณ  ๋‚˜๋‹ˆ ์‹ ๊ธฐํ•˜๊ฒŒ๋„ ๋ฌธ์ œ๋ฅผ ํฐ ์–ด๋ ค์›€ ์—†์ด ํ’€ ์ˆ˜ ์žˆ์—ˆ๋˜ ๊ฒƒ ๊ฐ™๋‹ค. Bare Minimum Requirements๋ฅผ ์™„๋ฃŒํ•˜๊ณ  ์ข€ ๋” User flow์— ๋งž๋Š” ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•˜๋Š” ๊ณผ์ œ2๋ฒˆ๋„ ์žฌ๋ฏธ์žˆ๊ฒŒ ์™„๋ฃŒํ–ˆ๋‹ค. ์•„์ง optional ๊ณผ์ œ์ธ nightmare๋Š” ์•ˆํ–ˆ๋Š”๋ฐ, ์ฃผ๋ง์— ๊ณต๋ถ€ํ•˜๋ฉด์„œ ํ•ด๋ด์•ผ๊ฒ ๋‹ค.

 ์•„, ๊ทธ๋ฆฌ๊ณ  ๊ณ„์‚ฐ๊ธฐ ๋งŒ๋“ค๊ธฐ ๊ณผ์ œ๋ฅผ ํ•˜๋ฉฐ ํ…Œ์ŠคํŠธ์ฝ”๋“œ๋„ ์ฒ˜์Œ ์ ‘ํ–ˆ๋Š”๋ฐ, ๊ต‰์žฅํžˆ ์žฌ๋ฐŒ๊ณ  ์‹ ์„ ํ–ˆ๋‹ค. ๐Ÿ˜Š

 ์˜ค๋Š˜์€ ํ‰์†Œ๋ณด๋‹ค ์‹œ๊ฐ„์ด ๋” ๋นจ๋ฆฌ๊ฐ€๋Š” ๊ฒƒ ๊ฐ™์•„์„œ ๋†€๋ž๋‹ค. ๊ธˆ์š”์ผ ์ˆ˜์—…์ด ๋๋‚˜๊ณ  ๋ฒŒ์จ ์ฃผ๋ง์ด๋ผ๋‹ˆ. ๋ฒŒ์จ 2์ฃผ๊ฐ€ ์ง€๋‚ฌ๋‹ค. 2์ฃผ๋งŒ์— HTML, CSS๋ฅผ ํŒจ์Šคํ•˜๊ณ  JS๊นŒ์ง€ ์™”๋‹ค๋‹ˆ.. ์—„์ฒญ๋‚œ ์ปค๋ฆฌํ˜๋Ÿผ์ด๋‹ค…ใ…Žใ…Ž

๋ฐ˜์‘ํ˜•