๐Ÿ˜Ž TIL) Function expression (ํ•จ์ˆ˜ ํ‘œํ˜„์‹) + 1๊ธ‰ ๊ฐ์ฒด

Solmiiยท2020๋…„ 4์›” 30์ผ
0

JavaScript

๋ชฉ๋ก ๋ณด๊ธฐ
7/24
post-thumbnail

first class object (1๊ธ‰ ๊ฐ์ฒด)

JavaScript์˜ ํ•จ์ˆ˜๋Š” 1๊ธ‰ ๊ฐ์ฒด(first class object)์ด๋‹ค.

1๊ธ‰ ๊ฐ์ฒด(first class object)์— ๋Œ€ํ•ด ์–˜๊ธฐํ•˜๋ ค๋ฉด ๋จผ์ € 1๊ธ‰ ์‹œ๋ฏผ(first class citizen) ๋ถ€ํ„ฐ ์–˜๊ธฐํ•ด์•ผ ํ•˜๋Š”๋ฐ,
์‹œ๋ฏผ์€ ์‹œ๋ฏผ์ด์ง€ 1๊ธ‰ ์‹œ๋ฏผ์ด๋ž€ ๋ญ˜๊นŒ?

๐Ÿ‘ฉ๐Ÿปโ€๐Ÿซ 1๊ธ‰ ์‹œ๋ฏผ?

๐Ÿ“จ 1๊ธ‰ ์‹œ๋ฏผ์€ ํˆฌํ‘œ๊ถŒ์ด ์žˆ๋‹ค.
๐Ÿ‘จ๐Ÿปโ€๐Ÿญ 1๊ธ‰ ์‹œ๋ฏผ์€ ๊ตฐ์ธ์ด ๋  ์ˆ˜ ์žˆ๋‹ค.
๐Ÿ™…๐Ÿผโ€โ™‚๏ธ 1๊ธ‰ ์‹œ๋ฏผ์€ ์ •์น˜์— ์ฐธ์—ฌ ํ•  ์ˆ˜ ์žˆ๋‹ค.

19์„ธ๊ธฐ ์ดˆ ์˜๊ตญ์—์„œ๋Š” ๋‚จ์„ฑ์„ 1๊ธ‰ ์‹œ๋ฏผ, ์—ฌ์„ฑ์„ 2๊ธ‰ ์‹œ๋ฏผ์œผ๋กœ ๋ถ„๋ฅ˜ํ–ˆ์œผ๋ฉฐ, 2๊ธ‰ ์‹œ๋ฏผ์€ ์ •์น˜์— ์ฐธ์—ฌ ํ•  ์ˆ˜ ์—†์—ˆ๋‹ค.
์ฆ‰, 1๊ธ‰ ์‹œ๋ฏผ์ด๋ผ๋Š” ๋ง์€ ๊ถŒํ•œ์„ ๋งŽ์ด ๋ˆ„๋ฆฌ๋Š” ๋Œ€์ƒ์ด๋ผ๊ณ  ๋ณผ ์ˆ˜ ์žˆ๋‹ค.


1๊ธ‰ ์‹œ๋ฏผ (first class citizen)

ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์—์„œ 1๊ธ‰ ์‹œ๋ฏผ์ด๋ž€ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์กฐ๊ฑด์„ ์ถฉ์กฑํ•˜๋Š” ๊ฒƒ์„ ๋งํ•œ๋‹ค.

1. ๋ณ€์ˆ˜์— ๋‹ด์„ ์ˆ˜ ์žˆ๋‹ค.
2. ํ•จ์ˆ˜(ํ˜น์€ ๋ฉ”์†Œ๋“œ)์˜ ์ธ์ž(parameter)๋กœ ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ๋‹ค.
3. ํ•จ์ˆ˜(ํ˜น์€ ๋ฉ”์†Œ๋“œ)์˜ ๋ฐ˜ํ™˜๊ฐ’(return value)์œผ๋กœ ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ๋‹ค.
const a = 1; // ๋ณ€์ˆ˜์— ๋‹ด์„ ์ˆ˜ ์žˆ๋‹ค.
function f1(num) {
  // parameter๋กœ ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ๋‹ค.
  const b = num + 1;
  return b; // return value์œผ๋กœ ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ๋‹ค.
}
console.log(f1(a)); // 2๊ฐ€ ์ถœ๋ ฅ

โ‡’ ๋Œ€๋ถ€๋ถ„์˜ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์—์„œ number ์™€ strung ์€ 1๊ธ‰ ์‹œ๋ฏผ์˜ ์กฐ๊ฑด์„ ์ถฉ์กฑํ•œ๋‹ค.

1๊ธ‰ ๊ฐ์ฒด (first class object)

1๊ธ‰ ๊ฐ์ฒด๋ž€, 1๊ธ‰ ์‹œ๋ฏผ์˜ ์กฐ๊ฑด์„ ์ถฉ์กฑํ•˜๋Š” ๊ฐ์ฒด(Object) ์ด๋‹ค.
javascript์˜ function๋„ ๊ฐ์ฒด์ด๋ฏ€๋กœ, 1๊ธ‰ ๊ฐ์ฒด์˜ ์กฐ๊ฑด์„ ์ถฉ์กฑํ•œ๋‹ค.

const a = {msg: "a๋Š” 1๊ธ‰ ๊ฐ์ฒด"} // ๋ณ€์ˆ˜์— ๋‹ด์„ ์ˆ˜ ์žˆ๋‹ค.
function f1 (a) { // parameter๋กœ ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ๋‹ค.
  const b = a
  b.msg2 = "2๋ฒˆ์งธ ๋ฉ”์„ธ์ง€"
  return b  // return value์œผ๋กœ ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ๋‹ค.
}
console.log(f1(a)) // {msg: 'a๋Š” 1๊ธ‰ ๊ฐ์ฒด์ž…๋‹ˆ๋‹ค.', b: '์ด๊ฒƒ์€ 2๋ฒˆ์งธ ๋ฉ”์„ธ์ง€์ž…๋‹ˆ๋‹ค.'} ์ถœ๋ ฅ

1๊ธ‰ ํ•จ์ˆ˜ (first class function)

๋งˆ์ฐฌ๊ฐ€์ง€๋กœ, 1๊ธ‰ ์‹œ๋ฏผ์˜ ์กฐ๊ฑด์„ ์ถฉ์กฑํ•˜๋Š” ํ•จ์ˆ˜๋ฅผ 1๊ธ‰ ํ•จ์ˆ˜๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค.

๋‹จ, 1๊ธ‰ ํ•จ์ˆ˜๋Š” 1๊ธ‰ ์‹œ๋ฏผ์˜ ์กฐ๊ฑด๊ณผ ๋”๋ถˆ์–ด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ถ”๊ฐ€์ ์ธ ์กฐ๊ฑด์„ ์š”๊ตฌํ•œ๋‹ค.

1. ๋Ÿฐํƒ€์ž„(runtime) ์ƒ์„ฑ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.
(๋Ÿฐํƒ€์ž„? ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๊ฐ€ ๊ตฌ๋™๋˜๋Š” ํ™˜๊ฒฝ!
๋ธŒ๋ผ์šฐ์ €์—์„œ ์ž‘๋™ํ•˜๋Š” JS๊ฐ€ ์žˆ๊ณ , Node.js์—์„œ ๊ตฌ๋™๋˜๋Š” ์ธก๋ฉด์ด ์กด์žฌํ•œ๋‹ค. ์ด๋•Œ ๋ธŒ๋ผ์šฐ์ €์™€ Node.js๋ฅผ ๋Ÿฐํƒ€์ž„์ด๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค.)

2. ์ต๋ช…(anonymous)์œผ๋กœ ์ƒ์„ฑ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

javascript์˜ function์€ 1๊ธ‰ ์‹œ๋ฏผ, ๊ฐ์ฒด, ํ•จ์ˆ˜๋ฅผ ๋ชจ๋‘ ๋งŒ์กฑ์‹œํ‚จ๋‹ค. (๋ณดํ†ต์€ 1๊ธ‰ ๊ฐ์ฒด๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค.)


1๊ธ‰ ๊ฐ์ฒด๊ฐ€ ๋Œ€์ฒด ๋ญ๊ธธ๋ž˜ ์ค‘์š”ํ•œ๊ฑธ๊นŒ?

โ‡’ ๋ฐ”๋กœ 1๊ธ‰ ๊ฐ์ฒด๋Š” ๊ณ ์ฐจ ํ•จ์ˆ˜(high order function)๊ฐ€ ๊ฐ€๋Šฅํ•˜๊ธฐ ๋•Œ๋ฌธ!!

(ํ•จ์ˆ˜๋ฅผ ๋„˜๊ฒจ์ฃผ๊ธฐ ์œ„ํ•ด ํด๋ž˜์Šค๋ฅผ ๋งŒ๋“ค๊ณ ...์ธ์Šคํ„ด์Šค๋ฅผ ๋งŒ๋“ค๊ณ ...ํ•  ํ•„์š” ์—†์ด JavaScript์˜ each, filter, map, sort ๋“ฑ์˜ ํ•จ์ˆ˜๋“ค์„ ๋ชฉ์ ์— ๋งž๊ฒŒ ์ธ์ž๋กœ ๋ฐ”๋กœ ๋„˜๊ฒจ์ค„ ์ˆ˜ ์žˆ์–ด์„œ ๋งค์šฐ ํŽธ๋ฆฌ!!)

๋˜ํ•œ, ํด๋กœ์ ธ(closure)์™€ ๋งŒ๋‚ ๋•Œ๋„ ์—ฌ๋Ÿฌ๊ฐ€์ง€ ์žฅ์ ์ด ์ƒ๊ธฐ๋Š”๋ฐ, ์‚ฌ์‹ค ๋‚˜๋„ ์•„์ง ๋ญ”์†Œ๋ฆฐ์ง€ ๋ชจ๋ฅด๊ฒ ๋‹น....๐Ÿ˜‚

๊ณ ์ฐจ ํ•จ์ˆ˜์™€ ํด๋กœ์ ธ๋Š” ๊ธฐํšŒ ๋  ๋•Œ ๋‹ค์‹œ ๊ณต๋ถ€ํ•ด์„œ ์ •๋ฆฌํ•ด๋ด์•ผ๊ฒ ๋‹ค.

์•„๋ฌดํŠผ ๊ฒฐ๋ก ์€ javascript์˜ function ์งฑ์งฑ๋งจ!!!


Function expression (ํ•จ์ˆ˜ ํ‘œํ˜„์‹)

const print = function () { // anonymous function
	console.log("print");
}
print(); // print ์ถœ๋ ฅ

const printAgain = print;
printAgain(); //print ์ถœ๋ ฅ

console.log(sum(4, 2)); //6 ์ถœ๋ ฅ, ํ•จ์ˆ˜ ์„ ์–ธ๋ณด๋‹ค ํ˜ธ์ถœ์„ ๋จผ์ € ํ–ˆ๋Š”๋ฐ ์„ ์–ธ์ด hoisting๋˜์–ด ์ •์ƒ์ ์œผ๋กœ ํ˜ธ์ถœ ๋จ

function sum(a, b) {
	const result = a + b;
  return result;
}
  • ์ฝ”๋“œ ์ค‘์— ๊ฐ’์œผ๋กœ ๋ณ€ํ™˜๋  ์ˆ˜ ์žˆ๋Š” ๋ถ€๋ถ„์„ ํ‘œํ˜„์‹ (expression)์ด๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค.
  • Function declaration (ํ•จ์ˆ˜ ์„ ์–ธ์‹)์€ hoisting๋œ๋‹ค.

:: ํ…์ŠคํŠธ์™€ ๋ฌธ์ž์—ด์˜ ์—ฐ๊ฒฐ

alert("2 ๋”ํ•˜๊ธฐ 2๋Š” " + 2 + 2);
๋Š” ์–ด๋–ป๊ฒŒ ์ถœ๋ ฅ๋ ๊นŒ? 2 ๋”ํ•˜๊ธฐ 2๋Š” 4?
์‹คํ–‰ํ•ด๋ณด๋ฉด, 2 ๋”ํ•˜๊ธฐ 2๋Š” 22 ๋ผ๋Š” ์•Œ๋ฆผ์ฐฝ์ด ๋œฌ๋‹ค.

ํ”„๋กœ๊ทธ๋ž˜๋ฐ์€ ์™ผ์ชฝ์—์„œ๋ถ€ํ„ฐ ์ˆœ์„œ๋Œ€๋กœ ์‹คํ–‰๋˜๊ธฐ ๋•Œ๋ฌธ์— ์ด๋Ÿฐ ๊ฒฐ๊ณผ๊ฐ€ ๋‚˜ํƒ€๋‚˜๋Š”๊ฒƒ!

์ฐธ๊ณ ๋กœ ์œ„์˜ ๊ฒฝ์šฐ์—์„œ 2 ๋”ํ•˜๊ธฐ 2๋Š” 4 ๋ฅผ ์ •์ƒ์ ์œผ๋กœ ๋‚˜ํƒ€๋‚ด๋Š” ๋ฐฉ๋ฒ•์€
์˜ 2๊ฐ€์ง€ ๋ฐฉ๋ฒ•์ด ์žˆ๋‹ค!

1. Callback function

  • ์ด๋ฆ„ ๊ทธ๋Œ€๋กœ ๋‚˜์ค‘์— ํ˜ธ์ถœ๋˜๋Š” ํ•จ์ˆ˜
  • ํ•จ์ˆ˜ ๋“ฑ๋ก ํ›„์— ์ฝ”๋“œ์ƒ์—์„œ ํ˜ธ์ถœํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ, ํŠน์ • ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•˜๊ฑฐ๋‚˜ ํŠน์ • ์‹œ์ ์— ๋„๋‹ฌํ–ˆ์„๋•Œ ์ž๋™์œผ๋กœ ์‹œ์Šคํ…œ์—์„œ ํ˜ธ์ถœํ•˜๋Š” ํ•จ์ˆ˜
function randomQuiz(answer, printYes, printNo) { // ํŠน์ • ์ด๋ฒคํŠธ์—์„œ ํ˜ธ์ถœ, ์ด๊ฒƒ์ด ๋ฐ”๋กœ Callback!
  if (answer === "solmi") {
    printYes(); // answer์™€ ์ผ์น˜ํ•˜๋ฉด printYes ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœ
  } else {
    printNo(); // answer์™€ ์ผ์น˜ํ•˜์ง€ ์•Š์œผ๋ฉด printNo ํ•จ์ˆ˜ ํ˜ธ์ถœ
  }
}

const printYes = function () {
  console.log("yes!!");
};
const printNo = function () {
  console.log("No!!");
};

randomQuiz("coder", printYes, printNo); //"No!!" ์ถœ๋ ฅ
randomQuiz("solmi", printYes, printNo); //"Yes!!" ์ถœ๋ ฅ

2. Anonymous function (์ต๋ช… ํ•จ์ˆ˜)

function(x, y) { // ์ต๋ช… ํ•จ์ˆ˜๋Š” ์ด๋ฆ„์ด ์—†์–ด์„œ ์ด๋ฆ„์„ ๊ฐ€์ง€๊ณ  ํ˜ธ์ถœ ํ•  ์ˆ˜ ์—†๋‹ค.
  return x + y;
}

const add = function(x, y) { // ๋ณ€์ˆ˜์— ์ €์žฅํ•œ ํ›„์— ๋ณ€์ˆ˜์˜ ์ด๋ฆ„์„ ํ†ตํ•ด ํ˜ธ์ถœ
  return x + y;
}

add(1, 2); // 3 ์ถœ๋ ฅ
  • ํ•จ์ˆ˜๋ฅผ ๋งŒ๋“  ์ชฝ์ด ์•„๋‹ˆ๋ผ ๋‹ค๋ฅธ ์ชฝ์—์„œ ๊ทธ ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•  ๋•Œ ๋งŽ์ด ์“ด๋‹ค. (ํ•จ์ˆ˜๋ฅผ ์ธ์ˆ˜๋กœ ๋„˜๊ฒจ์ค„ ๋•Œ)

3. Named function

const printNo = function ptint() {
	console.log("no");
	print(); // ํ•จ์ˆ˜ ์•ˆ์—์„œ ๋ณธ์ธ ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœ ๊ฐ€๋Šฅ
};
  • ๋””๋ฒ„๊น… ํ•  ๋•Œ, error stack trace์—์„œ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•œ ํ•จ์ˆ˜์˜ ์ด๋ฆ„์„ ๋‚˜ํƒ€๋‚ด๊ธฐ ์œ„ํ•ด ์ด๋ฆ„์„ ๋ถ™์ธ๋‹ค.

    stack property๋ฅผ ํ†ตํ•ด ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ, ์—๋Ÿฌ๋ฅผ ์ผ์œผํ‚จ ํŒŒ์ผ์— ๋Œ€ํ•œ history ๋ฅผ ์ „๋‹ฌํ•ด์ค€๋‹ค.(๊ณ  ํ•œ๋‹ค. ์ž˜ ๋ชจ๋ฆ„)
    ๋””๋ฒ„๊น…์— ๋Œ€ํ•ด์„  ์ข€ ๋” ๊ณ ์ˆ˜๊ฐ€ ๋˜๋ฉด ์ •๋ฆฌํ•ด๋ด์•ผ์ง€....

  • ๊ทธ๋ฆฌ๊ณ  ์˜ˆ์ œ์ฒ˜๋Ÿผ ํ•จ์ˆ˜ ์•ˆ์—์„œ ๋ณธ์ธ ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•  ๋•Œ ์“ฐ์ธ๋‹ค. (์˜ˆ์ œ์ฒ˜๋Ÿผ ์ž‘์„ฑํ•˜๋ฉด ๋ฉ”๋ชจ๋ฆฌ ํ„ฐ์ ธ๋ฒ„๋ฆฌ์ง€๋งŒ, ์•„๋ฌดํŠผ ์กฐ๊ฑด๊ฐ’์ด๋‚˜ ํŠน์ • ๋กœ์ง์„ ๋„ฃ์–ด์„œ ์–ด๋–ค ๊ฐ’์„ ๊ณ„์‚ฐํ•œ๋‹ค๋˜์ง€ ๋“ฑ๋“ฑ ํ™œ์šฉ ๋ฐฉ๋ฒ•์ด ๋งŽ์ด ์žˆ๋‹ค.)


4. Arrow function

  • ES2015 (ES6)๋ถ€ํ„ฐ ์ถ”๊ฐ€๋˜์—ˆ๋‹ค.
  • ํ•ญ์ƒ ์ด๋ฆ„์ด ์—†๋Š” Anonymous function ์ด๋‹ค!
  • (๋งค๊ฐœ๋ณ€์ˆ˜ ๋ชฉ๋ก) => {ํ•จ์ˆ˜ ๋‚ด์šฉ} ํ˜•์‹์œผ๋กœ ์ž‘์„ฑ
const add = function (x, y) {
  return x + y;
}

์ˆซ์ž ๋‘๊ฐœ ๋”ํ• ๋ฟ์ธ๋ฐ 3์ค„์ด๋‚˜ ์ฐจ์ง€ํ•˜๋Š” ํ•จ์ˆ˜.......
์ด๋ ‡๊ฒŒ ์ž‘์„ฑ ๊ฐ€๋Šฅํ•˜๋‹ค!

const add = (x, y) => x + y;
  1. ํ™”์‚ดํ‘œ ํ•จ์ˆ˜์˜ย ๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€ ํ•˜๋‚˜๋ผ๋ฉด,ย ๊ด„ํ˜ธ ์ƒ๋žต
  2. ํ™”์‚ดํ‘œ ํ•จ์ˆ˜์˜ ๋‚ด๋ถ€๊ฐ€ย ํ•˜๋‚˜์˜ ๊ตฌ๋ฌธ์œผ๋กœ ์ด๋ฃจ์–ด์กŒ๋‹ค๋ฉด,ย ์ค‘๊ด„ํ˜ธ ์ƒ๋žต โ‡’ย ๊ตฌ๋ฌธ์˜ ๊ฒฐ๊ณผ๊ฐ’์ด ๊ณง ํ•จ์ˆ˜์˜ ๋ฐ˜ํ™˜๊ฐ’

๐Ÿ’๐Ÿปโ€โ™€๏ธ ํ™”์‚ดํ‘œ ํ•จ์ˆ˜๋Š” ํ‘œ๊ธฐ๋ฒ•์ด ๊ฐ„๋‹จํ•ด์„œ ์ต๋ช… ํ•จ์ˆ˜๋ฅผ ๋‹ค๋ฅธ ํ•จ์ˆ˜์˜ ์ธ์ˆ˜๋กœ ๋„˜๊ธธ ๋•Œ ์ฃผ๋กœ ์‚ฌ์šฉํ•œ๋‹ค.

[1, 2, 3, 4, 5].filter(x => x % 2 === 0);`

Bonus! IIFE

  • ์ฆ‰์‹œ ์‹คํ–‰ ํ•จ์ˆ˜ ํ‘œํ˜„
    (IIFE, Immediately Invoked Function Expression)
function hello() {
  console.log("hello");
}
hello();

์ด๋ ‡๊ฒŒ ํ˜ธ์ถœํ•  ์ˆ˜๋„ ์žˆ์ง€๋งŒ, ํ•จ์ˆ˜ ์„ ์–ธํ•˜๊ณ  ๋ฐ”๋กœ ํ˜ธ์ถœํ•  ๊ฑฐ๋ผ๋ฉด

(function hello() {
  console.log("hello");
})();

โ‡’ ์ด๋ ‡๊ฒŒ ํ•จ์ˆ˜ ์ „์ฒด๋ฅผ ()๋กœ ๋ฌถ๊ณ , ๊ด„ํ˜ธ ๋‹ค์Œ์— ํ•จ์ˆ˜ ํ˜ธ์ถœํ•˜๋“ฏ์ด (); ๋ฅผ ์ž‘์„ฑํ•ด์ฃผ๋ฉด ์ฆ‰์‹œ ํ˜ธ์ถœ์ด ๊ฐ€๋Šฅํ•˜๋‹ค!


Quiz!!

๐Ÿ’ฏ function calculate (command, a, b)
1. command์— ๋”ฐ๋ผ a์™€ b์˜ ์ˆซ์ž๊ฐ’์„ ๊ฐ€์ง€๊ณ  ๊ณ„์‚ฐ๋˜๋Š” ํ•จ์ˆ˜ ๋งŒ๋“ค๊ธฐ!
2. command : add, subtract, divide, multiply, remainder

๋‚ด ํ’€์ด

function calculate(command, a, b) {
  switch (calculate) { // switch()์— calculate ํ•จ์ˆ˜๋ช…์„ ์จ๋ฒ„๋ ธ๋‹น..
    case "add":
      return a + b;
    case "subtract":
      return a - b;
    case "divide":
      return a / b;
    case "multiply":
      return a * b;
    case "remainder":
      return a % b;
    default:
      console.log(
        "add, subtract, divide, multiply, remainder ์ค‘์—์„œ ์ž…๋ ฅํ•ด์ฃผ์„ธ์š”."
      );
      break;
  }
}
console.log(calculate("remainder", 44, 5)); // ์™œ ์ถœ๋ ฅ์ด ์•ˆ๋˜์ง€?

โ‡’ switch ๊ตฌ๋ฌธ์ด ์ต์ˆ™ํ•˜์ง€ ์•Š์•„์„œ ()์— ๋ญ˜ ๋„ฃ์„์ง€ ํ•œ์ฐธ ๊ณ ๋ฏผํ–ˆ๋‹ค....
calculate ๋„ฃ๊ณ  ์•ˆ๋˜๋‹ˆ๊นŒ ๊ตฌ๊ธ€๋ง ํ–ˆ๋Š”๋ฐ ๊ฒ€์ƒ‰์–ด๊ฐ€ ์ž˜๋ชป๋๋˜๊ฑด์ง€ ๊ธ€๋„ ์•ˆ๋‚˜์˜ค๊ณ ใ… ใ… 
โ‡’ ์‹คํ–‰์ด ์•ˆ๋˜๋ฉด ์ด๊ฒƒ์ €๊ฒƒ ๊ฐ’์„ ๋‹ค ๋„ฃ์–ด๋ณด์žใ… 

์ •๋‹ต? ๊ฐœ์„ ํ•œ ์ฝ”๋“œ!

function calculate(command, a, b) {
  switch (command) {
    case "add":
      return a + b;
    case "subtract":
      return a - b;
    case "divide":
      return a / b;
    case "multiply":
      return a * b;
    case "remainder":
      return a % b;
    default:
      console.log(
        "add, subtract, divide, multiply, remainder ์ค‘์—์„œ ์ž…๋ ฅํ•ด์ฃผ์„ธ์š”."
      );
      break;
  }
}
console.log(calculate("remainder", 44, 5));
profile
ํ•˜๋ฃจ๋Š” ์น˜์—ดํ•˜๊ฒŒ ์ธ์ƒ์€ ์—ฌ์œ ๋กญ๊ฒŒ

0๊ฐœ์˜ ๋Œ“๊ธ€