๐Ÿฆ_21.12.01(1) TIL

Boriยท2021๋…„ 12์›” 1์ผ
0
post-thumbnail

21๋…„ 12์›” 01(1)์ผ

๐Ÿ“ Javascript

๐Ÿ“Ž ์—ฐ์Šต๋ฌธ์ œ ํ’€๊ธฐ

๐Ÿ“Ž ๋ฐฐ์—ด(array)

  • ์ˆœ์„œ๊ฐ€ ์žˆ๋Š” ์ž๋ฃŒ๋ฅผ ์ €์žฅํ•˜๊ณ  ๊ด€๋ฆฌํ•˜๋Š” ์šฉ๋„์— ์ตœ์ ํ™”๋œ ์ž๋ฃŒ๊ตฌ์กฐ
  • 0๊ฐœ ์ด์ƒ์˜ ๊ฐ’์„ ์‰ผํ‘œ๋กœ ๊ตฌ๋ถ„, ๋Œ€๊ด„ํ˜ธ๋กœ ๋ฌถ๋Š”๋‹ค.
  • ์ฒซ ๋ฒˆ์งธ ์ธ๋ฑ์Šค๋Š” '0'๋ถ€ํ„ฐ ์‹œ์ž‘
  • ์กด์žฌํ•˜์ง€ ์•Š์€ ์š”์†Œ์— ์ ‘๊ทผ ์‹œ undefined ๋ฐ˜ํ™˜
// ๋ฐฐ์—ด ๋งŒ๋“ค๊ธฐ
let fruits = ["apple", "banana", "pear"];

console.log(fruits.length); // ๋ฐฐ์—ด์˜ ๊ธธ์ด 3

๐Ÿ“Ž ํ•จ์ˆ˜(function)

  • ํ•จ์ˆ˜ : ์ž…๋ ฅ, ์ถœ๋ ฅ, ๊ธฐ๋Šฅ์„ ํ•˜๋‚˜๋กœ ๋ฌถ์–ด ์žฌ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ๋งŒ๋“œ๋Š” ๊ฒƒ
    => ์–ด๋–ค ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๊ธฐ ์œ„ํ•ด ํ•„์š”ํ•œ ๋ฌธ(statement)๋“ค์˜ ์ง‘ํ•ฉ์„ ์ •์˜ํ•œ ์ฝ”๋“œ ๋ธ”๋ก
  • ํ•จ์ˆ˜๋Š” ์ด๋ฆ„๊ณผ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ๊ฐ€์ง
  • ํ•„์š”ํ•œ ๋•Œ์— ํ˜ธ์ถœํ•˜์—ฌ ์ฝ”๋“œ ๋ธ”๋ก์— ๋‹ด๊ธด ๋ฌธ๋“ค์„ ์ผ๊ด„์ ์œผ๋กœ ์‹คํ–‰ ๊ฐ€๋Šฅ
// ํ•จ์ˆ˜ ์ •์˜ - ํ•จ์ˆ˜ ์„ ์–ธ๋ฌธ
function square(number) {
  return number * number; 
}

// ํ•จ์ˆ˜ ํ˜ธ์ถœ
square(2); // 4
square(4); // 16 ์—ฌ๋Ÿฌ๋ฒˆ ํ˜ธ์ถœ ๊ฐ€๋Šฅ
  • ํ•จ์ˆ˜์˜ ํŠน์„ฑ์€ ์ฝ”๋“œ์˜ ์žฌ์‚ฌ์šฉ์˜ ์ธก๋ฉด์—์„œ ๋งค์šฐ ์œ ์šฉ
    => ์ผ๋ฐ˜์  ๊ธฐ๋Šฅ ์ด์™ธ์— ๊ฐ์ฒด ์ƒ์„ฑ, ๊ฐ์ฒด์˜ ํ–‰์œ„ ์ •์˜(๋ฉ”์†Œ๋“œ), ์ •๋ณด ์€๋‹‰, ํด๋กœ์ €, ๋ชจ๋“ˆํ™” ๋“ฑ์˜ ๊ธฐ๋Šฅ ์ˆ˜ํ–‰ ๊ฐ€๋Šฅ

ํ•จ์ˆ˜ ์ •์˜

  • ํ•จ์ˆ˜ ์„ ์–ธ๋ฌธ(Function declaration)
    • ํ•จ์ˆ˜๋ช… : ํ•จ์ˆ˜ ์„ ์–ธ๋ฌธ์€ ํ•จ์ˆ˜๋ช…์„ ์ƒ๋žตํ•  ์ˆ˜ ์—†๋‹ค.
      => ํ•จ์ˆ˜๋ช…์€ ํ•จ์ˆ˜ ๋ชธ์ฒด์—์„œ ์ž์‹ ์„ ์žฌ๊ท€์  ํ˜ธ์ถœํ•˜๊ฑฐ๋‚˜ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๋””๋ฒ„๊ฑฐ๊ฐ€ ํ•ด๋‹น ํ•จ์ˆ˜๋ฃฐ ๊ตฌ๋ถ„ํ•  ์ˆ˜ ์žˆ๋Š” ์‹๋ณ„์ž
    • ๋งค๊ฐœ๋ณ€์ˆ˜ ๋ชฉ๋ก : 0๊ฐœ ์ด์ƒ์˜ ๋ชฉ๋ก์œผ๋กœ ๊ด„ํ˜ธ()๋กœ ๊ฐ์‹ธ๊ณ  ์ฝค๋งˆ,๋กœ ๋ถ„๋ฆฌ
    • ํ•จ์ˆ˜ ๋ชธ์ฒด : ํ•จ์ˆ˜๊ฐ€ ํ˜ธ์ถœ๋˜์—ˆ์„ ๋•Œ ์‹คํ–‰๋˜๋Š” ๋ฌธ๋“ค์˜ ์ง‘ํ•ฉ. ์ค‘๊ด„ํ˜ธ{}๋กœ ๋ฌธ๋“ค์„ ๊ฐ์‹ธ๊ณ  return๋ฌธ์œผ๋กœ ๊ฒฐ๊ณผ๊ฐ’(= ๋ฐ˜ํ™˜๊ฐ’, return value)์„ ๋ฐ˜ํ™˜
// ํ•จ์ˆ˜ ์„ ์–ธ๋ฌธ
function ํ•จ์ˆ˜๋ช…(๋งค๊ฐœ๋ณ€์ˆ˜) {
  ํ•จ์ˆ˜ ๋ชธ์ฒด
  return ๋ฐ˜ํ™˜๊ฐ’; 
}
  • ํ•จ์ˆ˜ ํ‘œํ˜„์‹(Function expression) : ํ•จ์ˆ˜ ๋ฆฌํ„ฐ๋Ÿด ๋ฐฉ์‹์œผ๋กœ ํ•จ์ˆ˜๋ฅผ ์ •์˜ํ•˜๊ณ  (์ด ํ•จ์ˆ˜๋ฅผ) ๋ณ€์ˆ˜์— ํ• ๋‹นํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ ์ด๋Ÿฌํ•œ ๋ฐฉ์‹์„ ํ•จ์ˆ˜ ํ‘œํ˜„์‹์ด๋ผ๊ณ  ํ•œ๋‹ค.
    • ํ•จ์ˆ˜๋ช… ์ƒ๋žต ๊ฐ€๋Šฅ
      => ์ต๋ช… ํ•จ์ˆ˜(anonymous function)
      => ํ•จ์ˆ˜ ํ‘œํ˜„์‹์—์„œ๋Š” ํ•จ์ˆ˜๋ช…์„ ์ƒ๋žตํ•˜๋Š” ๊ฒƒ์ด ์ผ๋ฐ˜์ 
// ์ต๋ช… ํ•จ์ˆ˜ ํ‘œํ˜„์‹(anonymous function expression)
var ๋ณ€์ˆ˜๋ช…1 = function (๋งค๊ฐœ๋ณ€์ˆ˜) {
  ํ•จ์ˆ˜ ๋ชธ์ฒด
  return ๋ฐ˜ํ™˜๊ฐ’; 
}

console.log(๋ณ€์ˆ˜๋ช…1(์ธ์ˆ˜)); // ๋ฐ˜ํ™˜๊ฐ’

// ๊ธฐ๋ช… ํ•จ์ˆ˜ ํ‘œํ˜„์‹(named function expression)
var ๋ณ€์ˆ˜๋ช…2 = function ๊ธฐ๋ช…ํ•จ์ˆ˜๋ช…(๋งค๊ฐœ๋ณ€์ˆ˜) {
  ํ•จ์ˆ˜ ๋ชธ์ฒด
  return ๋ฐ˜ํ™˜๊ฐ’; 
}

console.log(๊ธฐ๋ช…ํ•จ์ˆ˜๋ช…(์ธ์ˆ˜)); // ReferenceError: ๊ธฐ๋ช…ํ•จ์ˆ˜๋ช… is not defined
console.log(๋ณ€์ˆ˜๋ช…2(์ธ์ˆ˜)); // ๋ฐ˜ํ™˜๊ฐ’
// ํ•จ์ˆ˜ ํ˜ธ์ถœ์‹œ ํ•จ์ˆ˜๋ช…์ด ์•„๋‹ˆ๋ผ ํ•จ์ˆ˜๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” ๋ณ€์ˆ˜๋ช…์„ ์‚ฌ์šฉํ•ด์•ผํ•œ๋‹ค.

๐Ÿ“Ž ํ•จ์ˆ˜ ํ˜ธ์ด์ŠคํŒ…(Function Hoisting)

ํ•จ์ˆ˜ ์ •์˜ ๋ฐฉ์‹์— ๋”ฐ๋ผ ๋™์ž‘ ๋ฐฉ์‹์— ์•ฝ๊ฐ„์˜ ์ฐจ์ด๊ฐ€ ์žˆ๋‹ค.

// ํ•จ์ˆ˜ ์„ ์–ธ๋ฌธ์œผ๋กœ ํ•จ์ˆ˜๊ฐ€ ์ •์˜๋˜๊ธฐ ์ด์ „์— ํ•จ์ˆ˜ ํ˜ธ์ถœ ๊ฐ€๋Šฅ
// ํ•จ์ˆ˜ ์„ ์–ธ์˜ ์œ„์น˜์™€ ์ƒ๊ณผ๋„š์ด ์ฝ”๋“œ ๋‚ด ์–ด๋””๋“ ์ง€ ํ˜ธ์ถœ์ด ๊ฐ€๋Šฅ
// ํ•จ์ˆ˜ ํ˜ธ์ด์ŠคํŒ…
var ๋ณ€์ˆ˜๋ช… = ํ•จ์ˆ˜๋ช…(์ธ์ˆ˜); // ๋ฐ˜ํ™˜๊ฐ’

// ํ•จ์ˆ˜ ์„ ์–ธ๋ฌธ
function ํ•จ์ˆ˜๋ช…(๋งค๊ฐœ๋ณ€์ˆ˜) {
  ํ•จ์ˆ˜ ๋ชธ์ฒด
  return ๋ฐ˜ํ™˜๊ฐ’; 
}

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋Š” ES6์˜ let, const๋ฅผ ํฌํ•จํ•˜์—ฌ ๋ชจ๋“  ์„ ์–ธ(var, let, const, function, function*, class)์„ ํ˜ธ์ด์ŠคํŒ… ํ•œ๋‹ค.

ํ˜ธ์ด์ŠคํŒ…

  • ๋ชจ๋“  ์„ ์–ธ๋ฌธ์ด ํ•ด๋‹น ์Šค์ฝ”ํ”„(scope)์˜ ์„ ๋‘(์ตœ์ƒ๋‹จ)๋กœ ์˜ฎ๊ฒจ์ง„ ๊ฒƒ์ฒ˜๋Ÿผ ๋™์ž‘ํ•˜๋Š” ํŠน์„ฑ
    => ๋”ฐ๋ผ์„œ, ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋Š” ๋ชจ๋“  ์„ ์–ธ๋ฌธ์ด ์„ ์–ธ๋˜๊ธฐ ์ด์ „์— ์ฐธ์กฐ ๊ฐ€๋Šฅ
  • ํ•จ์ˆ˜ ์„ ์–ธ๋ฌธ์œผ๋กœ ์ •์˜๋œ ํ•จ์ˆ˜๋Š” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์—”์ง„์ด ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ๋กœ๋”ฉ๋˜๋Š” ์‹œ์ ์— ํ•จ์ˆ˜ ์„ ์–ธ, ์ดˆ๊ธฐํ™”, ํ• ๋‹น์ด ํ•œ ๋ฒˆ์— ์ด๋ฃจ์–ด์ง„๋‹ค.
    => ํ•จ์ˆ˜ ์„ ์–ธ์˜ ์œ„์น˜์™€ ์ƒ๊ด€์—†์ด ์†Œ์Šค ๋‚ด ์–ด๋Š ๊ณณ์—์„œ๋Š”์ง€ ํ˜ธ์ถœ ๊ฐ€๋Šฅ
  • ํ•จ์ˆ˜ ํ‘œํ˜„์‹์˜ ๊ฒฝ์šฐ ํ•จ์ˆ˜ ํ˜ธ์ด์ŠคํŒ…์ด ์•„๋‹ˆ๋ผ ๋ณ€์ˆ˜ ํ˜ธ์ด์ŠคํŒ…์ด ๋ฐœ์ƒ
    => ํ•จ์ˆ˜ ํ‘œํ˜„์‹์œผ๋กœ ์ •์˜๋œ ํ•จ์ˆ˜๋Š” ํ•จ์ˆ˜๊ฐ€ ํ• ๋‹น๋˜๊ธฐ ์ „๊นŒ์ง€ ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•  ์ˆ˜ ์—†๋‹ค.
๋ณ€์ˆ˜ ํ˜ธ์ด์ŠคํŒ… : ๋ณ€์ˆ˜ ์ƒ์„ฑ ๋ฐ ์ดˆ๊ธฐํ™”์™€ ํ• ๋‹น์ด ๋ถ„๋ฆฌ๋˜์–ด ์ง„์Ÿ. ํ˜ธ์ด์ŠคํŒ… ๋œ ๋ณ€์ˆ˜๋Š” undefined๋กœ ์ดˆ๊ธฐํ™” ๋˜๊ณ  ์‹ค์ œ๊ฐ’์˜ ํ• ๋‹น์€ ํ• ๋‹น๋ฌธ์—์„œ ์ด๋ฃจ์–ด์ง

๐Ÿ“Ž ๋งค๊ฐœ๋ณ€์ˆ˜(Parameter, ์ธ์ž) vs ์ธ์ˆ˜(argument)

๋งค๊ฐœ๋ณ€์ˆ˜

  • ํ•จ์ˆ˜์˜ ์ •์˜ ๋ถ€๋ถ„์— ๋‚˜์—ด๋˜์–ด ์žˆ๋Š” ๋ณ€์ˆ˜
  • ํ•จ์ˆ˜ ๋‚ด์—์„œ ๋ณ€์ˆ˜์™€ ๋™์ผํ•˜๊ฒŒ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์„ ํ™•๋ณด

์ธ์ˆ˜

  • ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•  ๋•Œ ์ „๋‹ฌ๋˜๋Š” ์‹ค์ œ ๊ฐ’
  • ํ•จ์ˆ˜์— ์ „๋‹ฌํ•œ ์ธ์ˆ˜๋Š” ๋งค๊ฐœ๋ณ€์ˆ˜์— ํ• ๋‹น๋จ
  • ์ธ์ˆ˜๋ฅผ ์ „๋‹ฌํ•˜์ง€ ์•Š์œผ๋ฉด ๋งค๊ฐœ๋ณ€์ˆ˜๋Š” undefined๋กœ ์ดˆ๊ธฐํ™”
// ํ•จ์ˆ˜ ์„ ์–ธ๋ฌธ
function ํ•จ์ˆ˜๋ช…(๋งค๊ฐœ๋ณ€์ˆ˜1, ๋งค๊ฐœ๋ณ€์ˆ˜2) {
  console.log(๋งค๊ฐœ๋ณ€์ˆ˜1, ๋งค๊ฐœ๋ณ€์ˆ˜2);
}

ํ•จ์ˆ˜๋ช…(์ธ์ˆ˜a, ์ธ์ˆ˜b); 
// ์ธ์ˆ˜a๋Š” ๋งค๊ฐœ๋ณ€์ˆ˜1์— ์ „๋‹ฌ
// ์ธ์ˆ˜b๋Š” ๋งค๊ฐœ๋ณ€์ˆ˜2์— ์ „๋‹ฌ
// (์ธ์ˆ˜a, ์ธ์ˆ˜b)์ด ๋ฐ˜ํ™˜๋˜์–ด ์ถœ๋ ฅ๋จ
// ์ถœ๋ ฅ ๊ฒฐ๊ณผ : ์ธ์ˆ˜a ์ธ์ˆ˜b

ํ•จ์ˆ˜๋ช…(์ธ์ˆ˜c); 
// ๋‘ ๋ฒˆ์งธ ์ธ์ˆ˜๊ฐ€ ์ „๋‹ฌ๋˜์ง€ ์•Š์€ ๊ฒฝ์šฐ,
// ์ถœ๋ ฅ ๊ฒฐ๊ณผ : ์ธ์ˆ˜c undefined 

๐Ÿ“Ž ๋ฐ˜ํ™˜๊ฐ’

ํ•จ์ˆ˜๋Š” ์ž์‹ ์„ ํ˜ธ์ถœํ•œ ์ฝ”๋“œ์—๊ฒŒ ์ˆ˜ํ–‰ํ•œ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ˜ํ™˜(return)ํ•  ์ˆ˜ ์žˆ๋‹ค.

  • return ํ‚ค์›Œ๋“œ๋Š” ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•œ ์ฝ”๋“œ์—๊ฒŒ ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•  ๋•Œ ์‚ฌ์šฉ
  • ํ•จ์ˆ˜๋Š” ๋ฐฐ์—ด ๋“ฑ์„ ์ด์šฉํ•˜์—ฌ ํ•œ ๋ฒˆ์— ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๊ฐ’์„ ๋ฆฌํ„ดํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ํ•จ์ˆ˜๋Š” ๋ฐ˜ํ™˜์„ ์ƒ๋žตํ•  ์ˆ˜ ์žˆ๋‹ค
    => ์ด๋•Œ ํ•จ์ˆ˜๋Š” ์•”๋ฌต์ ์œผ๋กœ undefined๋ฅผ ๋ฐ˜ํ™˜
  • ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ํ•ด์„๊ธฐ๋Š” return ํ‚ค์›Œ๋“œ๋ฅผ ๋งŒ๋‚˜๋ฉด ํ•จ์ˆ˜์˜ ์‹คํ–‰์„ ์ค‘๋‹จ
    => ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•œ ์ฝ”๋“œ๋กœ ๋˜๋Œ์•„๊ฐ„๋‹ค.
    ๋งŒ์ผ return ํ‚ค์›Œ๋“œ ์ดํ›„์— ๋‹ค๋ฅธ ๊ตฌ๋ฌธ์ด ์กด์žฌํ•œ๋‹ค๋ฉด ๊ทธ ๊ตฌ๋ฌธ์€ ์‹คํ–‰๋˜์ง€ ์•Š๋Š”๋‹ค.

์ฐธ๊ณ ๋งํฌ

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