/JavaScript

๐Ÿ“‘ JavaScript์— ๋Œ€ํ•ด ํ•™์Šตํ•œ ๋‚ด์šฉ์„ ์ •๋ฆฌํ•œ ๋ ˆํฌ์ง€ํ† ๋ฆฌ์ž…๋‹ˆ๋‹ค.

๊ฐœ์š”

  • ์›น ๋ธŒ๋ผ์šฐ์ €์˜ ์—ญํ• 
    • URL์„ ํ†ตํ•ด Web(WWW)์„ ํƒ์ƒ‰ํ•จ
    • HTML / CSS / JavaScript ๋ฅผ ์ดํ•ดํ•œ ๋’ค ํ•ด์„ํ•ด์„œ ์‚ฌ์šฉ์ž์—๊ฒŒ ํ•˜๋‚˜์˜ ํ™”๋ฉด์œผ๋กœ ๋ณด์—ฌ์คŒ
    • ์›น ์„œ๋น„์Šค ์ด์šฉ ์‹œ ํด๋ผ์ด์–ธํŠธ์˜ ์—ญํ• ์„ ํ•จ
    • ์ฆ‰, ์›น ํŽ˜์ด์ง€ ์ฝ”๋“œ๋ฅผ ์ดํ•ดํ•˜๊ณ , ๋ณด์—ฌ์ฃผ๋Š” ์—ญํ• ์„ ํ•˜๋Š” ๊ฒƒ์ด ์›น ๋ธŒ๋ผ์šฐ์ €
  • ์›น ๋ธŒ๋ผ์šฐ์ €๋Š” JavaScript๋ฅผ ํ•ด์„ํ•˜๋Š” ์—”์ง„์„ ๊ฐ€์ง€๊ณ  ์žˆ์Œ
  • ํ˜„์žฌ์˜ JavaScript๋Š” ์ด์ œ ์‹œ์žฅ์—์„œ ์ž๋ฆฌ๋ฅผ ์žก์€ ์–ธ์–ด์ด๋ฉฐ, ๊ฐœ๋ฐœ์—์„œ ํฐ ์ถ•์„ ๋‹ด๋‹นํ•จ
  • ํŠนํžˆ Chrome V8์˜ ๊ฒฝ์šฐ JavaScript๋ฅผ ๋ฒˆ์—ญํ•˜๋Š” ์†๋„๊ฐ€ ๋งค์šฐ ๋น ๋ฆ„
    • node.js, react.js, electron ๋“ฑ์˜ ๋‚ด๋ถ€ ์—”์ง„์œผ๋กœ ์‚ฌ์šฉ๋จ
    • ๊ทธ ๊ฒฐ๊ณผ BE, mobile, desktop app ๋“ฑ์„ ๋ชจ๋‘ JavaScript๋กœ ๊ฐœ๋ฐœ์ด ๊ฐ€๋Šฅํ•ด์ง

JavaScript ์ฝ”๋“œ ์ž‘์„ฑ๋ฒ•

  • ์„ธ๋ฏธ์ฝœ๋ก  (semicolon)

    • ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋Š” ์„ธ๋ฏธ์ฝœ๋ก ์„ ์„ ํƒ์ ์œผ๋กœ ์‚ฌ์šฉ ๊ฐ€๋Šฅ
    • ์„ธ๋ฏธ์ฝœ๋ก ์ด ์—†์œผ๋ฉด ASI์— ์˜ํ•ด ์ž๋™์œผ๋กœ ์„ธ๋ฏธ์ฝœ๋ก ์ด ์‚ฝ์ž…๋จ
      • ASI ( Automatic Semicolon Insertion, ์ž๋™ ์„ธ๋ฏธ์ฝœ๋ก  ์‚ฝ์ž… ๊ทœ์น™)
    console.log('hello');
    console.log('javascript')

  • ๋“ค์—ฌ์“ฐ๊ธฐ์™€ ์ฝ”๋“œ ๋ธ”๋Ÿญ

    • JavaScript๋Š” 2์นธ ๋“ค์—ฌ์“ฐ๊ธฐ๋ฅผ ์‚ฌ์šฉ
    • **๋ธ”๋Ÿญ(block)**์€ if, for, ํ•จ์ˆ˜์—์„œ ์ค‘๊ด„ํ˜ธ { } ๋‚ด๋ถ€๋ฅผ ๋งํ•จ
      • JavaScript๋Š” ์ค‘๊ด„ํ˜ธ { }๋ฅผ ์‚ฌ์šฉํ•ด ์ฝ”๋“œ ๋ธ”๋Ÿญ์„ ๊ตฌ๋ถ„
    if (isClean) { // ์ค‘๊ด„ํ˜ธ๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์ฝ”๋“œ ๋ธ”๋Ÿญ ๊ตฌ๋ถ„
     console.log('clean!')  // 2์นธ ๋“ค์—ฌ์“ฐ๊ธฐ
    }

  • ์ฃผ์„

    • // : ํ•œ ์ค„ ์ฃผ์„
    • /* */ : ์—ฌ๋Ÿฌ ์ค„ ์ฃผ์„
    // console.log('ํ™”๋ฉด์— ํ‘œ์‹œ๋˜์ง€ ์•Š์Œ')
    
    /* 
    ์—ฌ๋Ÿฌ ์ค„ ์ฃผ์„์€
    ์ด๋ ‡๊ฒŒ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
    */

  • ๋ณ€์ˆ˜์™€ ์‹๋ณ„์ž
    • ์‹๋ณ„์ž(identifier)๋Š” ๋ณ€์ˆ˜๋ฅผ ๊ตฌ๋ถ„ํ•  ์ˆ˜ ์žˆ๋Š” ๋ณ€์ˆ˜๋ช…์„ ๋งํ•จ
    • ์‹๋ณ„์ž๋Š” ๋ฐ˜๋“œ์‹œ ๋ฌธ์ž, $, _ ๋กœ ์‹œ์ž‘
    • ๋Œ€์†Œ๋ฌธ์ž๋ฅผ ๊ตฌ๋ถ„ํ•˜๋ฉฐ, ํด๋ž˜์Šค๋ช… ์™ธ์—๋Š” ๋ชจ๋‘ ์†Œ๋ฌธ์ž๋กœ ์‹œ์ž‘
    • ์˜ˆ์•ฝ์–ด ์‚ฌ์šฉ ๋ถˆ๊ฐ€๋Šฅ
      • ์˜ˆ์•ฝ์–ด ์˜ˆ์‹œ : for, if, function ๋“ฑ

  • ์‹๋ณ„์ž ์ •์˜์™€ ํŠน์ง•

    • ์นด๋ฉœ ์ผ€์ด์Šค (camelCase, lower-camel-case)

      • ๋ณ€์ˆ˜, ๊ฐ์ฒด, ํ•จ์ˆ˜์— ์‚ฌ์šฉ
      // ๋ณ€์ˆ˜
      let dog
      let variableName
      
      // ๊ฐ์ฒด
      const userInfo = { name: 'Tom', age: 20 }
      
      // ํ•จ์ˆ˜
      function add() {}
      function getName() {}
    • ํŒŒ์Šค์นผ ์ผ€์ด์Šค (PascalCase, upper-camel-case)

      • ํด๋ž˜์Šค, ์ƒ์„ฑ์ž์— ์‚ฌ์šฉ
      // ํด๋ž˜์Šค
      class User {
          constructor(options) {
              this.name = options.name
          }
      }
      
      // ์ƒ์„ฑ์ž ํ•จ์ˆ˜
      function User(options) {
          this.name = options.name
      }
    • ๋Œ€๋ฌธ์ž ์Šค๋„ค์ดํฌ ์ผ€์ด์Šค (SNAKE_CASE)

      • ์ƒ์ˆ˜ (constants)์— ์‚ฌ์šฉ
      • ์ƒ์ˆ˜ : ๊ฐœ๋ฐœ์ž์˜ ์˜๋„์™€ ์ƒ๊ด€์—†์ด ๋ณ€๊ฒฝ๋  ๊ฐ€๋Šฅ์„ฑ์ด ์—†๋Š” ๊ฐ’์„ ์˜๋ฏธ
      // ๊ฐ’์ด ๋ฐ”๋€Œ์ง€ ์•Š์„ ์ƒ์ˆ˜
      const API_KEY = 'my-key'
      const PI = Math.PI
      
      // ์žฌํ• ๋‹น์ด ์ผ์–ด๋‚˜์ง€ ์•Š๋Š” ๋ณ€์ˆ˜
      const NUMBERS = [1, 2, 3]

  • ๋ณ€์ˆ˜ ์„ ์–ธ ํ‚ค์›Œ๋“œ

    • let

      • ๋ธ”๋ก ์Šค์ฝ”ํ”„ ์ง€์—ญ ๋ณ€์ˆ˜๋ฅผ ์„ ์–ธ
        • ์ถ”๊ฐ€๋กœ ๋™์‹œ์— ๊ฐ’์„ ์ดˆ๊ธฐํ™”
    • const

      • ๋ธ”๋ก ์Šค์ฝ”ํ”„ ์ฝ๊ธฐ ์ „์šฉ ์ƒ์ˆ˜๋ฅผ ์„ ์–ธ
        • ์ถ”๊ฐ€๋กœ ๋™์‹œ์— ๊ฐ’์„ ์ดˆ๊ธฐํ™”
    • var

      • ๋ณ€์ˆ˜๋ฅผ ์„ ์–ธ
        • ์ถ”๊ฐ€๋กœ ๋™์‹œ์— ๊ฐ’์„ ์ดˆ๊ธฐํ™”
    • ์ฐธ๊ณ ) ์„ ์–ธ, ํ• ๋‹น, ์ดˆ๊ธฐํ™”

      • ์„ ์–ธ (Declaration)
        • ๋ณ€์ˆ˜๋ฅผ ์ƒ์„ฑํ•˜๋Š” ํ–‰์œ„ ๋˜๋Š” ์‹œ์ 
      • ํ• ๋‹น (Assignment)
        • ์„ ์–ธ๋œ ๋ณ€์ˆ˜์— ๊ฐ’์„ ์ €์žฅํ•˜๋Š” ํ–‰์œ„ ๋˜๋Š” ์‹œ์ 
      • ์ดˆ๊ธฐํ™” (Initialization)
        • ์„ ์–ธ๋œ ๋ณ€์ˆ˜์— ์ฒ˜์Œ์œผ๋กœ ๊ฐ’์„ ์ €์žฅํ•˜๋Š” ํ–‰์œ„ ๋˜๋Š” ์‹œ์ 
      let foo            // ์„ ์–ธ
      console.log(foo)   // undefined
      
      foo = 11           // ํ• ๋‹น
      console.log(foo)   // 11
      
      let bar = 0        // ์„ ์–ธ + ํ• ๋‹น
      console.log(bar)   // 0
    • ์ฐธ๊ณ ) ๋ธ”๋ก ์Šค์ฝ”ํ”„(block scope)

      • if, for, ํ•จ์ˆ˜ ๋“ฑ์˜ ์ค‘๊ด„ํ˜ธ { } ๋‚ด๋ถ€๋ฅผ ๊ฐ€๋ฆฌํ‚ด
      • ๋ธ”๋ก ์Šค์ฝ”ํ”„๋ฅผ ๊ฐ€์ง€๋Š” ๋ณ€์ˆ˜๋Š” ๋ธ”๋ก ๋ฐ”๊นฅ์—์„œ ์ ‘๊ทผ ๋ถˆ๊ฐ€๋Šฅ
      let x = 1;
      
      if (x === 1) {
          let x = 2
          console.log(x)   // 2
      }
      
      console.log(x)     // 1

  • ๋ณ€์ˆ˜ ์„ ์–ธ ํ‚ค์›Œ๋“œ - let

    • let

      • ์žฌํ• ๋‹น ๊ฐ€๋Šฅ & ์žฌ์„ ์–ธ ๋ถˆ๊ฐ€๋Šฅ
      let number = 10    // 1. ์„ ์–ธ ๋ฐ ์ดˆ๊ธฐ๊ฐ’ ํ• ๋‹น
      number = 20        // 2. ์žฌํ• ๋‹น
      let number = 10    // 1. ์„ ์–ธ ๋ฐ ์ดˆ๊ธฐ๊ฐ’ ํ• ๋‹น
      let number = 20    // 2. ์žฌ์„ ์–ธ ๋ถˆ๊ฐ€๋Šฅ
      • ๋ธ”๋ก ์Šค์ฝ”ํ”„๋ฅผ ๊ฐ–๋Š” ์ง€์—ญ ๋ณ€์ˆ˜๋ฅผ ์„ ์–ธ, ์„ ์–ธ๊ณผ ๋™์‹œ์— ์›ํ•˜๋Š” ๊ฐ’์œผ๋กœ ์ดˆ๊ธฐํ™” ํ•  ์ˆ˜ ์žˆ์Œ

  • ๋ณ€์ˆ˜ ์„ ์› ํ‚ค์›Œ๋“œ - const

    • const

      • ์žฌํ• ๋‹น ๋ถˆ๊ฐ€๋Šฅ & ์žฌ์„ ์–ธ ๋ถˆ๊ฐ€๋Šฅ
      const number = 10   // 1. ์„ ์–ธ ๋ฐ ์ดˆ๊ธฐ๊ฐ’ ํ• ๋‹น
      number = 20         // 2. ์žฌํ• ๋‹น ๋ถˆ๊ฐ€๋Šฅ
      const number = 10   // 1. ์„ ์–ธ ๋ฐ ์ดˆ๊ธฐ๊ฐ’ ํ• ๋‹น
      const number = 20   // 2. ์žฌ์„ ์–ธ ๋ถˆ๊ฐ€๋Šฅ
      • ์„ ์–ธ ์‹œ ๋ฐ˜๋“œ์‹œ ์ดˆ๊ธฐ๊ฐ’์„ ์„ค์ •ํ•ด์•ผ ํ•˜๋ฉฐ, ์ดํ›„ ๊ฐ’ ๋ณ€๊ฒฝ์ด ๋ถˆ๊ฐ€๋Šฅ
      • let ๊ณผ ๋™์ผํ•˜๊ฒŒ ๋ธ”๋ก ์Šค์ฝ”ํ”„๋ฅผ ๊ฐ€์ง

  • ๋ณ€์ˆ˜ ์„ ์–ธ ํ‚ค์›Œ๋“œ - var

    • var

      • ์žฌํ• ๋‹น ๊ฐ€๋Šฅ & ์žฌ์„ ์–ธ ๊ฐ€๋Šฅ

      • ES6 ์ด์ „์— ๋ณ€์ˆ˜๋ฅผ ์„ ์–ธํ•  ๋•Œ ์‚ฌ์šฉ๋˜๋˜ ํ‚ค์›Œ๋“œ

      • ํ˜ธ์ด์ŠคํŒ… ๋˜๋Š” ํŠน์„ฑ์œผ๋กœ ์ธํ•ด ์˜ˆ๊ธฐ์น˜ ๋ชปํ•œ ๋ฌธ์ œ ๋ฐœ์ƒ ๊ฐ€๋Šฅ

        • ES6 ์ดํ›„๋ถ€ํ„ฐ๋Š” var ๋Œ€์‹  const ์™€ let ์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์„ ๊ถŒ์žฅ
      • ํ•จ์ˆ˜ ์Šค์ฝ”ํ”„๋ฅผ ๊ฐ€์ง

        • ํ•จ์ˆ˜์˜ ์ค‘๊ด„ํ˜ธ ๋‚ด๋ถ€๋ฅผ ๊ฐ€๋ฆฌํ‚ด
        • ํ•จ์ˆ˜ ์Šค์ฝ”ํ”„๋ฅผ ๊ฐ€์ง€๋Š” ๋ณ€์ˆ˜๋Š” ํ•จ์ˆ˜ ๋ฐ”๊นฅ์—์„œ ์ ‘๊ทผ ๋ถˆ๊ฐ€๋Šฅ
        function foo() {
            var x = 5
            console.log(x)    // 5
        }
        
        // ReferenceError : x is not defined
        console.log(x)
      • ๋ณ€์ˆ˜ ์„ ์–ธ ์‹œ var, const, let ํ‚ค์›Œ๋“œ ์ค‘ ํ•˜๋‚˜๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š์œผ๋ฉด ์ž๋™์œผ๋กœ var๋กœ ์„ ์–ธ๋จ

    • ์ฐธ๊ณ ) ํ˜ธ์ด์ŠคํŒ… ( hoisting )

      • ๋ณ€์ˆ˜๋ฅผ ์„ ์–ธ ์ด์ „์— ์ฐธ์กฐํ•  ์ˆ˜ ์žˆ๋Š” ํ˜„์ƒ
      • var๋กœ ์„ ์–ธ๋œ ๋ณ€์ˆ˜๋Š” ์„ ์–ธ ์ด์ „์— ์ฐธ์กฐํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ด๋Ÿฌํ•œ ํ˜„์ƒ์„ ํ˜ธ์ด์ŠคํŒ…์ด๋ผ ํ•จ
      • ๋ณ€์ˆ˜ ์„ ์–ธ ์ด์ „์˜ ์œ„์น˜์—์„œ ์ ‘๊ทผ ์‹œ undefined๋ฅผ ๋ฐ˜ํ™˜
      console.log(name)   // undefined => ์„ ์–ธ ์ด์ „์— ์ฐธ์กฐ
      
      var name = 'ํ™๊ธธ๋™'  // ์„ ์–ธ
      // ์œ„ ์ฝ”๋“œ๋ฅผ ์•”๋ฌต์ ์œผ๋กœ ์•„๋ž˜์™€ ๊ฐ™์ด ์ดํ•ดํ•จ
      var name      // undefined๋กœ ์ดˆ๊ธฐํ™”
      console.log(name)
      
      var name = 'ํ™๊ธธ๋™'
      • JavaScript์—์„œ ๋ณ€์ˆ˜๋“ค์€ ์‹ค์ œ ์‹คํ–‰ ์‹œ์— ์ฝ”๋“œ์˜ ์ตœ์ƒ๋‹จ์œผ๋กœ ๋Œ์–ด์˜ฌ๋ ค์ง€๊ฒŒ ๋˜๋ฉฐ (hoisted) ์ด๋Ÿฌํ•œ ์ด์œ  ๋•Œ๋ฌธ์— var๋กœ ์„ ์–ธ๋œ ๋ณ€์ˆ˜๋Š” ์„ ์–ธ ์‹œ์— undefined๋กœ ๊ฐ’์ด ์ดˆ๊ธฐํ™”๋˜๋Š” ๊ณผ์ •์ด ๋™์‹œ์— ์ผ์–ด๋‚จ
      • ๋ฐ˜๋ฉด let, const๋Š” ํ˜ธ์ด์ŠคํŒ…์ด ์ผ์–ด๋‚˜๋ฉด ์—๋Ÿฌ๋ฅผ ๋ฐœ์ƒ์‹œํ‚ด
      • ๋ณ€์ˆ˜๋ฅผ ์„ ์–ธํ•˜๊ธฐ ์ „์— ์ ‘๊ทผ์ด ๊ฐ€๋Šฅํ•œ ๊ฒƒ์€ ์ฝ”๋“œ์˜ ๋…ผ๋ฆฌ์ ์ธ ํ๋ฆ„์„ ๊นจ๋œจ๋ฆฌ๋Š” ํ–‰์œ„์ด๋ฉฐ ์ด๋Ÿฌํ•œ ๊ฒƒ์„ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด let, const๊ฐ€ ์ถ”๊ฐ€๋˜์—ˆ์Œ
        • ์ฆ‰, var๋Š” ์‚ฌ์šฉํ•˜์ง€ ์•Š์•„์•ผ ํ•˜๋Š” ํ‚ค์›Œ๋“œ

  • ๋ณ€์ˆ˜ ์„ ์–ธ ํ‚ค์›Œ๋“œ ์ •๋ฆฌ

    ํ‚ค์›Œ๋“œ ์žฌ์„ ์–ธ ์žฌํ• ๋‹น ์Šค์ฝ”ํ”„ ๋น„๊ณ 
    let X O ๋ธ”๋ก ์Šค์ฝ”ํ”„ ES6๋ถ€ํ„ฐ ๋„์ž…
    const X X ๋ธ”๋ก ์Šค์ฝ”ํ”„ ES6๋ถ€ํ„ฐ ๋„์ž…
    var O O ํ•จ์ˆ˜ ์Šค์ฝ”ํ”„ ์‚ฌ์šฉ X

  • ๋ฐ์ดํ„ฐ ํƒ€์ž…

    • JavaScript์˜ ๋ชจ๋“  ๊ฐ’์€ ํŠน์ •ํ•œ ๋ฐ์ดํ„ฐ ํƒ€์ž…์„ ๊ฐ€์ง
    • ํฌ๊ฒŒ **์›์‹œ ํƒ€์ž…(Primitive type)**๊ณผ **์ฐธ์กฐ ํƒ€์ž…(Reference type)**์œผ๋กœ ๋ถ„๋ฅ˜๋จ

    Untitled


  • Number

    • ์ •์ˆ˜ ๋˜๋Š” ์‹ค์ˆ˜ํ˜• ์ˆซ์ž๋ฅผ ํ‘œํ˜„ํ•˜๋Š” ์ž๋ฃŒํ˜•
    const a = 13
    const b = -5
    const c = 3.14      // float - ์ˆซ์ž ํ‘œํ˜„
    const d = 2.998e8   // 2.998 * 10^8 = 299,800,000
    const e = Infinity
    const f = -Infinity
    const g = NaN       // Not a Number ์„ ๋‚˜ํƒ€๋‚ด๋Š” ๊ฐ’
    • NaN

      • Not-A-Number(์ˆซ์ž๊ฐ€ ์•„๋‹˜)๋ฅผ ๋‚˜ํƒ€๋ƒ„

      • Number.isNaN()์˜ ๊ฒฝ์šฐ ์ฃผ์–ด์ง„ ๊ฐ’์˜ ์œ ํ˜•์ด Number์ด๊ณ 

        • ๊ฐ’์ด NaN์ด๋ฉด true
        • ์•„๋‹ˆ๋ฉด false

        ๋ฐ˜ํ™˜

      console.log(Number.isNaN(NaN))       // true
      console.log(Number.isNaN(0 / 0))     // true
      console.log('#####################');
      
      // isNaN() ์œผ๋กœ๋Š” True  => Number ์ด๋ฉด์„œ NaN ์ธ์ง€ ์•„๋‹Œ์ง€ ํŒ๋ณ„
      console.log(Number.isNaN('NaN'))     // false
      console.log(Number.isNaN(undefined)) // false
      console.log(Number.isNaN({}))        // false
      console.log(Number.isNaN('blabla'))  // false
      console.log('#####################');
      
      // isNaN() ์œผ๋กœ๋„ ํ•ด๋ณด๊ธฐ => NaN ์ธ์ง€ ์•„๋‹Œ์ง€ ํŒ๋ณ„
      console.log(isNaN('NaN'))            // true
      console.log(isNaN(undefined))        // true
      console.log(isNaN({}))               // true
      console.log(isNaN('blabla'))         // true
      console.log('#####################');
      
      // ์ด๋“ค ๋ชจ๋‘ false
      console.log(Number.isNaN(true))
      console.log(Number.isNaN(null))
      console.log(Number.isNaN(37))
      console.log(Number.isNaN('37'))
      console.log(Number.isNaN('37.37'))
      console.log(Number.isNaN(''))
      console.log(Number.isNaN(' '))
      • NaN์„ ๋ฐ˜ํ™˜ํ•˜๋Š” ๊ฒฝ์šฐ
        1. ์ˆซ์ž๋กœ์„œ ์ฝ์„ ์ˆ˜ ์—†์Œ
          • parseInt(โ€์–ด์ฉŒ๊ตฌโ€), Number(undefined)
        2. ๊ฒฐ๊ณผ๊ฐ€ ํ—ˆ์ˆ˜์ธ ์ˆ˜ํ•™ ๊ณ„์‚ฐ์‹
          • Math.sqrt(-1)
        3. ํ”ผ์—ฐ์‚ฐ์ž๊ฐ€ NaN
          • 7 * NaN
        4. ์ •์˜ํ•  ์ˆ˜ ์—†๋Š” ๊ณ„์‚ฐ์‹
          • 0 * Infinity
        5. ๋ฌธ์ž์—ด์„ ํฌํ•จํ•˜๋ฉด์„œ ๋ง์…ˆ์ด ์•„๋‹Œ ๊ณ„์‚ฐ์‹
          • โ€œ๊ฐ€โ€ / 3

  • String

    • ๋ฌธ์ž์—ด์„ ํ‘œํ˜„ํ•˜๋Š” ์ž๋ฃŒํ˜•

    • ์ž‘์€ ๋”ฐ์˜ดํ‘œ ๋˜๋Š” ํฐ ๋”ฐ์˜ดํ‘œ ๋ชจ๋‘ ๊ฐ€๋Šฅ

    • ๊ณฑ์…ˆ, ๋‚˜๋ˆ—์…ˆ, ๋บ„์…ˆ์€ ์•ˆ๋˜์ง€๋งŒ ๋ง์…ˆ์„ ํ†ตํ•ด ๋ฌธ์ž์—ด ๋ถ™์ผ ์ˆ˜ ์žˆ์Œ

    • Quote๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์„ ์–ธ ์‹œ ์ค„ ๋ฐ”๊ฟˆ์ด ์•ˆ๋จ

    • ๋Œ€์‹  escape sequence๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— \n๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•จ

      // Bad
      const word = "์•ˆ๋…•
      ํ•˜์„ธ์š”"   // Uncaught SyntaxError : Invalid or unexpected token
      
      // Good
      const word1 = "์•ˆ๋…• \\n ํ•˜์„ธ์š”"
      console.log(word1)
    • Template Literal์„ ์‚ฌ์šฉํ•˜๋ฉด ์ค„ ๋ฐ”๊ฟˆ์ด ๋˜๋ฉฐ, ๋ฌธ์ž์—ด ์‚ฌ์ด์— ๋ณ€์ˆ˜๋„ ์‚ฝ์ž… ๊ฐ€๋Šฅ

      • ๋‹จ, escape sequence๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋‹ค

        === Python์˜ โ€œf-stringโ€

      const word2 = `์•ˆ๋…•
      ๋“ค ํ•˜์„ธ์š”`
      console.log(word2)
      
      const age = 10
      const message = `ํ™๊ธธ๋™์€ ${age}์„ธ์ž…๋‹ˆ๋‹ค.`
      console.log(message)

      • Template literals (ํ…œํ”Œ๋ฆฟ ๋ฆฌํ„ฐ๋Ÿด)

        • ๋‚ด์žฅ๋œ ํ‘œํ˜„์‹์„ ํ—ˆ์šฉํ•˜๋Š” ๋ฌธ์ž์—ด ์ž‘์„ฑ ๋ฐฉ์‹

        • Backtick(``)์„ ์ด์šฉํ•˜๋ฉฐ, ์—ฌ๋Ÿฌ ์ค„์— ๊ฑธ์ณ ๋ฌธ์ž์—ด์„ ์ •์˜ํ•  ์ˆ˜๋„ ์žˆ๊ณ  JavaScript์˜ ๋ณ€์ˆ˜๋ฅผ ๋ฌธ์ž์—ด ์•ˆ์— ๋ฐ”๋กœ ์—ฐ๊ฒฐํ•  ์ˆ˜ ์žˆ๋Š” ์ด์ ์ด ์ƒ๊น€

        • ํ‘œํ˜„์‹์„ ๋„ฃ์„ ์ˆ˜ ์žˆ๋Š”๋ฐ, ์ด๋Š” $์™€ ์ค‘๊ด„ํ˜ธ๋กœ ํ‘œ๊ธฐ

          const age = 10
          const message = `ํ™๊ธธ๋™์€ ${age}์„ธ์ž…๋‹ˆ๋‹ค.`

  • Empty Value

    • ๊ฐ’์ด ์กด์žฌํ•˜์ง€ ์•Š์Œ์„ ํ‘œํ˜„ํ•˜๋Š” ๊ฐ’์œผ๋กœ JavaScript์—์„œ๋Š” null๊ณผ undefined ๊ฐ€ ์กด์žฌ
    • ๋™์ผํ•œ ์—ญํ• ์„ ํ•˜๋Š” ์ด 2๊ฐœ์˜ ํ‚ค์›Œ๋“œ๊ฐ€ ์กด์žฌํ•˜๋Š” ์ด์œ ๋Š” ๋‹จ์ˆœํ•œ JavaScript์˜ ์„ค๊ณ„ ์‹ค์ˆ˜
    • ํฐ ์ฐจ์ด๋ฅผ ๋‘์ง€ ๋ง๊ณ  interchangeable ํ•˜๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ๊ถŒ์žฅํ•จ

    • null

      • null ๊ฐ’์„ ๋‚˜ํƒ€๋‚ด๋Š” ํŠน๋ณ„ํ•œ ํ‚ค์›Œ๋“œ

      • ๋ณ€์ˆ˜์˜ ๊ฐ’์ด ์—†์Œ์„ ์˜๋„์ ์œผ๋กœ ํ‘œํ˜„ํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ๋ฐ์ดํ„ฐ ํƒ€์ž…

        let lastName = null
        console.log(lastName)   // null
    • undefined

      • ๊ฐ’์ด ์ •์˜๋˜์–ด ์žˆ์ง€ ์•Š์Œ์„ ํ‘œํ˜„ํ•˜๋Š” ๊ฐ’

      • ๋ณ€์ˆ˜ ์„ ์–ธ ์ดํ›„ ์ง์ ‘ ๊ฐ’์„ ํ• ๋‹นํ•˜์ง€ ์•Š์œผ๋ฉด ์ž๋™์œผ๋กœ ํ• ๋‹น๋จ

        let firstName           // ์„ ์–ธ๋งŒ ํ•˜๊ณ  ํ• ๋‹นํ•˜์ง€ ์•Š์Œ
        console.log(firstName)  // undefined
    • null๊ณผ undefined

      • null๊ณผ undefined์˜ ๊ฐ€์žฅ ๋Œ€ํ‘œ์ ์ธ ์ฐจ์ด์ ์€ typeof ์—ฐ์‚ฐ์ž๋ฅผ ํ†ตํ•ด ํƒ€์ž…์„ ํ™•์ธํ–ˆ์„ ๋•Œ ๋‚˜ํƒ€๋‚จ

        typeof null      // "object"
        typeof undefined // "undefined"
      • null์ด ์›์‹œ ํƒ€์ž…์ž„์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ  object๋กœ ์ถœ๋ ฅ๋˜๋Š” ์ด์œ ๋Š” JavaScript ์„ค๊ณ„ ๋‹น์‹œ์˜ ๋ฒ„๊ทธ๋ฅผ ์ง€๊ธˆ๊นŒ์ง€ ํ•ด๊ฒฐํ•˜์ง€ ๋ชปํ•œ ๊ฒƒ

      • ์‰ฝ๊ฒŒ ํ•ด๊ฒฐํ•  ์ˆ˜ ์—†๋Š” ์ด์œ ๋Š” ์ด๋ฏธ null ํƒ€์ž…์— ์˜์กด์„ฑ์„ ๋„๊ณ  ์žˆ๋Š” ๋งŽ์€ ํ”„๋กœ๊ทธ๋žจ๋“ค์ด ๋ง๊ฐ€์งˆ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ ( ํ•˜์œ„ ํ˜ธํ™˜ ์œ ์ง€ )


  • Boolean

    • true์™€ false

    • ์ฐธ๊ณผ ๊ฑฐ์ง“์„ ํ‘œํ˜„ํ•˜๋Š” ๊ฐ’

    • ์กฐ๊ฑด๋ฌธ ๋˜๋Š” ๋ฐ˜๋ณต๋ฌธ์—์„œ ์œ ์šฉํ•˜๊ฒŒ ์‚ฌ์šฉ

      • ์กฐ๊ฑด๋ฌธ ๋˜๋Š” ๋ฐ˜๋ณต๋ฌธ์—์„œ boolean์ด ์•„๋‹Œ ๋ฐ์ดํ„ฐ ํƒ€์ž…์€ ์ž๋™ ํ˜•๋ณ€ํ™˜ ๊ทœ์น™ ์— ๋”ฐ๋ผ true ๋˜๋Š” false๋กœ ๋ณ€ํ™˜๋จ

        • ์ž๋™ ํ˜•๋ณ€ํ™˜ ๊ทœ์น™

          ๋ฐ์ดํ„ฐ ํƒ€์ž… false true
          undefined ํ•ญ์ƒ false X
          null ํ•ญ์ƒ false X
          Number 0, -0, NaN ๋‚˜๋จธ์ง€ ๋ชจ๋“  ๊ฒฝ์šฐ
          String ๋นˆ ๋ฌธ์ž์—ด ๋‚˜๋จธ์ง€ ๋ชจ๋“  ๊ฒฝ์šฐ
          Object X ํ•ญ์ƒ true

  • ์—ฐ์‚ฐ์ž

    • ํ• ๋‹น ์—ฐ์‚ฐ์ž

      • ์˜ค๋ฅธ์ชฝ์— ์žˆ๋Š” ํ”ผ์—ฐ์‚ฐ์ž์˜ ํ‰๊ฐ€ ๊ฒฐ๊ณผ๋ฅผ ์™ผ์ชฝ ํ”ผ์—ฐ์‚ฐ์ž์— ํ• ๋‹นํ•˜๋Š” ์—ฐ์‚ฐ์ž
      • ๋‹ค์–‘ํ•œ ์—ฐ์‚ฐ์— ๋Œ€ํ•œ ๋‹จ์ถ• ์—ฐ์‚ฐ์ž ์ง€์›
      • Increment ๋ฐ Decrement ์—ฐ์‚ฐ์ž
        • Increment(++) : ํ”ผ์—ฐ์‚ฐ์ž์˜ ๊ฐ’์„ 1 ์ฆ๊ฐ€์‹œํ‚ค๋Š” ์—ฐ์‚ฐ์ž
        • Decrement(- -) : ํ”ผ์—ฐ์‚ฐ์ž์˜ ๊ฐ’์„ 1 ๊ฐ์†Œ์‹œํ‚ค๋Š” ์—ฐ์‚ฐ์ž
        • += ๋˜๋Š” -= ์™€ ๊ฐ™์ด ๋” ๋ถ„๋ช…ํ•œ ํ‘œํ˜„์„ ๊ถŒ์žฅํ•จ
    • ๋น„๊ต ์—ฐ์‚ฐ์ž

      • ํ”ผ์—ฐ์‚ฐ์ž๋“ค(์ˆซ์ž, ๋ฌธ์ž, Boolean ๋“ฑ)์„ ๋น„๊ตํ•˜๊ณ  ๊ฒฐ๊ณผ๊ฐ’์„ boolean์œผ๋กœ ๋ฐ˜ํ™˜ํ•˜๋Š” ์—ฐ์‚ฐ์ž

      • ๋ฌธ์ž์—ด์€ ์œ ๋‹ˆ์ฝ”๋“œ ๊ฐ’์„ ์‚ฌ์šฉํ•˜๋ฉฐ ํ‘œ์ค€ ์‚ฌ์ „ ์ˆœ์„œ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๋น„๊ต

        • ์•ŒํŒŒ๋ฒณ๋ผ๋ฆฌ ๋น„๊ตํ•  ๊ฒฝ์šฐ

          • ์•ŒํŒŒ๋ฒณ ์ˆœ์„œ์ƒ ํ›„์ˆœ์œ„๊ฐ€ ๋” ํฌ๋‹ค
          • ์†Œ๋ฌธ์ž๊ฐ€ ๋Œ€๋ฌธ์ž๋ณด๋‹ค ๋” ํฌ๋‹ค
          3 > 2         // true
          3 < 2         // false
          
          'A' < 'B'     // true
          'Z' < 'a'     // true
          '๊ฐ€' < '๋‚˜'    // true
    • ๋™๋“ฑ ์—ฐ์‚ฐ์ž(==)

      • ๋‘ ํ”ผ์—ฐ์‚ฐ์ž๊ฐ€ ๊ฐ™์€ ๊ฐ’์œผ๋กœ ํ‰๊ฐ€๋˜๋Š”์ง€ ๋น„๊ต ํ›„ boolean ๊ฐ’์„ ๋ฐ˜ํ™˜
      • ๋น„๊ตํ•  ๋•Œ ์•”๋ฌต์  ํƒ€์ž… ๋ณ€ํ™˜ ์„ ํ†ตํ•ด ํƒ€์ž…์„ ์ผ์น˜์‹œํ‚จ ํ›„ ๊ฐ™์€ ๊ฐ’์ธ์ง€ ๋น„๊ต
      • ๋‘ ํ”ผ์—ฐ์‚ฐ์ž๊ฐ€ ๋ชจ๋‘ ๊ฐ์ฒด์ผ ๊ฒฝ์šฐ ๋ฉ”๋ชจ๋ฆฌ์˜ ๊ฐ™์€ ๊ฐ์ฒด๋ฅผ ๋ฐ”๋ผ๋ณด๋Š”์ง€ ํŒ๋ณ„
      • ์˜ˆ์ƒ์น˜ ๋ชปํ•œ ๊ฒฐ๊ณผ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ํŠน๋ณ„ํ•œ ๊ฒฝ์šฐ๋ฅผ ์ œ์™ธํ•˜๊ณ  ์‚ฌ์šฉํ•˜์ง€ ์•Š์Œ
    • ์ผ์น˜ ์—ฐ์‚ฐ์ž(===)

      • ๋‘ ํ”ผ์—ฐ์‚ฐ์ž์˜ ๊ฐ’๊ณผ ํƒ€์ž…์ด ๋ชจ๋‘ ๊ฐ™์€ ๊ฒฝ์šฐ true๋ฅผ ๋ฐ˜ํ™˜
      • ๊ฐ™์€ ๊ฐ์ฒด๋ฅผ ๊ฐ€๋ฆฌํ‚ค๊ฑฐ๋‚˜, ๊ฐ™์€ ํƒ€์ž…์ด๋ฉด์„œ ๊ฐ™์€ ๊ฐ’์ธ์ง€๋ฅผ ๋น„๊ต
      • ์—„๊ฒฉํ•œ ๋น„๊ต๊ฐ€ ์ด๋ค„์ง€๋ฉฐ ์•”๋ฌต์  ํƒ€์ž… ๋ณ€ํ™˜์ด ๋ฐœ์ƒํ•˜์ง€ ์•Š์Œ
        • ์—„๊ฒฉํ•œ ๋น„๊ต - ๋‘ ๋น„๊ต ๋Œ€์ƒ์˜ ํƒ€์ž…๊ณผ ๊ฐ’ ๋ชจ๋‘ ๊ฐ™์€์ง€ ๋น„๊ตํ•˜๋Š” ๋ฐฉ์‹
    • ๋…ผ๋ฆฌ ์—ฐ์‚ฐ์ž

      • ์„ธ ๊ฐ€์ง€ ๋…ผ๋ฆฌ ์—ฐ์‚ฐ์ž๋กœ ๊ตฌ์„ฑ
        • and ์—ฐ์‚ฐ : &&
        • or ์—ฐ์‚ฐ : ||
        • not ์—ฐ์‚ฐ : !
      • ๋‹จ์ถ• ํ‰๊ฐ€ ์ง€์›
        • ex) false && true โ‡’ false
        • ex) true || false โ‡’ true
    • ์‚ผํ•ญ ์—ฐ์‚ฐ์ž

      • 3๊ฐœ์˜ ํ”ผ์—ฐ์‚ฐ์ž๋ฅผ ์‚ฌ์šฉํ•˜๋ฉฐ ์กฐ๊ฑด์— ๋”ฐ๋ผ ๊ฐ’์„ ๋ฐ˜ํ™˜ํ•˜๋Š” ์—ฐ์‚ฐ์ž
      • ๊ฐ€์žฅ ์•ž์˜ ์กฐ๊ฑด์‹์ด ์ฐธ์ด๋ฉด :(์ฝœ๋ก ) ์•ž์˜ ๊ฐ’์ด ๋ฐ˜ํ™˜๋˜๋ฉฐ, ๊ทธ ๋ฐ˜๋Œ€์ผ ๊ฒฝ์šฐ : ๋’ค์˜ ๊ฐ’์ด ๋ฐ˜ํ™˜๋˜๋Š” ์—ฐ์‚ฐ์ž
      • ์‚ผํ•ญ ์—ฐ์‚ฐ์ž์˜ ๊ฒฐ๊ณผ๊ฐ’์ด๊ธฐ ๋•Œ๋ฌธ์— ๋ณ€์ˆ˜์— ํ• ๋‹น ๊ฐ€๋Šฅ
      true? 1:2     // 1
      false: 1:2    // 2
      
      const result = Math.PI > 4 ? 'Yep' : 'Nope'
      console.log(result)    // Nope

  • ์กฐ๊ฑด๋ฌธ
    • ์กฐ๊ฑด๋ฌธ์˜ ์ข…๋ฅ˜์™€ ํŠน์ง•
      • if
        • ์กฐ๊ฑด ํ‘œํ˜„์‹์˜ ๊ฒฐ๊ณผ๊ฐ’์„ boolean ํƒ€์ž…์œผ๋กœ ๋ณ€ํ™˜ ํ›„ ์ฐธ/๊ฑฐ์ง“์„ ํŒ๋‹จ
      • switch
        • ์กฐ๊ฑด ํ‘œํ˜„์‹์˜ ๊ฒฐ๊ณผ๊ฐ’์ด ์–ด๋Š ๊ฐ’(case)์— ํ•ด๋‹นํ•˜๋Š”์ง€ ํŒ๋ณ„
        • ์ฃผ๋กœ ํŠน์ • ๋ณ€์ˆ˜์˜ ๊ฐ’์— ๋”ฐ๋ผ ์กฐ๊ฑด์„ ๋ถ„๊ธฐํ•  ๋•Œ ํ™œ์šฉ
          • ์กฐ๊ฑด์ด ๋งŽ์•„์งˆ ๊ฒฝ์šฐ if ๋ฌธ๋ณด๋‹ค ๊ฐ€๋…์„ฑ์ด ๋‚˜์„ ์ˆ˜ ์žˆ์Œ

  • if statement

    • if, else if, else

      • ์กฐ๊ฑด์€ ์†Œ๊ด„ํ˜ธ ์•ˆ์— ์ž‘์„ฑ
      • ์‹คํ–‰ํ•  ์ฝ”๋“œ๋Š” ์ค‘๊ด„ํ˜ธ ์•ˆ์— ์ž‘์„ฑ
      • ๋ธ”๋ก ์Šค์ฝ”ํ”„ ์ƒ์„ฑ
      const name = 'manager'
      
      if (name === 'admin') {
          console.log('๊ด€๋ฆฌ์ž๋‹˜ ํ™˜์˜ํ•ฉ๋‹ˆ๋‹ค.')
      } else if (name === 'manager') {
          console.log('๋งค๋‹ˆ์ €๋‹˜ ํ™˜์˜ํ•ฉ๋‹ˆ๋‹ค.')
      } else {
          console.log(`${name}๋‹˜ ํ™˜์˜ํ•ฉ๋‹ˆ๋‹ค.`)
      }
  • switch statement

    • ํ‘œํ˜„์‹์˜ ๊ฒฐ๊ณผ๊ฐ’์„ ์ด์šฉํ•œ ์กฐ๊ฑด๋ฌธ
    • ํ‘œํ˜„์‹์˜ ๊ฒฐ๊ณผ๊ฐ’๊ณผ case ๋ฌธ์˜ ์˜ค๋ฅธ์ชฝ ๊ฐ’์„ ๋น„๊ต
    • break ๋ฐ default ๋ฌธ์€ [์„ ํƒ์ ]์œผ๋กœ ์‚ฌ์šฉ ๊ฐ€๋Šฅ
    • break ๋ฌธ์ด ์—†๋Š” ๊ฒฝ์šฐ break ๋ฌธ์„ ๋งŒ๋‚˜๊ฑฐ๋‚˜ default ๋ฌธ์„ ์‹คํ–‰ํ•  ๋•Œ๊นŒ์ง€ ๋‹ค์Œ ์กฐ๊ฑด๋ฌธ ์‹คํ–‰
    • ๋ธ”๋ก ์Šค์ฝ”ํ”„ ์ƒ์„ฑ
    switch(expression) {
        case 'first value': {
            // do something
            [break]
        }
        case 'second value': {
            //do something
            [break]
        }
        [default: {
            //do something
        }]
    }
    • ์ด ๊ฒฝ์šฐ ๋ชจ๋“  console์ด ์ถœ๋ ฅ๋จ (Fall-through ํ˜„์ƒ)

      const name = 'ํ™๊ธธ๋™'
      
      switch(name) {
          case 'ํ™๊ธธ๋™': {
              console.log('๊ด€๋ฆฌ์ž๋‹˜ ํ™˜์˜ํ•ฉ๋‹ˆ๋‹ค.')
          }
          case 'manager': {
              console.log('๋งค๋‹ˆ์ €๋‹˜ ํ™˜์˜ํ•ฉ๋‹ˆ๋‹ค.')
          default: {
              console.log(`${name}๋‹˜ ํ™˜์˜ํ•ฉ๋‹ˆ๋‹ค.`)
          }
      }
      
      // ์ถœ๋ ฅ ๊ฒฐ๊ณผ
      ๊ด€๋ฆฌ์ž๋‹˜ ํ™˜์˜ํ•ฉ๋‹ˆ๋‹ค.
      ๋งค๋‹ˆ์ €๋‹˜ ํ™˜์˜ํ•ฉ๋‹ˆ๋‹ค.
      ํ™๊ธธ๋™๋‹˜ ํ™˜์˜ํ•ฉ๋‹ˆ๋‹ค.
      • break๋ฅผ ์ž‘์„ฑํ•˜๋ฉด ์˜๋„ํ•œ ๋Œ€๋กœ ๋™์ž‘
      const name = 'ํ™๊ธธ๋™'
      
      switch(name) {
          case 'ํ™๊ธธ๋™': {
              console.log('๊ด€๋ฆฌ์ž๋‹˜ ํ™˜์˜ํ•ฉ๋‹ˆ๋‹ค.')
              break
          }
          case 'manager': {
              console.log('๋งค๋‹ˆ์ €๋‹˜ ํ™˜์˜ํ•ฉ๋‹ˆ๋‹ค.')
              break
          default: {
              console.log(`${name}๋‹˜ ํ™˜์˜ํ•ฉ๋‹ˆ๋‹ค.`)
          }
      }
      
      // ์ถœ๋ ฅ ๊ฒฐ๊ณผ
      ๊ด€๋ฆฌ์ž๋‹˜ ํ™˜์˜ํ•ฉ๋‹ˆ๋‹ค.
  • if / switch

    • ์กฐ๊ฑด์ด ๋งŽ์€ ๊ฒฝ์šฐ switch๋ฌธ์„ ํ†ตํ•ด ๊ฐ€๋…์„ฑ ํ–ฅ์ƒ์„ ๊ธฐ๋Œ€ํ•  ์ˆ˜ ์žˆ์Œ
    • ์ผ๋ฐ˜์ ์œผ๋กœ ์ค‘์ฒฉ else if ๋ฌธ์€ ์œ ์ง€๋ณด์ˆ˜ํ•˜๊ธฐ ํž˜๋“ค๋‹ค๋Š” ๋ฌธ์ œ๊ฐ€ ์žˆ์Œ

  • ๋ฐ˜๋ณต๋ฌธ

    • ์ข…๋ฅ˜

      • while
      • for
      • for โ€ฆ in
      • for โ€ฆ of
    • while

      • ์กฐ๊ฑด๋ฌธ์ด ์ฐธ์ด๊ธฐ๋งŒ ํ•˜๋ฉด ๋ฌธ์žฅ์„ ๊ณ„์†ํ•ด์„œ ์ˆ˜ํ–‰

        while (์กฐ๊ฑด๋ฌธ) {
            // do something
        }

        ์˜ˆ์‹œ)

        let i = 0
        
        while (i < 6) {
            console.log(i)
            i += 1
        }
        
        // 0, 1, 2, 3, 4, 5
    • for

      • ํŠน์ •ํ•œ ์กฐ๊ฑด์ด ๊ฑฐ์ง“์œผ๋กœ ํŒ๋ณ„๋  ๋•Œ๊นŒ์ง€ ๋ฐ˜๋ณต

        for ( [์ดˆ๊ธฐ๋ฌธ]; [์กฐ๊ฑด๋ฌธ]; [์ฆ๊ฐ๋ฌธ]) {
            console.log(i)
        }
        
        // 0, 1, 2, 3, 4, 5
    • for โ€ฆ in

      • ๊ฐ์ฒด (object) ์˜ ์†์„ฑ์„ ์ˆœํšŒํ•  ๋•Œ ์‚ฌ์šฉ
      • ๋ฐฐ์—ด๋„ ์ˆœํšŒ ๊ฐ€๋Šฅํ•˜์ง€๋งŒ ์ธ๋ฑ์Šค ์ˆœ์œผ๋กœ ์ˆœํšŒํ•œ๋‹ค๋Š” ๋ณด์žฅ์ด ์—†์œผ๋ฏ€๋กœ ๊ถŒ์žฅํ•˜์ง€ ์•Š์Œ
      for (variable in object) {
          statements
      }

      ์˜ˆ์‹œ)

      const fruits = { a: 'apple', b: 'banana' }
      
      for (const key in fruits) {
          console.log(key)          // a, b
          console.log(fruits[key])  // apple, banana
      }
    • for โ€ฆ of

      • ๋ฐ˜๋ณต ๊ฐ€๋Šฅํ•œ ๊ฐ์ฒด๋ฅผ ์ˆœํšŒํ•  ๋•Œ ์‚ฌ์šฉ
      • ๋ฐ˜๋ณต ๊ฐ€๋Šฅํ•œ (iterable) ๊ฐ์ฒด์˜ ์ข…๋ฅ˜ : Array, Set, String ๋“ฑ ( Object๋Š” TypeError )
      for (variable of object) {
          statements
      }

      ์˜ˆ์‹œ)

      const numbers = [0, 1, 2, 3]
      
      for (const number of numbers) {
          console.log(number)   // 0, 1, 2, 3
      }
    • for โ€ฆ in ๊ณผ for โ€ฆ of ์˜ ์ฐจ์ด

      • for โ€ฆ in ์€ ์†์„ฑ ์ด๋ฆ„ ์„ ํ†ตํ•ด ๋ฐ˜๋ณต
      • for โ€ฆ of ๋Š” ์†์„ฑ ๊ฐ’ ์„ ํ†ตํ•ด ๋ฐ˜๋ณต
      const arr = [3, 5, 7]
      
      for (const i in arr) {
          console.log(i)     // 0 1 2
      }
      
      for (const i of arr) {
          console.log(i)     // 3 5 7
      }
      • for โ€ฆ in ์€ ๊ฐ์ฒด ์ˆœํšŒ ์ ํ•ฉ

        // Array
        const numbers = [10, 20, 30]
        for (const number in numbers) {
            console.log(number)       // 0 1 2
        }
        
        // Object
        const capitals = {
            korea: '์„œ์šธ',
            france: 'ํŒŒ๋ฆฌ',
            japan: '๋„์ฟ„'
        }
        for (const capital in capitals) {
            console.log(capital)    // korea france japan
        }
      • for โ€ฆ of ๋Š” Iterable ์ˆœํšŒ ์ ํ•ฉ

        // Array
        const numbers = [10, 20, 30]
        for (const number in numbers) {
            console.log(number)       // 10 20 30 
        }
        
        // Object
        const capitals = {
            korea: '์„œ์šธ',
            france: 'ํŒŒ๋ฆฌ',
            japan: '๋„์ฟ„'
        }
        for (const capital in capitals) {
            console.log(capital)    // TypeError : capitals is not iterable
        }
      • ์ฐธ๊ณ ) for โ€ฆ in, for โ€ฆ of ์™€ const

        • for ๋ฌธ
          • for ( let i = 0; i < arr.length; i++ ) { โ€ฆ } ์˜ ๊ฒฝ์šฐ ์ตœ์ดˆ ์ •์˜ํ•œ i ๋ฅผ ์žฌํ• ๋‹นํ•˜๋ฉด์„œ ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— const๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์—๋Ÿฌ ๋ฐœ์ƒ
        • for โ€ฆ in, for โ€ฆ of
          • ์žฌํ• ๋‹น์ด ์•„๋‹ˆ๋ผ, ๋งค ๋ฐ˜๋ณต ์‹œ ํ•ด๋‹น ๋ณ€์ˆ˜๋ฅผ ์ƒˆ๋กœ ์ •์˜ํ•˜์—ฌ ์‚ฌ์šฉํ•˜๋ฏ€๋กœ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•˜์ง€ ์•Š์Œ
    • ์กฐ๊ฑด๋ฌธ๊ณผ ๋ฐ˜๋ณต๋ฌธ ์ •๋ฆฌ

      ํ‚ค์›Œ๋“œ ์ข…๋ฅ˜ ์—ฐ๊ด€ ํ‚ค์›Œ๋“œ ์Šค์ฝ”ํ”„
      if ์กฐ๊ฑด๋ฌธ - ๋ธ”๋ก ์Šค์ฝ”ํ”„
      switch ์กฐ๊ฑด๋ฌธ case, break, default ๋ธ”๋ก ์Šค์ฝ”ํ”„
      while ๋ฐ˜๋ณต๋ฌธ break, continue ๋ธ”๋ก ์Šค์ฝ”ํ”„
      for ๋ฐ˜๋ณต๋ฌธ break, continue ๋ธ”๋ก ์Šค์ฝ”ํ”„
      for โ€ฆ in ๋ฐ˜๋ณต๋ฌธ ๊ฐ์ฒด ์ˆœํšŒ ๋ธ”๋ก ์Šค์ฝ”ํ”„
      for โ€ฆ of ๋ฐ˜๋ณต๋ฌธ Iterable ์ˆœํšŒ ๋ธ”๋ก ์Šค์ฝ”ํ”„

ํ•จ์ˆ˜

  • ์ฐธ์กฐ ํƒ€์ž… ์ค‘ ํ•˜๋‚˜๋กœ์จ function ํƒ€์ž…์— ์†ํ•จ
  • JavaScript์—์„œ ํ•จ์ˆ˜๋ฅผ ์ •์˜ํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ์ฃผ๋กœ 2๊ฐ€์ง€๋กœ ๊ตฌ๋ถ„๋จ
    • ํ•จ์ˆ˜ ์„ ์–ธ์‹ (function declaration)
    • ํ•จ์ˆ˜ ํ‘œํ˜„์‹ (function expression)

  • ํ•จ์ˆ˜ ์„ ์–ธ์‹ (function declaration)

    • ์ผ๋ฐ˜์ ์ธ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์˜ ํ•จ์ˆ˜ ์ •์˜ ๋ฐฉ์‹

      function ํ•จ์ˆ˜๋ช…() {
          // do something
      }
      • ์˜ˆ์‹œ)

        function add(num1, num2) {
            return num1 + num2
        }
        
        add(2, 7)    // 9

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

    • ํ‘œํ˜„์‹ ๋‚ด์—์„œ ํ•จ์ˆ˜๋ฅผ ์ •์˜ํ•˜๋Š” ๋ฐฉ์‹

    • ํ•จ์ˆ˜ ํ‘œํ˜„์‹์€ ํ•จ์ˆ˜์˜ ์ด๋ฆ„์„ ์ƒ๋žตํ•œ ์ต๋ช… ํ•จ์ˆ˜๋กœ ์ •์˜ ๊ฐ€๋Šฅ

      ๋ณ€์ˆ˜ํ‚ค์›Œ๋“œ ํ•จ์ˆ˜๋ช… = function () {
          // do something
      }
      • ์˜ˆ์‹œ)

        const sub = function (num1, num2) {
            return num1 - num2
        }
        
        sub(7, 2)   // 5
    • ํ‘œํ˜„์‹์—์„œ ํ•จ์ˆ˜ ์ด๋ฆ„์„ ๋ช…์‹œํ•˜๋Š” ๊ฒƒ๋„ ๊ฐ€๋Šฅ

      • ๋‹ค๋งŒ ์ด ๊ฒฝ์šฐ ํ•จ์ˆ˜ ์ด๋ฆ„์€ ํ˜ธ์ถœ์— ์‚ฌ์šฉ๋˜์ง€ ๋ชปํ•˜๊ณ  ๋””๋ฒ„๊น… ์šฉ๋„๋กœ ์‚ฌ์šฉ๋จ
      const mySub = function namedSub(num1, num2) {
          return num1 - num2
      }
      
      mySub(1, 2)    // -1
      namedSub(1, 2) // ReferenceError : namedSub is not defined

  • ๊ธฐ๋ณธ ์ธ์ž (Default arguments)

    • ์ธ์ž ์ž‘์„ฑ ์‹œ โ€˜=โ€™ ๋ฌธ์ž ๋’ค ๊ธฐ๋ณธ ์ธ์ž ์„ ์–ธ ๊ฐ€๋Šฅ
    const greetig = function (name = 'Anonymous') {
        return `Hi ${name}`
    }
    
    greeting()      // Hi Anonymous

  • ๋งค๊ฐœ๋ณ€์ˆ˜์™€ ์ธ์ž์˜ ๊ฐœ์ˆ˜ ๋ถˆ์ผ์น˜ ํ—ˆ์šฉ

    • ๋งค๊ฐœ๋ณ€์ˆ˜๋ณด๋‹ค ์ธ์ž์˜ ๊ฐœ์ˆ˜๊ฐ€ ๋งŽ์„ ๊ฒฝ์šฐ

      const noArgs = function () {
          return 0
      }
      
      noArgs(1, 2, 3)       // 0
      
      const twoArgs = function (arg1, arg2) {
          return [arg1, arg2]
      }
      
      twoArgs(1, 2, 3)      // [1, 2]
    • ๋งค๊ฐœ๋ณ€์ˆ˜๋ณด๋‹ค ์ธ์ž์˜ ๊ฐœ์ˆ˜๊ฐ€ ์ ์„ ๊ฒฝ์šฐ

      const threeArgs = function (arg1, arg2, arg3) {
          return [arg1, arg2, arg3]
      }
      
      threeArgs()       // [undefined, undefined, undefined]
      threeArgs(1)      // [1, undefined, undefined]
      threeArgs(1, 2)   // [1, 2, undefined]
  • Spread syntax ( โ€ฆ )

    • ์ „๊ฐœ ๊ตฌ๋ฌธ

    • ์ „๊ฐœ ๊ตฌ๋ฌธ์„ ์‚ฌ์šฉํ•˜๋ฉด ๋ฐฐ์—ด์ด๋‚˜ ๋ฌธ์ž์—ด๊ณผ ๊ฐ™์ด ๋ฐ˜๋ณต ๊ฐ€๋Šฅํ•œ ๊ฐ์ฒด๋ฅผ ๋ฐฐ์—ด์˜ ๊ฒฝ์šฐ๋Š” ์š”์†Œ, ํ•จ์ˆ˜์˜ ๊ฒฝ์šฐ๋Š” ์ธ์ž๋กœ ํ™•์žฅํ•  ์ˆ˜ ์žˆ์Œ

      1. ๋ฐฐ์—ด๊ณผ์˜ ์‚ฌ์šฉ ( ๋ฐฐ์—ด ๋ณต์‚ฌ )

        let parts = ['shoulders', 'knees']
        let lyrics = ['head', ...parts, 'and', 'toes']
        // ['head', 'shoulders', 'knees', 'and', 'toes']
      2. ํ•จ์ˆ˜์™€์˜ ์‚ฌ์šฉ (Rest parameters)

        • ์ •ํ•ด์ง€์ง€ ์•Š์€ ์ˆ˜์˜ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ๋ฐฐ์—ด๋กœ ๋ฐ›์„ ์ˆ˜ ์žˆ์Œ
        function func(a, b, ...theArgs) {
         //
        }
        const restOpr = function (arg1, arg2, ...restArgs) {
           return [arg1, arg2, restArgs]
        }
        restOpr(1, 2, 3, 4, 5)    // [1, 2, [3, 4, 5]]
        restOpr(1, 2)             // [1, 2, []]

์„ ์–ธ์‹๊ณผ ํ‘œํ˜„์‹

  • ํ•จ์ˆ˜์˜ ํƒ€์ž…

    • ์„ ์–ธ์‹ ํ•จ์ˆ˜์™€ ํ‘œํ˜„์‹ ํ•จ์ˆ˜ ๋ชจ๋‘ ํƒ€์ž…์€ function ์œผ๋กœ ๋™์ผ
    // ํ•จ์ˆ˜ ํ‘œํ˜„์‹
    const add = function (args) { }
    
    // ํ•จ์ˆ˜ ์„ ์–ธ์‹
    function sub(args) { }
    
    console.log(typeof add)   // function
    console.log(typeof sub)   // function
  • ํ˜ธ์ด์ŠคํŒ… - ์„ ์–ธ์‹

    • ํ•จ์ˆ˜ ์„ ์–ธ์‹์œผ๋กœ ์ •์˜ํ•œ ํ•จ์ˆ˜๋Š” var๋กœ ์ •์˜ํ•œ ๋ณ€์ˆ˜์ฒ˜๋Ÿผ ํ˜ธ์ด์ŠคํŒ…์ด ๋ฐœ์ƒ
    • ์ฆ‰, ํ•จ์ˆ˜ ํ˜ธ์ถœ ์ดํ›„์— ์„ ์–ธํ•ด๋„ ๋™์ž‘
    add(2, 7)     // 9
    
    function add (num1, num2) {
        return num1 + num2
    }
  • ํ˜ธ์ด์ŠคํŒ… - ํ‘œํ˜„์‹

    • ํ•จ์ˆ˜ ํ‘œํ˜„์‹์œผ๋กœ ์„ ์–ธํ•œ ํ•จ์ˆ˜๋Š” ํ•จ์ˆ˜ ์ •์˜ ์ „์— ํ˜ธ์ถœ ์‹œ ์—๋Ÿฌ ๋ฐœ์ƒ
    • ํ•จ์ˆ˜ ํ‘œํ˜„์‹์œผ๋กœ ์ •์˜๋œ ํ•จ์ˆ˜๋Š” ๋ณ€์ˆ˜๋กœ ํ‰๊ฐ€๋˜์–ด ๋ณ€์ˆ˜์˜ scope ๊ทœ์น™์„ ๋”ฐ๋ฆ„
    sub(7, 2) // Uncaught ReferenceError : Cannot access 'sub' before initialization
    
    const sub = function (num1, num2) {
        return num1 - num2
    }
  • ์„ ์–ธ์‹๊ณผ ํ‘œํ˜„์‹ ์ •๋ฆฌ

    ์„ ์–ธ์‹ (declaration) ํ‘œํ˜„์‹ (expression)
    ๊ณตํ†ต์  ๋ฐ์ดํ„ฐ ํƒ€์ž…, ํ•จ์ˆ˜ ๊ตฌ์„ฑ ์š”์†Œ (์ด๋ฆ„, ๋งค๊ฐœ๋ณ€์ˆ˜, ๋ฐ”๋””) ๋ฐ์ดํ„ฐ ํƒ€์ž…, ํ•จ์ˆ˜ ๊ตฌ์„ฑ ์š”์†Œ (์ด๋ฆ„, ๋งค๊ฐœ๋ณ€์ˆ˜, ๋ฐ”๋””)
    ์ฐจ์ด์  ์ต๋ช… ํ•จ์ˆ˜ ๋ถˆ๊ฐ€๋Šฅ, ํ˜ธ์ด์ŠคํŒ… ์žˆ์Œ ์ต๋ช… ํ•จ์ˆ˜ ๊ฐ€๋Šฅ, ํ˜ธ์ด์ŠคํŒ… ์—†์Œ
    ๋น„๊ณ  Airbnb Style Guide ๊ถŒ์žฅ ๋ฐฉ์‹

Arrow Function

  • ํ™”์‚ดํ‘œ ํ•จ์ˆ˜ (Arrow Function)

    • ํ•จ์ˆ˜๋ฅผ ๋น„๊ต์  ๊ฐ„๊ฒฐํ•˜๊ฒŒ ์ •์˜ํ•  ์ˆ˜ ์žˆ๋Š” ๋ฌธ๋ฒ•

    • function ํ‚ค์›Œ๋“œ์™€ ์ค‘๊ด„ํ˜ธ๋ฅผ ์ด์šฉํ•œ ๊ตฌ๋ฌธ์„ ์งง๊ฒŒ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด ํƒ„์ƒ

      1. function ํ‚ค์›Œ๋“œ ์ƒ๋žต ๊ฐ€๋Šฅ
      2. ํ•จ์ˆ˜์˜ ๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€ ํ•˜๋‚˜๋ฟ์ด๋ผ๋ฉด ๋งค๊ฐœ๋ณ€์ˆ˜์˜ () ์ƒ๋žต ๊ฐ€๋Šฅ
      3. ํ•จ์ˆ˜์˜ ๋‚ด์šฉ์ด ํ•œ ์ค„์ด๋ผ๋ฉด {} ์™€ return ๋„ ์ƒ๋žต ๊ฐ€๋Šฅ
    • ํ™”์‚ดํ‘œ ํ•จ์ˆ˜๋Š” ํ•ญ์ƒ ์ต๋ช… ํ•จ์ˆ˜

      • ๋”ฐ๋ผ์„œ ํ•จ์ˆ˜ ํ‘œํ˜„์‹์—์„œ๋งŒ ์‚ฌ์šฉ ๊ฐ€๋Šฅ
    • ํ™”์‚ดํ‘œ ํ•จ์ˆ˜ ์˜ˆ์‹œ

      const arrow1 = function (name) {
          return `hello, ${name}`
      }
      
      // 1. function  ํ‚ค์›Œ๋“œ ์‚ญ์ œ
      const arrow2 = (name) => { return `hello, ${name}` }
      
      // 2. ์ธ์ž๊ฐ€ 1๊ฐœ์ผ ๊ฒฝ์šฐ์—๋งŒ () ์ƒ๋žต ๊ฐ€๋Šฅ
      const arrow3 = name => { return `hello, ${name}` }
      
      // 3. ํ•จ์ˆ˜ ๋ฐ”๋””๊ฐ€ return์„ ํฌํ•จํ•œ ํ‘œํ˜„์‹ 1๊ฐœ์ผ ๊ฒฝ์šฐ์— {}, return ์‚ญ์ œ ๊ฐ€๋Šฅ
      const arrow4 = name => `hello, ${name}`
      • ๋ช…ํ™•์„ฑ๊ณผ ์ผ๊ด€์„ฑ์„ ์œ„ํ•ด ํ•ญ์ƒ ์ธ์ž ์ฃผ์œ„์—๋Š” ๊ด„ํ˜ธ ( ) ๋ฅผ ํฌํ•จํ•˜๋Š” ๊ฒƒ์„ ๊ถŒ์žฅ
    • ํ™”์‚ดํ‘œ ํ•จ์ˆ˜ ์‘์šฉ

      // 1. ์ธ์ž๊ฐ€ ์—†๋‹ค๋ฉด? () or _๋กœ ํ‘œ์‹œ ๊ฐ€๋Šฅ
      let noArgs = ()   => 'No args'
      noArgs = _        => 'No args'
      
      // 2-1. **object๋ฅผ return** ํ•œ๋‹ค๋ฉด
      let returnObject = () => { return { key: 'value' } }  // return ์„ ๋ช…์‹œ์ ์œผ๋กœ ์ ์–ด์คŒ
      
      // 2-2. return์„ ์ ์ง€ ์•Š์œผ๋ ค๋ฉด ๊ด„ํ˜ธ๋ฅผ ๋ถ™์—ฌ์•ผ ํ•จ
      returnObject = () => ({ key: 'value' })

  • ์ฆ‰์‹œ ์‹คํ–‰ ํ•จ์ˆ˜(IIFE, Immediately Invoked Function Expression)

    • ์„ ์–ธ๊ณผ ๋™์‹œ์— ์‹คํ–‰๋˜๋Š” ํ•จ์ˆ˜
    • ํ•จ์ˆ˜์˜ ์„ ์–ธ ๋์— ( ) ๋ฅผ ์ถ”๊ฐ€ํ•˜์—ฌ ์„ ์–ธ๋˜์ž๋งˆ์ž ์‹คํ–‰ํ•˜๋Š” ํ˜•ํƒœ
    • ( ) ์— ๊ฐ’์„ ๋„ฃ์–ด ์ธ์ž๋กœ ๋„˜๊ฒจ์ค„ ์ˆ˜ ์žˆ์Œ
    • ์ฆ‰์‹œ ์‹คํ–‰ ํ•จ์ˆ˜๋Š” ์„ ์–ธ๊ณผ ๋™์‹œ์— ์‹คํ–‰๋˜๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ™์€ ํ•จ์ˆ˜๋ฅผ ๋‹ค์‹œ ํ˜ธ์ถœํ•  ์ˆ˜ ์—†์Œ
    • ์ด๋Ÿฌํ•œ ํŠน์ง•์„ ์‚ด๋ ค ์ดˆ๊ธฐํ™” ๋ถ€๋ถ„์— ๋งŽ์ด ์‚ฌ์šฉ
    • ์ผํšŒ์„ฑ ํ•จ์ˆ˜์ด๋ฏ€๋กœ ์ต๋ช…ํ•จ์ˆ˜๋กœ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ผ๋ฐ˜์ 
    (function(num) { return num ** 3 })(2)     // 8
    
    (num => num ** 3)(2)                       // 8

Array์™€ Object

  • ๊ฐœ์š”
    • JavaScript์˜ ๋ฐ์ดํ„ฐ ํƒ€์ž… ์ค‘ ์ฐธ์กฐ ํƒ€์ž…(reference)์— ํ•ด๋‹นํ•˜๋Š” ํƒ€์ž…์€ Array์™€ Object์ด๋ฉฐ, ๊ฐ์ฒด๋ผ๊ณ ๋„ ๋งํ•จ
    • ๊ฐ์ฒด๋Š” ์†์„ฑ๋“ค์˜ ๋ชจ์Œ(collection)

๋ฐฐ์—ด (Array)

  • ํ‚ค์™€ ์†์„ฑ๋“ค์„ ๋‹ด๊ณ  ์žˆ๋Š” ์ฐธ์กฐ ํƒ€์ž…์˜ ๊ฐ์ฒด
  • ์ˆœ์„œ๋ฅผ ๋ณด์žฅํ•˜๋Š” ํŠน์ง•์ด ์žˆ์Œ
  • ์ฃผ๋กœ ๋Œ€๊ด„ํ˜ธ([ ])๋ฅผ ์ด์šฉํ•˜์—ฌ ์ƒ์„ฑํ•˜๊ณ , 0์„ ํฌํ•จํ•œ ์–‘์˜ ์ •์ˆ˜ ์ธ๋ฑ์Šค๋กœ ํŠน์ • ๊ฐ’์— ์ ‘๊ทผ ๊ฐ€๋Šฅ
  • ๋ฐฐ์—ด์˜ ๊ธธ์ด๋Š” array.length ํ˜•ํƒœ๋กœ ์ ‘๊ทผ ๊ฐ€๋Šฅ
    • ์ฐธ๊ณ ) ๋ฐฐ์—ด์˜ ๋ฐ”์ง€๋ง‰ ์›์†Œ๋Š” array.length -1 ๋กœ ์ ‘๊ทผ
const numbers = [1, 2, 3, 4, 5]

console.log(numbers[0])      // 1
console.log(numbers[-1])     // undefined
console.log(numbers.length)  // 5
const numbers = [1, 2, 3, 4, 5]

console.log(numbers[numbers.length - 1])   // 5
console.log(numbers[numbers.length - 2])   // 4
console.log(numbers[numbers.length - 3])   // 3
console.log(numbers[numbers.length - 4])   // 2
console.log(numbers[numbers.length - 5])   // 1

๋ฐฐ์—ด ๋ฉ”์„œ๋“œ ๊ธฐ์ดˆ

๋ฉ”์„œ๋“œ ์„ค๋ช… ๋น„๊ณ 
reverse ์›๋ณธ ๋ฐฐ์—ด์˜ ์š”์†Œ๋“ค์˜ ์ˆœ์„œ๋ฅผ ๋ฐ˜๋Œ€๋กœ ์ •๋ ฌ
push & pop ๋ฐฐ์—ด์˜ ๊ฐ€์žฅ ๋’ค์— ์š”์†Œ๋ฅผ ์ถ”๊ฐ€ ๋˜๋Š” ์ œ๊ฑฐ
unshift & shift ๋ฐฐ์—ด์˜ ๊ฐ€์žฅ ์•ž์— ์š”์†Œ๋ฅผ ์ถ”๊ฐ€ ๋˜๋Š” ์ œ๊ฑฐ
includes ๋ฐฐ์—ด์— ํŠน์ • ๊ฐ’์ด ์กด์žฌํ•˜๋Š”์ง€ ํŒ๋ณ„ ํ›„ ์ฐธ/๊ฑฐ์ง“ ๋ฐ˜ํ™˜
indexOf ๋ฐฐ์—ด์— ํŠน์ • ๊ฐ’์ด ์กด์žฌํ•˜๋Š”์ง€ ํŒ๋ณ„ ํ›„ ์ธ๋ฑ์Šค ๋ฐ˜ํ™˜ ์š”์†Œ๊ฐ€ ์—†์„ ๊ฒฝ์šฐ -1 ๋ฐ˜ํ™˜
join ๋ฐฐ์—ด์˜ ๋ชจ๋“  ์š”์†Œ๋ฅผ ๊ตฌ๋ถ„์ž๋ฅผ ์ด์šฉํ•˜์—ฌ ์—ฐ๊ฒฐ ๊ตฌ๋ถ„์ž ์ƒ๋žต ์‹œ ์‰ผํ‘œ ๊ธฐ์ค€
  • array.reverse()

    • ์›๋ณธ ๋ฐฐ์—ด ์š”์†Œ๋“ค์˜ ์ˆœ์„œ๋ฅผ ๋ฐ˜๋Œ€๋กœ ์ •๋ ฌ
    const numbers = [1, 2, 3, 4, 5]
    numbers.reverse()
    console.log(numbers)      // [5, 4, 3, 2, 1]
  • array.push()

    • ๋ฐฐ์—ด์˜ ๊ฐ€์žฅ ๋’ค์— ์š”์†Œ ์ถ”๊ฐ€
  • array.pop()

    • ๋ฐฐ์—ด์˜ ๋งˆ์ง€๋ง‰ ์š”์†Œ ์ œ๊ฑฐ
    const numbers = [1, 2, 3, 4, 5]
    
    numbers.push(100)
    console.log(numbers)   // [1, 2, 3, 4, 5, 100]
    
    numbers.pop()
    console.log(numbers)   // [1, 2, 3, 4, 5]
  • array.includes(value)

    • ๋ฐฐ์—ด์— ํŠน์ • ๊ฐ’(value)์ด ์กด์žฌํ•˜๋Š”์ง€ ํŒ๋ณ„ ํ›„ true ๋˜๋Š” false ๋ฐ˜ํ™˜
    const numbers = [1, 2, 3, 4, 5]
    
    console.log(numbers.includes(1))      // true
    console.log(numbers.includes(100))    // false
  • array.indexOf(value)

    • ๋ฐฐ์—ด์— ํŠน์ • ๊ฐ’์ด ์กด์žฌํ•˜๋Š”์ง€ ํ™•์ธ ํ›„ ๊ฐ€์žฅ ์ฒซ ๋ฒˆ์งธ๋กœ ์ฐพ์€ ์š”์†Œ์˜ ์ธ๋ฑ์Šค ๋ฐ˜ํ™˜
    • ๋งŒ์•ฝ ํ•ด๋‹น ๊ฐ’์ด ์—†์„ ๊ฒฝ์šฐ -1 ๋ฐ˜ํ™˜
    const numbers = [1, 2, 3, 4, 5]
    let result
    
    result = numbers.indexOf(3)      // 2
    console.log(result)
    
    result = numbers.indexOf(100)    // -1
    console.log(result)
  • array.join([separator])

    • ๋ฐฐ์—ด์˜ ๋ชจ๋“  ์š”์†Œ๋ฅผ ์—ฐ๊ฒฐํ•˜์—ฌ ๋ฐ˜ํ™˜
    • separator(๊ตฌ๋ถ„์ž)๋Š” ์„ ํƒ์ ์œผ๋กœ ์ง€์ • ๊ฐ€๋Šฅํ•˜๋ฉฐ, ์ƒ๋žต ์‹œ ์‰ผํ‘œ๋ฅผ ๊ธฐ๋ณธ๊ฐ’์œผ๋กœ ์‚ฌ์šฉ
    const numbers = [1, 2, 3, 4, 5]
    let result
    
    result = numbers.join()     // 1, 2, 3, 4, 5
    console.log(result)
    
    result = numbers.join('')   // 12345
    console.log(result)
    
    result = numbers.join(' ')  // 1 2 3 4 5
    console.log(result)
    
    result = numbers.join('-')  // 1-2-3-4-5
    console.log(result)

๋ฐฐ์—ด ๋ฉ”์„œ๋“œ ์‹ฌํ™”

  • Array Helper Methods

    • ๋ฐฐ์—ด์„ ์ˆœํšŒํ•˜๋ฉฐ ํŠน์ • ๋กœ์ง์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ฉ”์„œ๋“œ
    • ๋ฉ”์†Œ๋“œ ํ˜ธ์ถœ ์‹œ ์ธ์ž๋กœ callback ํ•จ์ˆ˜ ๋ฅผ ๋ฐ›๋Š” ๊ฒƒ์ด ํŠน์ง•
      • callback ํ•จ์ˆ˜ : ์–ด๋–ค ํ•จ์ˆ˜์˜ ๋‚ด๋ถ€์—์„œ ์‹คํ–‰๋  ๋ชฉ์ ์œผ๋กœ, ์ธ์ž๋กœ ๋„˜๊ฒจ๋ฐ›๋Š” ํ•จ์ˆ˜

    • forEach

      array.forEach((element, index, array) => {
          // do something
      })
      • array.forEach(callback(element[, index[,array]]))
      • ์ธ์ž๋กœ ์ฃผ์–ด์ง€๋Š” ํ•จ์ˆ˜(์ฝœ๋ฐฑ ํ•จ์ˆ˜)๋ฅผ ๋ฐฐ์—ด์˜ ๊ฐ ์š”์†Œ์— ๋Œ€ํ•ด ํ•œ ๋ฒˆ์”ฉ ์‹คํ–‰
        • ์ฝœ๋ฐฑ ํ•จ์ˆ˜๋Š” 3๊ฐ€์ง€ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ๊ตฌ์„ฑ
          1. element : ๋ฐฐ์—ด์˜ ์š”์†Œ
          2. index : ๋ฐฐ์—ด ์š”์†Œ์˜ ์ธ๋ฑ์Šค
          3. array : ๋ฐฐ์—ด ์ž์ฒด
        • ๋ฐ˜ํ™˜๊ฐ’(return) ์—†์Œ
      // 1. ์ผ๋‹จ ์‚ฌ์šฉํ•ด๋ณด๊ธฐ
      
      const colors = ['red', 'blue', 'green']
      
      printFunc = function (color) {
          console.log(color)
      }
      
      colors.forEach(printFunc)
      
      // red
      // blue
      // green
      // 2. ํ•จ์ˆ˜ ์ •์˜๋ฅผ ์ธ์ž๋กœ ๋„ฃ์–ด๋ณด๊ธฐ
      
      colors.forEach(function (color) {
          console.log(color)
      })
      // 3. ํ™”์‚ดํ‘œ ํ•จ์ˆ˜ ์ ์šฉํ•˜๊ธฐ
      
      colors.forEach((color) => {
          return console.log(color)
      })

    • map

      array.map((element, index, array) => {
          // do something
      })
      • array.map(callback(element[, index[, array]]))
      • ๋ฐฐ์—ด์˜ ๊ฐ ์š”์†Œ์— ๋Œ€ํ•ด ์ฝœ๋ฐฑ ํ•จ์ˆ˜๋ฅผ ํ•œ ๋ฒˆ์”ฉ ์‹คํ–‰
      • ์ฝœ๋ฐฑ ํ•จ์ˆ˜์˜ ๋ฐ˜ํ™˜ ๊ฐ’์„ ์š”์†Œ๋กœ ํ•˜๋Š” ์ƒˆ๋กœ์šด ๋ฐฐ์—ด ๋ฐ˜ํ™˜
      • ๊ธฐ์กด ๋ฐฐ์—ด ์ „์ฒด๋ฅผ ๋‹ค๋ฅธ ํ˜•ํƒœ๋กœ ๋ฐ”๊ฟ€ ๋•Œ ์œ ์šฉ
        • forEach + return ์ด๋ผ๊ณ  ์ƒ๊ฐํ•˜๊ธฐ
      // 1. ์ผ๋‹จ ์‚ฌ์šฉํ•ด๋ณด๊ธฐ
      
      const numbers = [1, 2, 3]
      
      // ํ•จ์ˆ˜ ์ •์˜ (ํ‘œํ˜„์‹)
      const doubleFunc = function (number) {
          return number * 2
      }
      
      // ํ•จ์ˆ˜๋ฅผ ๋‹ค๋ฅธ ํ•จ์ˆ˜์˜ ์ธ์ž๋กœ ๋„ฃ๊ธฐ (์ฝœ๋ฐฑ ํ•จ์ˆ˜)
      const doubleNumbers = numbers.map(doubleFunc)
      console.log(doubleNumbers)   // [2, 4, 6]
      // 2. ํ•จ์ˆ˜ ์ •์˜๋ฅผ ์ธ์ž๋กœ ๋„ฃ์–ด๋ณด๊ธฐ
      
      const doubleNumbers = numbers.map(function (number) {
          return number * 2
      })
      console.log(doubleNumbers)   // [2, 4, 6]
      // 3. ํ™”์‚ดํ‘œ ํ•จ์ˆ˜ ์ ์šฉํ•˜๊ธฐ
      
      const doubleNumbers = numbers.map((number) => {
          return number * 2
      })
      console.log(doubleNumbers)   // [2, 4, 6]

    • filter

      array.filter((element, index, array) => {
          // do something
      })
      • array.filter(callback(element[, index[, array]]))
      • ๋ฐฐ์—ด์˜ ๊ฐ ์š”์†Œ์— ๋Œ€ํ•ด ์ฝœ๋ฐฑ ํ•จ์ˆ˜๋ฅผ ํ•œ ๋ฒˆ์”ฉ ์‹คํ–‰
      • ์ฝœ๋ฐฑ ํ•จ์ˆ˜์˜ ๋ฐ˜ํ™˜ ๊ฐ’์ด true์ธ ์š”์†Œ๋“ค๋งŒ ๋ชจ์•„์„œ ์ƒˆ๋กœ์šด ๋ฐฐ์—ด ๋ฐ˜ํ™˜
      • ๊ธฐ์กด ๋ฐฐ์—ด์˜ ์š”์†Œ๋“ค์„ ํ•„ํ„ฐ๋งํ•  ๋•Œ ์œ ์šฉ
      // 1. ์ผ๋‹จ ์‚ฌ์šฉํ•ด๋ณด๊ธฐ
      
      const products = [
          { name: 'cucumber', type: 'vegetable' },
          { name: 'banana', type: 'fruit' },
          { name: 'carrot', type: 'vegetable' },
          { name: 'apple', type: 'fruit' },
      ]
      
      // ํ•จ์ˆ˜ ์ •์˜ํ•˜๊ณ 
      const fruitFilter = function (product) {
          return product.type === 'fruit'
      }
      
      // ์ฝœ๋ฐฑ์œผ๋กœ ๋„˜๊ธฐ๊ณ 
      const fruits = products.filter(fruitFilter)
      
      console.log(fruits)
      // [{ name: 'banana', type: 'fruit' }, { name: 'apple', type: 'fruit' } ]
      // 2. ํ•จ์ˆ˜ ์ •์˜๋ฅผ ์ธ์ž๋กœ ๋„ฃ์–ด๋ณด๊ธฐ
      
      const fruits = products.filter(function (product) {
          return product.type === 'fruit'
      })
      // 3. ํ™”์‚ดํ‘œ ํ•จ์ˆ˜ ์ ์šฉํ•˜๊ธฐ
      
      const fruits = products.filter((product) => {
          return product.type === 'fruit'
      })

    • reduce

      array.reduce((acc, element, index, array) => {
          // do something
      }, initalValue)
      • array.reduce(callback(acc, element, [index[, array]])[, initialValue])
      • ์ธ์ž๋กœ ์ฃผ์–ด์ง€๋Š” ํ•จ์ˆ˜(์ฝœ๋ฐฑ ํ•จ์ˆ˜)๋ฅผ ๋ฐฐ์—ด์˜ ๊ฐ ์š”์†Œ์— ๋Œ€ํ•ด ํ•œ ๋ฒˆ์”ฉ ์‹คํ–‰ํ•ด์„œ, ํ•˜๋‚˜์˜ ๊ฒฐ๊ณผ ๊ฐ’์„ ๋ฐ˜ํ™˜
      • ์ฆ‰, ๋ฐฐ์—ด์„ ํ•˜๋‚˜์˜ ๊ฐ’์œผ๋กœ ๊ณ„์‚ฐํ•˜๋Š” ๋™์ž‘์ด ํ•„์š”ํ•  ๋•Œ ์‚ฌ์šฉ(์ดํ•ฉ, ํ‰๊ท  ๋“ฑ)
      • map, filter ๋“ฑ ์—ฌ๋Ÿฌ ๋ฐฐ์—ด ๋ฉ”์„œ๋“œ ๋™์ž‘์„ ๋Œ€๋ถ€๋ถ„ ๋Œ€์ฒดํ•  ์ˆ˜ ์žˆ์Œ
      • reduce ๋ฉ”์„œ๋“œ์˜ ์ฃผ์š” ๋งค๊ฐœ๋ณ€์ˆ˜
        • acc
          • ์ด์ „ callback ํ•จ์ˆ˜์˜ ๋ฐ˜ํ™˜ ๊ฐ’์ด ๋ˆ„์ ๋˜๋Š” ๋ณ€์ˆ˜
        • initialValue (optional)
          • ์ตœ์ดˆ callback ํ•จ์ˆ˜ ํ˜ธ์ถœ ์‹œ acc์— ํ• ๋‹น๋˜๋Š” ๊ฐ’, default ๊ฐ’์€ ๋ฐฐ์—ด์˜ ์ฒซ ๋ฒˆ์งธ ๊ฐ’
      • reduce์˜ ์ฒซ๋ฒˆ์งธ ๋งค๊ฐœ๋ณ€์ˆ˜์ธ ์ฝœ๋ฐฑํ•จ์ˆ˜์˜ ์ฒซ๋ฒˆ์งธ ๋งค๊ฐœ๋ณ€์ˆ˜(acc)๋Š” ๋ˆ„์ ๋œ ๊ฐ’(์ „ ๋‹จ๊ณ„๊นŒ์ง€์˜ ๊ฒฐ๊ณผ)
      • reduce์˜ ๋‘๋ฒˆ์งธ ๋งค๊ฐœ๋ณ€์ˆ˜์ธ initialValue๋Š” ๋ˆ„์ ๋  ๊ฐ’์˜ ์ดˆ๊ธฐ๊ฐ’, ์ง€์ •ํ•˜์ง€ ์•Š์„ ์‹œ ์ฒซ๋ฒˆ์งธ ์š”์†Œ์˜ ๊ฐ’์ด ๋จ
      • ๋นˆ ๋ฐฐ์—ด์˜ ๊ฒฝ์šฐ initialValue๋ฅผ ์ œ๊ณตํ•˜์ง€ ์•Š์œผ๋ฉด ์—๋Ÿฌ ๋ฐœ์ƒ
      const tests = [90, 90, 80, 77]
      
      // ์ดํ•ฉ
      const sum = tests.reduce(function (total, x) {
          return total + x
      }, 0)         // ์—ฌ๊ธฐ์„œ 0 ์ƒ๋žต ๊ฐ€๋Šฅ
      
      // ํ™”์‚ดํ‘œ ํ•จ์ˆ˜
      const sum = tests.reduce((total, x) => total + x, 0)
      
      // ํ‰๊ท 
      const sum = tests.reduce((total, x) => total + x, 0) / tests.length
      • reduce ๋™์ž‘ ๋ฐฉ์‹

        Untitled


  • find

    array.find((element, index, array) => {
        // do something
    }
    • array.find(callback(element[, index[, array]]))
    • ๋ฐฐ์—ด์˜ ๊ฐ ์š”์†Œ์— ๋Œ€ํ•ด ์ฝœ๋ฐฑ ํ•จ์ˆ˜๋ฅผ ํ•œ ๋ฒˆ์”ฉ ์‹คํ–‰
    • ์ฝœ๋ฐฑ ํ•จ์ˆ˜์˜ ๋ฐ˜ํ™˜ ๊ฐ’์ด true๋ฉด, ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜๋Š” ์ฒซ๋ฒˆ์งธ ์š”์†Œ๋ฅผ ๋ฐ˜ํ™˜
    • ์ฐพ๋Š” ๊ฐ’์ด ๋ฐฐ์—ด์— ์—†์œผ๋ฉด undefined ๋ฐ˜ํ™˜
    const avengers = [
        { name: 'Tony Stark', age: 45 },
      { name: 'Steve Rogers', age: 32 },
        { name: 'Thor', age: 40 }
    ]
    
    const avenger = avengers.find(function (avenger) {
        return avenger.name === 'Tony Stark'
    })
    
    // ํ™”์‚ดํ‘œ ํ•จ์ˆ˜ ์ ์šฉ
    const avenger = avengers.find((avenger) => {
        return avenger.name === 'Tony Stark'
    })

  • some

    array.some((element, index, array) => {
        // do something
    }
    • array.some(callback(element[, index[, array]]))
    • ๋ฐฐ์—ด์˜ ์š”์†Œ ์ค‘ ํ•˜๋‚˜๋ผ๋„ ์ฃผ์–ด์ง„ ํŒ๋ณ„ ํ•จ์ˆ˜๋ฅผ ํ†ต๊ณผํ•˜๋ฉด true ๋ฐ˜ํ™˜
    • ๋ชจ๋“  ์š”์†Œ๊ฐ€ ํ†ต๊ณผํ•˜์ง€ ๋ชปํ•˜๋ฉด ๊ฑฐ์ง“ ๋ฐ˜ํ™˜
    • ๋นˆ ๋ฐฐ์—ด์€ ํ•ญ์ƒ false ๋ฐ˜ํ™˜
    const arr = [1, 2, 3, 4, 5]
    
    const result = arr.some((elem) => {
        return elem % 2 === 0
    })
    //true

  • every

    array.every((element, index, array) => {
        // do something
    })
    • array.every(callback(element[, index[, array]]))
    • ๋ฐฐ์—ด์˜ ๋ชจ๋“  ์š”์†Œ๊ฐ€ ์ฃผ์–ด์ง„ ํŒ๋ณ„ ํ•จ์ˆ˜๋ฅผ ํ†ต๊ณผํ•˜๋ฉด true ๋ฐ˜ํ™˜
    • ํ•˜๋‚˜์˜ ์š”์†Œ๋ผ๋„ ํ†ต๊ณผํ•˜์ง€ ๋ชปํ•˜๋ฉด false ๋ฐ˜ํ™˜
    • ๋นˆ ๋ฐฐ์—ด์€ ํ•ญ์ƒ true ๋ฐ˜ํ™˜
    const arr = [1, 2, 3, 4, 5]
    
    const result = arr.every((elem) => {
        return elem % 2 === 0
    })
    //false

  • ๋ฐฐ์—ด ์ˆœํšŒ ๋น„๊ต

    Untitled


๊ฐ์ฒด (Object)

  • ๊ฐœ์š”

    • ๊ฐ์ฒด๋Š” ์†์„ฑ(property)์˜ ์ง‘ํ•ฉ์ด๋ฉฐ
    • ์ค‘๊ด„ํ˜ธ ๋‚ด๋ถ€์— key์™€ value์˜ ์Œ์œผ๋กœ ํ‘œํ˜„
    • key
      • ๋ฌธ์ž์—ด ํƒ€์ž…๋งŒ ๊ฐ€๋Šฅ
      • key ์ด๋ฆ„์— ๋„์–ด์“ฐ๊ธฐ ๋“ฑ์˜ ๊ตฌ๋ถ„์ž๊ฐ€ ์žˆ์œผ๋ฉด ๋”ฐ์˜ดํ‘œ๋กœ ๋ฌถ์–ด์„œ ํ‘œํ˜„
    • value
      • ๋ชจ๋“  ํƒ€์ž…(ํ•จ์ˆ˜ ํฌํ•จ) ๊ฐ€๋Šฅ
    • ๊ฐ์ฒด ์š”์†Œ ์ ‘๊ทผ
      • ์ (.) ๋˜๋Š” ๋Œ€๊ด„ํ˜ธ([ ])๋กœ ๊ฐ€๋Šฅ
      • key ์ด๋ฆ„์— ๋„์–ด์“ฐ๊ธฐ ๊ฐ™์€ ๊ตฌ๋ถ„์ž๊ฐ€ ์žˆ์œผ๋ฉด ๋Œ€๊ด„ํ˜ธ ์ ‘๊ทผ๋งŒ ๊ฐ€๋Šฅ
  • ์˜ˆ์‹œ

    const me = {
        name: 'jack',
        phoneNumber: '01012345678',
        'samsung products': {
            buds: 'Galaxy Buds pro',
            galaxy: 'Galaxy s99'
        },
    }
    
    console.log(me.name)
    console.log(me['name'])
    console.log(me['samsung products'])
    console.log(me.samsung products])    // ๋ถˆ๊ฐ€๋Šฅ
    console.log(me['samsung products'].buds)
  • ๊ฐ์ฒด ๊ด€๋ จ ES6 ๋ฌธ๋ฒ• ์ตํžˆ๊ธฐ

    1. ์†์„ฑ๋ช… ์ถ•์•ฝ
    2. ๋ฉ”์„œ๋“œ๋ช… ์ถ•์•ฝ
    3. ๊ณ„์‚ฐ๋œ ์†์„ฑ๋ช… ์‚ฌ์šฉ
    4. ๊ตฌ์กฐ ๋ถ„ํ•ด ํ• ๋‹น
    5. ๊ฐ์ฒด ์ „๊ฐœ ๊ตฌ๋ฌธ(Spread Operator)
  1. ์†์„ฑ๋ช… ์ถ•์•ฝ

    • ๊ฐ์ฒด๋ฅผ ์ •์˜ํ•  ๋•Œ key์™€ ํ• ๋‹นํ•˜๋Š” ๋ณ€์ˆ˜์˜ ์ด๋ฆ„์ด ๊ฐ™์œผ๋ฉด ์˜ˆ์‹œ์™€ ๊ฐ™์ด ์ถ•์•ฝ ๊ฐ€๋Šฅ
    // ES5
    var books = ['Learning JavaScript', 'Learning Python']
    var magazines = ['Vogue', 'Science']
    
    var bookShop = {
       books: books,
       magazines: magazines,
    }
    console.log(bookShop)
    
    /*
    {
       books: ['Learning JavaScript', 'Learning Python'],
       magazines: ['Vogue', 'Science']
    }
    */
    
    // ES6+
    const books = ['Learning JavaScript', 'Learning Python']
    const magazines = ['Vogue', 'Science']
    
    const bookShop = {
       books,
       magazines,
    }
    console.log(bookShop)
    
    /*
    {
       books: ['Learning JavaScript', 'Learning Python'],
       magazines: ['Vogue', 'Science']
    }
    */
  2. ๋ฉ”์„œ๋“œ๋ช… ์ถ•์•ฝ

    • ๋ฉ”์„œ๋“œ ์„ ์–ธ ์‹œ function ํ‚ค์›Œ๋“œ ์ƒ๋žต
    // ES5
    var obj = {
       greeting: function () {
           console.log('Hi~')
       }
    }
    
    obj.greeting()     // Hi~
    // ES6+
    const obj = {
       greeting() {
           console.log('Hi~')
       }
    }
    
    obj.greeting()     // Hi~
  3. ๊ณ„์‚ฐ๋œ ์†์„ฑ

    • ๊ฐ์ฒด๋ฅผ ์ •์˜ํ•  ๋•Œ key์˜ ์ด๋ฆ„์„ ํ‘œํ˜„์‹์„ ์ด์šฉํ•˜์—ฌ ๋™์ ์œผ๋กœ ์ƒ์„ฑ ๊ฐ€๋Šฅ
    const key = 'country'
    const value = ['ํ•œ๊ตญ', '๋ฏธ๊ตญ', '์ผ๋ณธ', '์ค‘๊ตญ']
    
    const myObj = {
       [key]: value,
    }
    
    console.log(myObj)         // { country: ['ํ•œ๊ตญ', '๋ฏธ๊ตญ', '์ผ๋ณธ', '์ค‘๊ตญ'] }
    console.log(myObj.country) // ['ํ•œ๊ตญ', '๋ฏธ๊ตญ', '์ผ๋ณธ', '์ค‘๊ตญ']
  4. ๊ตฌ์กฐ ๋ถ„ํ•ด ํ• ๋‹น

    • ๋ฐฐ์—ด ๋˜๋Š” ๊ฐ์ฒด๋ฅผ ๋ถ„ํ•ดํ•˜์—ฌ ์†์„ฑ์„ ๋ณ€์ˆ˜์— ์‰ฝ๊ฒŒ ํ• ๋‹นํ•  ์ˆ˜ ์žˆ๋Š” ๋ฌธ๋ฒ•

    Untitled

  5. Spread syntax (โ€ฆ)

    • ๋ฐฐ์—ด๊ณผ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ์ „๊ฐœ๊ตฌ๋ฌธ์„ ์‚ฌ์šฉํ•ด ๊ฐ์ฒด ๋‚ด๋ถ€์—์„œ ๊ฐ์ฒด ์ „๊ฐœ ๊ฐ€๋Šฅ

    • ์–•์€ ๋ณต์‚ฌ์— ํ™œ์šฉ ๊ฐ€๋Šฅ

      const obj = {b: 2, c: 3, d: 4}
      const newObj = {a: 1, ...obj, e: 5}
      
      console.log(newObj)   // {a: 1, b: 2, c: 3, d: 4, e: 5}
  • JSON

    • JavaScript Object Notation
    • Key - Value ํ˜•ํƒœ๋กœ ์ด๋ฃจ์–ด์ง„ ์ž๋ฃŒ ํ‘œ๊ธฐ๋ฒ•
    • JavaScript์˜ Object์™€ ์œ ์‚ฌํ•œ ๊ตฌ์กฐ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์ง€๋งŒ Object๋Š” ๊ทธ ์ž์ฒด๋กœ ํƒ€์ž…์ด๊ณ , JSON์€ ํ˜•์‹์ด ์žˆ๋Š” โ€œ๋ฌธ์ž์—ดโ€
    • ์ฆ‰, JSON์„ Object๋กœ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ๋ณ€ํ™˜ ์ž‘์—…์ด ํ•„์š”

    Untitled

  • ์ฐธ๊ณ ) ๋ฐฐ์—ด์€ ๊ฐ์ฒด๋‹ค

    • ๋ฐฐ์—ด์€ ํ‚ค์™€ ์†์„ฑ๋“ค์„ ๋‹ด๊ณ  ์žˆ๋Š” ์ฐธ์กฐ ํƒ€์ž…์˜ ๊ฐ์ฒด
    • ๋ฐฐ์—ด์€ ์ธ๋ฑ์Šค๋ฅผ ํ‚ค๋กœ ๊ฐ€์ง€๋ฉฐ length ํ”„๋กœํผํ‹ฐ๋ฅผ ๊ฐ–๋Š” ํŠน์ˆ˜ํ•œ ๊ฐ์ฒด

    Untitled


DOM

๊ฐœ์š”

  • ๋ธŒ๋ผ์šฐ์ €์—์„œ์˜ JavaScript
    • JavaScript๋Š” ์›น ํŽ˜์ด์ง€์—์„œ ๋‹ค์–‘ํ•œ ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•˜๋Š” ์Šคํฌ๋ฆฝํŠธ ์–ธ์–ด
    • ์ •์ ์ธ ์ •๋ณด๋งŒ ๋ณด์—ฌ์ฃผ๋˜ ์›น ํŽ˜์ด์ง€๋ฅผ ๋ฐ์ดํ„ฐ๊ฐ€ ์ฃผ๊ธฐ์ ์œผ๋กœ ๊ฐฑ์‹ ๋˜๊ฑฐ๋‚˜, ์‚ฌ์šฉ์ž์™€ ์ƒํ˜ธ ์ž‘์šฉ์„ ํ•˜๊ฑฐ๋‚˜, ์• ๋‹ˆ๋ฉ”์ด์…˜ ๋“ฑ์ด ๋™์ž‘ํ•˜๊ฒŒ ํ•˜๋Š” ๊ฒƒ์„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•จ
    • ์ฐธ๊ณ ) ์Šคํฌ๋ฆฝํŠธ ์–ธ์–ด (Script Language)
      • ๊ธฐ์กด์— ์กด์žฌํ•˜๋Š” ์‘์šฉ ์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ์ œ์–ดํ•˜๋Š” ์ปดํ“จํ„ฐ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด

์›น ํŽ˜์ด์ง€์—์„œ์˜ JavaScript

  • JavaScript๋Š” ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๋กœ์„œ์˜ ์—ญํ• ๋„ ๊ฐ€๋Šฅํ•˜์ง€๋งŒ ํด๋ผ์ด์–ธํŠธ ์‚ฌ์ด๋“œ JavaScript ์–ธ์–ด ์œ„์— ์˜ฌ๋ผ๊ฐ€ ์žˆ๋Š” ๊ธฐ๋Šฅ๋“ค์€ ๋” ๋‹ค์–‘ํ•จ
  • API๋ผ๊ณ  ๋ถ€๋ฅด๋Š” ์ด ๊ธฐ๋Šฅ๋“ค์€ JavaScript ์ฝ”๋“œ์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ๋“ค์„ ๋” ๋ฌด๊ถ๋ฌด์ง„ํ•˜๊ฒŒ ๋งŒ๋“ค์–ด ์คŒ
  • ์ด API๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ 2๊ฐœ์˜ ๋ฒ”์ฃผ๋กœ ๋ถ„๋ฅ˜ํ•  ์ˆ˜ ์žˆ์Œ
    1. Browser APIs
    2. Third party APIs
      • ๋ธŒ๋ผ์šฐ์ €์— ํƒ‘์žฌ๋˜์ง€ ์•Š์€ API
      • ์›น์—์„œ ์ง์ ‘ ์ฝ”๋“œ์™€ ์ •๋ณด๋ฅผ ์ฐพ์•„์•ผ ํ•จ
      • Google map API, kakao login API ๋“ฑ

DOM

  • Browser APIs
    • ์›น ๋ธŒ๋ผ์šฐ์ €์— ๋‚ด์žฅ๋œ API๋กœ, ์›น ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ํ˜„์žฌ ์ปดํ“จํ„ฐ ํ™˜๊ฒฝ์— ๊ด€ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ์ œ๊ณตํ•˜๊ฑฐ๋‚˜, ์˜ค๋””์˜ค๋ฅผ ์žฌ์ƒํ•˜๋Š” ๋“ฑ ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ์œ ์šฉํ•˜๊ณ  ๋ณต์žกํ•œ ์ผ์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•จ
    • JavaScript๋กœ Browser API ๋“ค์„ ์‚ฌ์šฉํ•ด์„œ ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Œ
    • ์ข…๋ฅ˜
      • DOM
      • Geolocaton API
      • WebGL
      • ๋“ฑ๋“ฑโ€ฆ
  • ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์›น ํŽ˜์ด์ง€๋ฅผ ๋ถˆ๋Ÿฌ์˜ค๋Š” ๊ณผ์ •
    • ์›น ํŽ˜์ด์ง€๋ฅผ ๋ธŒ๋ผ์šฐ์ €๋กœ ๋ถˆ๋Ÿฌ์˜ค๋ฉด, ๋ธŒ๋ผ์šฐ์ €๋Š” ์ฝ”๋“œ(HTML, CSS, JavaScript)๋ฅผ ์‹คํ–‰ ํ™˜๊ฒฝ(๋ธŒ๋ผ์šฐ์ € ํƒญ)์—์„œ ์‹คํ–‰
    • JavaScript๋Š” DOM API๋ฅผ ํ†ตํ•ด HTML๊ณผ CSS๋ฅผ ๋™์ ์œผ๋กœ ์ˆ˜์ •, ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์—…๋ฐ์ดํŠธํ•˜๋Š” ์ผ์— ๊ฐ€์žฅ ๋งŽ์ด ์“ฐ์ž„
  • DOM
    • ๋ฌธ์„œ ๊ฐ์ฒด ๋ชจ๋ธ (Document Object Model)
    • ๋ฌธ์„œ์˜ ๊ตฌ์กฐํ™”๋œ ํ‘œํ˜„์„ ์ œ๊ณตํ•˜๋ฉฐ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๊ฐ€ DOM ๊ตฌ์กฐ์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์„ ์ œ๊ณต
      • ๋ฌธ์„œ ๊ตฌ์กฐ, ์Šคํƒ€์ผ, ๋‚ด์šฉ ๋“ฑ์„ ์‰ฝ๊ฒŒ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋„์›€
      • HTML ์ฝ˜ํ…์ธ ๋ฅผ ์ถ”๊ฐ€, ์ œ๊ฑฐ, ๋ณ€๊ฒฝํ•˜๊ณ , ๋™์ ์œผ๋กœ ํŽ˜์ด์ง€์— ์Šคํƒ€์ผ์„ ์ถ”๊ฐ€ํ•˜๋Š” ๋“ฑ HTML/CSS๋ฅผ ์กฐ์ž‘ํ•  ์ˆ˜ ์žˆ์Œ
    • HTML ๋ฌธ์„œ๋ฅผ ๊ตฌ์กฐํ™”ํ•˜์—ฌ ๊ฐ ์š”์†Œ๋ฅผ ๊ฐ์ฒด (object) ๋กœ ์ทจ๊ธ‰
    • ๋‹จ์ˆœํ•œ ์†์„ฑ ์ ‘๊ทผ, ๋ฉ”์„œ๋“œ ํ™œ์šฉ ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์  ํŠน์„ฑ์„ ํ™œ์šฉํ•œ ์กฐ์ž‘์ด ๊ฐ€๋Šฅํ•จ
    • DOM์€ ๋ฌธ์„œ๋ฅผ ๋…ผ๋ฆฌ ํŠธ๋ฆฌ๋กœ ํ‘œํ˜„
    • DOM ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ํ”„๋กœ๊ทธ๋ž˜๋ฐ์ ์œผ๋กœ ํŠธ๋ฆฌ์— ์ ‘๊ทผ ๊ฐ€๋Šฅ, ์ด๋ฅผ ํ†ตํ•ด ๋ฌธ์„œ์˜ ๊ตฌ์กฐ, ์Šคํƒ€์ผ, ์ปจํ…์ธ ๋ฅผ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ์Œ
    • ์›น ํŽ˜์ด์ง€๋Š” ์ผ์ข…์˜ ๋ฌธ์„œ(document)
    • ์ด ๋ฌธ์„œ๋Š” ์›น ๋ธŒ๋ผ์šฐ์ €๋ฅผ ํ†ตํ•ด ๊ทธ ๋‚ด์šฉ์ด ํ•ด์„๋˜์–ด ์›น ๋ธŒ๋ผ์šฐ์ € ํ™”๋ฉด์— ๋‚˜ํƒ€๋‚˜๊ฑฐ๋‚˜ HTML ์ฝ”๋“œ ์ž์ฒด๋กœ ๋‚˜ํƒ€๋‚˜๊ธฐ๋„ ํ•จ
    • DOM์€ ๋™์ผํ•œ ๋ฌธ์„œ๋ฅผ ํ‘œํ˜„ํ•˜๊ณ , ์ €์žฅํ•˜๊ณ , ์กฐ์ž‘ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ œ๊ณต
    • DOM์€ ์›น ํŽ˜์ด์ง€์˜ ๊ฐ์ฒด ์ง€ํ–ฅ ํ‘œํ˜„์ด๋ฉฐ, JavaScript์™€ ๊ฐ™์€ ์Šคํฌ๋ฆฝํŠธ ์–ธ์–ด๋ฅผ ์ด์šฉํ•ด DOM์„ ์ˆ˜์ •ํ•  ์ˆ˜ ์žˆ์Œ
  • DOM์— ์ ‘๊ทผํ•˜๊ธฐ
    • DOM์„ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด ํŠน๋ณ„ํžˆ ํ•ด์•ผ ํ•  ์ผ์€ ์—†์Œ
    • ๋ชจ๋“  ์›น ๋ธŒ๋ผ์šฐ์ €๋Š” ์Šคํฌ๋ฆฝํŠธ ์–ธ์–ด๊ฐ€ ์†์‰ฝ๊ฒŒ ์›น ํŽ˜์ด์ง€์˜ ์š”์†Œ์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋„๋ก ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด DOM ๊ตฌ์กฐ๋ฅผ ํ•ญ์ƒ ์‚ฌ์šฉ
    • ์šฐ๋ฆฌ๋Š” โ€œDOM์˜ ์ฃผ์š” ๊ฐ์ฒดโ€๋“ค์„ ํ™œ์šฉํ•˜์—ฌ ๋ฌธ์„œ๋ฅผ ์กฐ์ž‘ํ•˜๊ฑฐ๋‚˜ ํŠน์ • ์š”์†Œ๋“ค์„ ์–ป์„ ์ˆ˜ ์žˆ์Œ
  • DOM์˜ ์ฃผ์š” ๊ฐ์ฒด
    • window
    • document
    • navigator, location, history, screen ๋“ฑ
  • window object
    • DOM ์„ ํ‘œํ˜„ํ•˜๋Š” ์ฐฝ
    • ๊ฐ€์žฅ ์ตœ์ƒ์œ„ ๊ฐ์ฒด (์ž‘์„ฑ ์‹œ ์ƒ๋žต ๊ฐ€๋Šฅ)
    • ํƒญ ๊ธฐ๋Šฅ์ด ์žˆ๋Š” ๋ธŒ๋ผ์šฐ์ €์—์„œ๋Š” ๊ฐ๊ฐ์˜ ํƒญ์„ ๊ฐ๊ฐ์˜ window ๊ฐ์ฒด๋กœ ๋‚˜ํƒ€๋ƒ„
  • document object
    • ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ๋ถˆ๋Ÿฌ์˜จ ์›น ํŽ˜์ด์ง€
    • ํŽ˜์ด์ง€ ์ปจํ…์ธ ์˜ ์ง„์ž…์  ์—ญํ• ์„ ํ•˜๋ฉฐ, ๋“ฑ๊ณผ ๊ฐ™์€ ์ˆ˜๋งŽ์€ ๋‹ค๋ฅธ ์š”์†Œ๋“ค์„ ํฌํ•จํ•˜๊ณ  ์žˆ์Œ
  • [์ฐธ๊ณ ] ํŒŒ์‹ฑ (Parsing)
    • ๊ตฌ๋ฌธ ๋ถ„์„, ํ•ด์„
    • ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ๋ฌธ์ž์—ด์„ ํ•ด์„ํ•˜์—ฌ DOM Tree๋กœ ๋งŒ๋“œ๋Š” ๊ณผ์ •

DOM ์กฐ์ž‘

  • ๊ฐœ์š”

    • Document๊ฐ€ ์ œ๊ณตํ•˜๋Š” ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•ด ์›น ํŽ˜์ด์ง€ ๋ฌธ์„œ ์กฐ์ž‘ํ•˜๊ธฐ
    • DOM ์กฐ์ž‘ ์ˆœ์„œ
      1. ์„ ํƒ (Select)
      2. ์กฐ์ž‘ (Manipulation)
        • ์ƒ์„ฑ, ์ถ”๊ฐ€, ์‚ญ์ œ ๋“ฑ
  • ์„ ํƒ ๊ด€๋ จ ๋ฉ”์„œ๋“œ

    • document.querySelector(selector)
      • ์ œ๊ณตํ•œ ์„ ํƒ์ž์™€ ์ผ์น˜ํ•˜๋Š” element ํ•œ ๊ฐœ ์„ ํƒ
      • ์ œ๊ณตํ•œ CSS selector๋ฅผ ๋งŒ์กฑํ•˜๋Š” ์ฒซ ๋ฒˆ์งธ element ๊ฐ์ฒด๋ฅผ ๋ฐ˜ํ™˜ (์—†๋‹ค๋ฉด null ๋ฐ˜ํ™˜)
    • document.querySelectorAll(selector)
      • ์ œ๊ณตํ•œ ์„ ํƒ์ž์™€ ์ผ์น˜ํ•˜๋Š” ์—ฌ๋Ÿฌ element๋ฅผ ์„ ํƒ
      • ๋งค์นญํ•  ํ•˜๋‚˜ ์ด์ƒ์˜ selector๋ฅผ ํฌํ•จํ•˜๋Š” ์œ ํšจํ•œ CSS selector๋ฅผ ์ธ์ž(๋ฌธ์ž์—ด)๋กœ ๋ฐ›์Œ
      • ์ œ๊ณตํ•œ CSS selector๋ฅผ ๋งŒ์กฑํ•˜๋Š” NodeList๋ฅผ ๋ฐ˜ํ™˜
  • [์ฐธ๊ณ ] NodeList

    • index๋กœ๋งŒ ๊ฐ ํ•ญ๋ชฉ์— ์ ‘๊ทผ ๊ฐ€๋Šฅ
    • ๋ฐฐ์—ด์˜ forEach ๋ฉ”์„œ๋“œ ๋ฐ ๋‹ค์–‘ํ•œ ๋ฐฐ์—ด ๋ฉ”์„œ๋“œ ์‚ฌ์šฉ ๊ฐ€๋Šฅ
    • querySelectorAll() ์— ์˜ํ•ด ๋ฐ˜ํ™˜๋˜๋Š” NodeList๋Š” DOM์˜ ๋ณ€๊ฒฝ์‚ฌํ•ญ์„ ์‹ค์‹œ๊ฐ„์œผ๋กœ ๋ฐ˜์˜ํ•˜์ง€ ์•Š์Œ
  • ์กฐ์ž‘ ๊ด€๋ จ ๋ฉ”์„œ๋“œ (์ƒ์„ฑ)

    • document.createElement(tagName)
      • ์ž‘์„ฑํ•œ tagName์˜ HTML ์š”์†Œ๋ฅผ ์ƒ์„ฑํ•˜์—ฌ ๋ฐ˜ํ™˜
  • ์กฐ์ž‘ ๊ด€๋ จ ๋ฉ”์„œ๋“œ (์ž…๋ ฅ)

    • Node.innerText
      • Node ๊ฐ์ฒด์™€ ๊ทธ ์ž์†์˜ ํ…์ŠคํŠธ ์ปจํ…์ธ  (DOMString) ๋ฅผ ํ‘œํ˜„
        • ํ•ด๋‹น ์š”์†Œ ๋‚ด๋ถ€์˜ raw text
      • ์‚ฌ๋žŒ์ด ์ฝ์„ ์ˆ˜ ์žˆ๋Š” ์š”์†Œ๋งŒ ๋‚จ๊น€
      • ์ฆ‰, ์ค„ ๋ฐ”๊ฟˆ์„ ์ธ์‹ํ•˜๊ณ  ์ˆจ๊ฒจ์ง„ ๋‚ด์šฉ์„ ๋ฌด์‹œํ•˜๋Š” ๋“ฑ ์ตœ์ข…์ ์œผ๋กœ ์Šคํƒ€์ผ๋ง์ด ์ ์šฉ๋œ ๋ชจ์Šต์œผ๋กœ ํ‘œํ˜„๋จ
  • ์กฐ์ž‘ ๊ด€๋ จ ๋ฉ”์„œ๋“œ (์ถ”๊ฐ€)

    • Node.appendChild()
      • ํ•œ Node๋ฅผ ํŠน์ • ๋ถ€๋ชจ Node์˜ ์ž์‹ NodeList ์ค‘ ๋งˆ์ง€๋ง‰ ์ž์‹์œผ๋กœ ์‚ฝ์ž…
      • ํ•œ๋ฒˆ์— ์˜ค์ง ํ•˜๋‚˜์˜ Node๋งŒ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์Œ
      • ์ถ”๊ฐ€๋œ Node ๊ฐ์ฒด๋ฅผ ๋ฐ˜ํ™˜
      • ๋งŒ์•ฝ ์ฃผ์–ด์ง„ Node๊ฐ€ ์ด๋ฏธ ๋ฌธ์„œ์— ์กด์žฌํ•˜๋Š” ๋‹ค๋ฅธ Node๋ฅผ ์ฐธ์กฐํ•œ๋‹ค๋ฉด ํ˜„์žฌ ์œ„์น˜์—์„œ ์ƒˆ๋กœ์šด ์œ„์น˜๋กœ ์ด๋™
  • ์กฐ์ž‘ ๊ด€๋ จ ๋ฉ”์„œ๋“œ (์‚ญ์ œ)

    • Node.removeChild()
      • DOM์—์„œ ์ž์‹ Node๋ฅผ ์ œ๊ฑฐ
      • ์ œ๊ฑฐ๋œ Node๋ฅผ ๋ฐ˜ํ™˜
  • ex)

    // h1 ์š”์†Œ(element)๋ฅผ ๋งŒ๋“ค๊ณ 
        const title = document.createElement('h1')
    
        // ํ…์ŠคํŠธ๋ฅผ ์ถ”๊ฐ€
        title.innerText = '์ด๊ฒƒ์ด ์ด๋„ˆํ…์ŠคํŠธ'
    
        // ์„ ํƒ์ž๋กœ div ํƒœ๊ทธ๋ฅผ ๊ฐ€์ ธ์™€์„œ
        const div = document.querySelector('div')
    
        // div ํƒœ๊ทธ์˜ ์ž์‹ ์š”์†Œ๋กœ ์ถ”๊ฐ€
        div.appendChild(title)
    
        // div์˜ h1 ์š”์†Œ ์‚ญ์ œ
        div.removeChild(title)
  • ์กฐ์ž‘ ๊ด€๋ จ ๋ฉ”์„œ๋“œ (์†์„ฑ ์กฐํšŒ ๋ฐ ์„ค์ •)

    • Element.getAttribute(attributeName)
      • ํ•ด๋‹น ์š”์†Œ์˜ ์ง€์ •๋œ ๊ฐ’(๋ฌธ์ž์—ด)์„ ๋ฐ˜ํ™˜
      • ์ธ์ž(attributeName)๋Š” ๊ฐ’์„ ์–ป๊ณ ์ž ํ•˜๋Š” ์†์„ฑ์˜ ์ด๋ฆ„
    • Element.setAttribute(name, value)
      • ์ง€์ •๋œ ์š”์†Œ์˜ ๊ฐ’์„ ์„ค์ •
      • ์†์„ฑ์ด ์ด๋ฏธ ์กด์žฌํ•˜๋ฉด ๊ฐ’์„ ๊ฐฑ์‹ , ์กด์žฌํ•˜์ง€ ์•Š์œผ๋ฉด ์ง€์ •๋œ ์ด๋ฆ„๊ณผ ๊ฐ’์œผ๋กœ ์ƒˆ ์†์„ฑ์„ ์ถ”๊ฐ€

DOM ์กฐ์ž‘ ์ •๋ฆฌ

  1. ์„ ํƒํ•œ๋‹ค
    • querySelector()
    • querySelectorAll()
  2. ์กฐ์ž‘ํ•œ๋‹ค
    • innerText
    • setAttribute()
    • getAttribute()
    • createElement()
    • appendChild()
    • ...

Event

  • ๊ฐœ์š”
    • Event ๋ž€ ํ”„๋กœ๊ทธ๋ž˜๋ฐํ•˜๊ณ  ์žˆ๋Š” ์‹œ์Šคํ…œ์—์„œ ์ผ์–ด๋‚˜๋Š” ์‚ฌ๊ฑด(action) ํ˜น์€ ๋ฐœ์ƒ(occurence)์œผ๋กœ, ๊ฐ ์ด๋ฒคํŠธ์— ๋Œ€ํ•ด ์กฐ์ž‘ํ•  ์ˆ˜ ์žˆ๋„๋ก ํŠน์ • ์‹œ์ ์„ ์‹œ์Šคํ…œ์ด ์•Œ๋ ค์ฃผ๋Š” ๊ฒƒ
      • ์˜ˆ๋ฅผ ๋“ค์–ด, ์‚ฌ์šฉ์ž๊ฐ€ ์›น ํŽ˜์ด์ง€์˜ ๋ฒ„ํŠผ์„ ํด๋ฆญํ•œ๋‹ค๋ฉด ํด๋ฆญ์— ๋Œ€ํ•ด ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•˜๊ณ  ์šฐ๋ฆฌ๋Š” ์ด๋ฒคํŠธ๋ฅผ ํ†ตํ•ด ํด๋ฆญ์ด๋ผ๋Š” ์‚ฌ๊ฑด์— ๋Œ€ํ•œ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ›๊ฑฐ๋‚˜, ์กฐ์ž‘์„ ํ•  ์ˆ˜ ์žˆ์Œ
    • ํด๋ฆญ ๋ง๊ณ ๋„ ์›น์—์„œ๋Š” ๊ฐ์–‘๊ฐ์ƒ‰์˜ Event๊ฐ€ ์กด์žฌ
      • ํ‚ค๋ณด๋“œ ํ‚ค ์ž…๋ ฅ, ๋ธŒ๋ผ์šฐ์ € ๋‹ซ๊ธฐ, ๋ฐ์ดํ„ฐ ์ œ์ถœ, ํ…์ŠคํŠธ ๋ณต์‚ฌ ๋“ฑ

  • Event object
    • ๋„คํŠธ์›Œํฌ ํ™œ๋™์ด๋‚˜ ์‚ฌ์šฉ์ž์™€์˜ ์ƒํ˜ธ์ž‘์šฉ ๊ฐ™์€ ์‚ฌ๊ฑด์˜ ๋ฐœ์ƒ์„ ์•Œ๋ฆฌ๊ธฐ ์œ„ํ•œ ๊ฐ์ฒด
    • Event ๋ฐœ์ƒ
      • ๋งˆ์šฐ์Šค๋ฅผ ํด๋ฆญํ•˜๊ฑฐ๋‚˜ ํ‚ค๋ณด๋“œ๋ฅผ ๋ˆ„๋ฅด๋Š” ๋“ฑ ์‚ฌ์šฉ์ž ํ–‰๋™์œผ๋กœ ๋ฐœ์ƒํ•  ์ˆ˜๋„ ์žˆ๊ณ 
      • ํŠน์ • ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์ ์œผ๋กœ๋„ ๋งŒ๋“ค์–ด ๋‚ผ ์ˆ˜ ์žˆ์Œ
    • DOM ์š”์†Œ๋Š” Event๋ฅผ ๋ฐ›๊ณ  ("์ˆ˜์‹ ")
    • ๋ฐ›์€ Event๋ฅผ "์ฒ˜๋ฆฌ" ํ•  ์ˆ˜ ์žˆ์Œ
      • Event ์ฒ˜๋ฆฌ๋Š” ์ฃผ๋กœ addEventListener() ๋ผ๋Š” Event ์ฒ˜๋ฆฌ๊ธฐ(Event handler)๋ฅผ ๋‹ค์–‘ํ•œ html ์š”์†Œ์— "๋ถ€์ฐฉ" ํ•ด์„œ ์ฒ˜๋ฆฌํ•จ

Event handler - addEventListener()

  • ๋Œ€์ƒ์— ํŠน์ • Event๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด, ํ•  ์ผ์„ ๋“ฑ๋กํ•˜์ž
    • EventTarget.addEventListener(type, listener)
  • EventTarget.addEventListener(type, listener[, options])
    • ์ง€์ •ํ•œ Event๊ฐ€ ๋Œ€์ƒ์— ์ „๋‹ฌ๋  ๋•Œ๋งˆ๋‹ค ํ˜ธ์ถœํ•  ํ•จ์ˆ˜๋ฅผ ์„ค์ •
    • Event๋ฅผ ์ง€์›ํ•˜๋Š” ๋ชจ๋“  ๊ฐ์ฒด(Element, Document, Window ๋“ฑ)๋ฅผ ๋Œ€์ƒ(EventTarget)์œผ๋กœ ์ง€์ • ๊ฐ€๋Šฅ
  • EventTarget.addEventListener(**type**, listener[, options])
    • type
      • ๋ฐ˜์‘ํ•  Event ์œ ํ˜•์„ ๋‚˜ํƒ€๋‚ด๋Š” ๋Œ€์†Œ๋ฌธ์ž ๊ตฌ๋ถ„ ๋ฌธ์ž์—ด
      • ๋Œ€ํ‘œ ์ด๋ฒคํŠธ
        • input, click, submit, โ€ฆ
  • EventTarget.addEventListener(type, **listener**[, options])
    • listener
      • ์ง€์ •๋œ ํƒ€์ž…์˜ Event๋ฅผ ์ˆ˜์‹ ํ•  ๊ฐ์ฒด
      • JavaScript function ๊ฐ์ฒด (์ฝœ๋ฐฑ ํ•จ์ˆ˜)์—ฌ์•ผ ํ•จ
      • ์ฝœ๋ฐฑ ํ•จ์ˆ˜๋Š” ๋ฐœ์ƒํ•œ Event์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ง„ Event ๊ฐ์ฒด๋ฅผ ์œ ์ผํ•œ ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ๋ฐ›์Œ
  • addEventListener ์ •๋ฆฌ
    • ~ ํ•˜๋ฉด ~ ํ•œ๋‹ค.
      • ํด๋ฆญํ•˜๋ฉด, ๊ฒฝ๊ณ ์ฐฝ์„ ๋„์šด๋‹คโ€ฆ
      • ํŠน์ • Event๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด, ํ•  ์ผ(์ฝœ๋ฐฑ ํ•จ์ˆ˜)์„ ๋“ฑ๋กํ•œ๋‹คโ€ฆ

Event ์ทจ์†Œ

  • event.preventDefault()
    • ํ˜„์žฌ Event์˜ ๊ธฐ๋ณธ ๋™์ž‘์„ ์ค‘๋‹จ
    • HTML ์š”์†Œ์˜ ๊ธฐ๋ณธ ๋™์ž‘์„ ์ž‘๋™ํ•˜์ง€ ์•Š๊ฒŒ ๋ง‰์Œ
    • HTML ์š”์†Œ์˜ ๊ธฐ๋ณธ ๋™์ž‘ ์˜ˆ์‹œ
      • a ํƒœ๊ทธ : ํด๋ฆญ ์‹œ ํŠน์ • ์ฃผ์†Œ๋กœ ์ด๋™
      • form ํƒœ๊ทธ : form ๋ฐ์ดํ„ฐ ์ „์†ก

[์ฐธ๊ณ ] lodash

  • ๋ชจ๋“ˆ์„ฑ, ์„ฑ๋Šฅ ๋ฐ ์ถ”๊ฐ€ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜๋Š” JavaScript ์œ ํ‹ธ๋ฆฌํ‹ฐ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ
  • array, object ๋“ฑ ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ๋‹ค๋ฃฐ ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ์œ ์šฉํ•˜๊ณ  ๊ฐ„ํŽธํ•œ ์œ ํ‹ธ๋ฆฌํ‹ฐ ํ•จ์ˆ˜๋“ค์„ ์ œ๊ณต
  • ํ•จ์ˆ˜ ์˜ˆ์‹œ
    • reverse, sortBy, range, random โ€ฆ
  • https://lodash.com/

this

  • ์–ด๋– ํ•œ object๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” ํ‚ค์›Œ๋“œ
    • java์—์„œ์˜ this์™€ python์—์„œ์œผ์ด self๋Š” ์ธ์Šคํ„ด์Šค ์ž๊ธฐ์ž์‹ ์„ ๊ฐ€๋ฆฌํ‚ด
  • JavaScript์˜ ํ•จ์ˆ˜๋Š” ํ˜ธ์ถœ๋  ๋•Œ this๋ฅผ ์•”๋ฌต์ ์œผ๋กœ ์ „๋‹ฌ ๋ฐ›์Œ
  • JavaScript์—์„œ์˜ this๋Š” ์ผ๋ฐ˜์ ์ธ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์—์„œ์˜ this์™€ ์กฐ๊ธˆ ๋‹ค๋ฅด๊ฒŒ ๋™์ž‘
  • JavaScript๋Š” ํ•ด๋‹น ํ•จ์ˆ˜ ํ˜ธ์ถœ ๋ฐฉ์‹ ์— ๋”ฐ๋ผ this์— ๋ฐ”์ธ๋”ฉ ๋˜๋Š” ๊ฐ์ฒด๊ฐ€ ๋‹ฌ๋ผ์ง
  • ์ฆ‰, ํ•จ์ˆ˜๋ฅผ ์„ ์–ธํ•  ๋•Œ this์— ๊ฐ์ฒด๊ฐ€ ๊ฒฐ์ •๋˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๊ณ , ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•  ๋•Œ ํ•จ์ˆ˜๊ฐ€ ์–ด๋–ป๊ฒŒ ํ˜ธ์ถœ ๋˜์—ˆ๋Š”์ง€์— ๋”ฐ๋ผ ๋™์ ์œผ๋กœ ๊ฒฐ์ • ๋จ

this INDEX

  1. ์ „์—ญ ๋ฌธ๋งฅ์—์„œ์˜ this

  2. ํ•จ์ˆ˜ ๋ฌธ๋งฅ์—์„œ์˜ this

    • ๋‹จ์ˆœ ํ˜ธ์ถœ
    • Method (๊ฐ์ฒด์˜ ๋ฉ”์„œ๋“œ๋กœ์„œ)
    • Nested
  • ์ „์—ญ ๋ฌธ๋งฅ์—์„œ์˜ this

    • ๋ธŒ๋ผ์šฐ์ €์˜ ์ „์—ญ ๊ฐ์ฒด์ธ window๋ฅผ ๊ฐ€๋ฆฌํ‚ด

      • ์ „์—ญ ๊ฐ์ฒด๋Š” ๋ชจ๋“  ๊ฐ์ฒด์˜ ์œ ์ผํ•œ ์ตœ์ƒ์œ„ ๊ฐ์ฒด๋ฅผ ์˜๋ฏธ
      console.log(this)            // window
  • ํ•จ์ˆ˜ ๋ฌธ๋งฅ์—์„œ์˜ this

    • ํ•จ์ˆ˜์˜ this ํ‚ค์›Œ๋“œ๋Š” ๋‹ค๋ฅธ ์–ธ์–ด์™€ ์กฐ๊ธˆ ๋‹ค๋ฅด๊ฒŒ ๋™์ž‘

      • this์˜ ๊ฐ’์€ ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•œ ๋ฐฉ๋ฒ•์— ์˜ํ•ด ๊ฒฐ์ •๋จ
      • ํ•จ์ˆ˜ ๋‚ด๋ถ€์—์„œ this์˜ ๊ฐ’์€ ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•œ ๋ฐฉ๋ฒ•์— ์˜ํ•ด ์ขŒ์šฐ๋จ
    1. ๋‹จ์ˆœ ํ˜ธ์ถœ

      1. ์ „์—ญ ๊ฐ์ฒด๋ฅผ ๊ฐ€๋ฆฌํ‚ด

      2. ์ „์—ญ์€ ๋ธŒ๋ผ์šฐ์ €์—์„œ๋Š” window, Node.js๋Š” global์„ ์˜๋ฏธํ•จ

        const myFunc = function () {
          console.log(this)
        }
        
        // ๋ธŒ๋ผ์šฐ์ €
        myFunc()    // window
        
        // Node.js
        myFunc()    // global
    2. Method (Function in Object, ๊ฐ์ฒด์˜ ๋ฉ”์„œ๋“œ๋กœ์„œ)

      1. ๋ฉ”์„œ๋“œ๋กœ ์„ ์–ธํ•˜๊ณ  ํ˜ธ์ถœํ•œ๋‹ค๋ฉด, ๊ฐ์ฒด์˜ ๋ฉ”์„œ๋“œ์ด๋ฏ€๋กœ ํ•ด๋‹น ๊ฐ์ฒด๊ฐ€ ๋ฐ”์ธ๋”ฉ

        const myObj = {
          data: 1,
          myFunc() {
              console.log(this)      // myObj
              console.log(this.data) // 1
          }
        }
        
        myObj.myFunc()             // myObj
    3. Nested (Function ํ‚ค์›Œ๋“œ)

      1. forEach์˜ ์ฝœ๋ฐฑ ํ•จ์ˆ˜์—์„œ์˜ this๊ฐ€ ๋ฉ”์„œ๋“œ์˜ ๊ฐ์ฒด๋ฅผ ๊ฐ€๋ฆฌํ‚ค์ง€ ๋ชปํ•˜๊ณ  ์ „์—ญ ๊ฐ์ฒด window๋ฅผ ๊ฐ€๋ฆฌํ‚ด
      2. ๋‹จ์ˆœ ํ˜ธ์ถœ ๋ฐฉ์‹์œผ๋กœ ์‚ฌ์šฉ๋˜์—ˆ๊ธฐ ๋•Œ๋ฌธ
      3. ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ๋“ฑ์žฅํ•œ ํ•จ์ˆ˜ ํ‘œํ˜„์‹์ด ๋ฐ”๋กœ ํ™”์‚ดํ‘œ ํ•จ์ˆ˜
      const myObj = {
         numbers: [1],
         myFunc() {
             console.log(this)      // myObj
             this.numbers.forEach(function (number) {
                 console.log(number)  // 1
                 console.log(this)    // window
             })
         }
      }
      
      myObj.myFunc()
      • Nested (ํ™”์‚ดํ‘œ ํ•จ์ˆ˜)

        • ์ด์ „์— ์ผ๋ฐ˜ function ํ‚ค์›Œ๋“œ์™€ ๋‹ฌ๋ฆฌ ๋ฉ”์„œ๋“œ์˜ ๊ฐ์ฒด๋ฅผ ์ž˜ ๊ฐ€๋ฆฌํ‚ด
        • ํ™”์‚ดํ‘œ ํ•จ์ˆ˜์—์„œ this๋Š” ์ž์‹ ์„ ๊ฐ์‹ผ ์ •์  ๋ฒ”์œ„
        • ์ž๋™์œผ๋กœ ํ•œ ๋‹จ๊ณ„ ์ƒ์œ„์˜ scope์˜ context๋ฅผ ๋ฐ”์ธ๋”ฉ
        const myObj = {
           numbers: [1],
           myFunc() {
               console.log(this)      // myObj
               this.numbers.forEach((number) => {
                   console.log(number)  // 1
                   console.log(this)    // myObj
               })
           }
        }
        
        myObj.myFunc()

ํ™”์‚ดํ‘œ ํ•จ์ˆ˜

  • ํ™”์‚ดํ‘œ ํ•จ์ˆ˜๋Š” ํ˜ธ์ถœ์˜ ์œ„์น˜์™€ ์ƒ๊ด€์—†์ด ์ƒ์œ„ ์Šค์ฝ”ํ”„๋ฅผ ๊ฐ€๋ฆฌํ‚ด
  • Lexical scope
    • ํ•จ์ˆ˜๋ฅผ ์–ด๋””์„œ ํ˜ธ์ถœํ•˜๋Š”์ง€๊ฐ€ ์•„๋‹ˆ๋ผ ์–ด๋””์— ์„ ์–ธ ํ•˜์˜€๋Š”์ง€์— ๋”ฐ๋ผ ๊ฒฐ์ •
    • Static scope๋ผ๊ณ ๋„ ํ•˜๋ฉฐ ๋Œ€๋ถ€๋ถ„์˜ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์—์„œ ๋”ฐ๋ฅด๋Š” ๋ฐฉ์‹
  • ๋”ฐ๋ผ์„œ ํ•จ์ˆ˜ ๋‚ด์˜ ํ•จ์ˆ˜ ์ƒํ™ฉ์—์„œ ํ™”์‚ดํ‘œ ํ•จ์ˆ˜๋ฅผ ์“ฐ๋Š” ๊ฒƒ์„ ๊ถŒ์žฅ
  • ํ•˜์ง€๋งŒ..
    • addEventListener์—์„œ์˜ ์ฝœ๋ฐฑ ํ•จ์ˆ˜๋Š” ํŠน๋ณ„ํ•˜๊ฒŒ function ํ‚ค์›Œ๋“œ์˜ ๊ฒฝ์šฐ addEventListener๋ฅผ ํ˜ธ์ถœํ•œ ๋Œ€์ƒ์„ ๋œปํ•จ (event.target)
    • ๋ฐ˜๋ฉด ํ™”์‚ดํ‘œ ํ•จ์ˆ˜์˜ ๊ฒฝ์šฐ ์ƒ์œ„ ์Šค์ฝ”ํ”„๋ฅผ ์ง€์นญํ•˜๊ธฐ ๋•Œ๋ฌธ์— window ๊ฐ์ฒด๊ฐ€ ๋ฐ”์ธ๋”ฉ ๋œ๋‹ค
  • ๊ฒฐ๋ก 
    • addEventListener์˜ ์ฝœ๋ฐฑ ํ•จ์ˆ˜๋Š” function ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ
<body>
  <button id="function">function</button>
  <button id="arrow">arrow function</button>

  <script>
    const functionButton = document.querySelector('#function')
    const arrowButton = document.querySelector('#arrow')

    functionButton.addEventListener('click', function(event) {
      console.log(this);      // <button id="function">function</button>
    })

    arrowButton.addEventListener('click', event => {
      console.log(this);      // window
    })
  </script>
</body>

this ์ •๋ฆฌ

  • ์ด๋ ‡๊ฒŒ this๊ฐ€ ๋Ÿฐํƒ€์ž„์— ๊ฒฐ์ •๋˜๋ฉด ์žฅ์ ๋„ ์žˆ๊ณ  ๋‹จ์ ๋„ ์žˆ์Œ
  • ํ•จ์ˆ˜(๋ฉ”์„œ๋“œ)๋ฅผ ํ•˜๋‚˜๋งŒ ๋งŒ๋“ค์–ด ์—ฌ๋Ÿฌ ๊ฐ์ฒด์—์„œ ์žฌ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์€ ์žฅ์ ์ด์ง€๋งŒ, ์ด๋Ÿฐ ์œ ์—ฐํ•จ์ด ์‹ค์ˆ˜๋กœ ์ด์–ด์งˆ ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์€ ๋‹จ์ 

Single Thread ์–ธ์–ด, JavaScript

  • ์‘๋‹ต์ด ๋จผ์ € ์˜ค๋Š” ์ˆœ์„œ๋Œ€๋กœ ์ฒ˜๋ฆฌํ•˜์ง€ ๋ง๊ณ , ์•„์˜ˆ ์—ฌ๋Ÿฌ ์ž‘์—…์„ ๋™์‹œ์— ์ฒ˜๋ฆฌํ•˜๋ฉด ๋˜์ง€ ์•Š์„๊นŒ?
  • JavaScript๋Š” ํ•œ ๋ฒˆ์— ํ•˜๋‚˜์˜ ์ผ๋งŒ ์ˆ˜ํ–‰ํ•˜๋Š” Single Thread ์–ธ์–ด๋กœ ๋™์‹œ์— ์—ฌ๋Ÿฌ ์ž‘์—…์„ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์—†์Œ
    • Thread๋ž€?
      • ์ž‘์—…์„ ์ฒ˜๋ฆฌํ•  ๋•Œ ์‹ค์ œ๋กœ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” ์ฃผ์ฒด๋กœ, multi-thread๋ผ๋ฉด ์—…๋ฌด๋ฅผ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ์ฃผ์ฒด๊ฐ€ ์—ฌ๋Ÿฌ ๊ฐœ๋ผ๋Š” ์˜๋ฏธ
  • ์ฆ‰, JavaScript๋Š” ํ•˜๋‚˜์˜ ์ž‘์—…์„ ์š”์ฒญํ•œ ์ˆœ์„œ๋Œ€๋กœ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ๋ฐ–์— ์—†๋‹ค!
  • Single Thread์ธ JavaScript๊ฐ€ ์–ด๋–ป๊ฒŒ ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ๋ฅผ ํ•  ์ˆ˜ ์žˆ์„๊นŒ?
    • JavaScript Runtime

JavaScript Runtime

  • Runtime
    • ํŠน์ • ์–ธ์–ด๊ฐ€ ๋™์ž‘ํ•  ์ˆ˜ ์žˆ๋Š” ํ™˜๊ฒฝ
  • JavaScript์—์„œ ๋น„๋™๊ธฐ์™€ ๊ด€๋ จํ•œ ์ž‘์—…์€ ๋ธŒ๋ผ์šฐ์ € ๋˜๋Š” Node ํ™˜๊ฒฝ์—์„œ ์ฒ˜๋ฆฌ
  • ์ด ์ค‘์—์„œ ๋ธŒ๋ผ์šฐ์ € ํ™˜๊ฒฝ์—์„œ์˜ ๋น„๋™๊ธฐ ๋™์ž‘์€ ํฌ๊ฒŒ ์•„๋ž˜์˜ ์š”์†Œ๋“ค๋กœ ๊ตฌ์„ฑ๋จ
    1. JavaScript Engine์˜ Call Stack
    2. Web API
    3. Task Queue
    4. Event Loop

๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ ๋™์ž‘ ๋ฐฉ์‹

  • ๋ธŒ๋ผ์šฐ์ € ํ™˜๊ฒฝ์—์„œ์˜ JavaScript์˜ ๋น„๋™๊ธฐ๋Š” ์•„๋ž˜์™€ ๊ฐ™์ด ์ฒ˜๋ฆฌ๋œ๋‹ค.

    1. ๋ชจ๋“  ์ž‘์—…์€ Call Stack(LIFO)์œผ๋กœ ๋“ค์–ด๊ฐ„ ํ›„ ์ฒ˜๋ฆฌ๋œ๋‹ค.
    2. ์˜ค๋ž˜ ๊ฑธ๋ฆฌ๋Š” ์ž‘์—…์ด Call Stack์œผ๋กœ ๋“ค์–ด์˜ค๋ฉด Web API๋กœ ๋ณด๋‚ด์„œ ์ฒ˜๋ฆฌํ•˜๋„๋ก ํ•œ๋‹ค.
    3. Web API์—์„œ ์ฒ˜๋ฆฌ๊ฐ€ ๋๋‚œ ์ž‘์—…๋“ค์€ Task Queue(FIFO)์— ์ˆœ์„œ๋Œ€๋กœ ๋“ค์–ด๊ฐ„๋‹ค.
    4. Event Loop๊ฐ€ Call Stack์ด ๋น„์–ด ์žˆ๋Š” ๊ฒƒ์„ ์ฒดํฌํ•˜๊ณ  Task Queue์—์„œ ๊ฐ€์žฅ ์˜ค๋ž˜๋œ ์ž‘์—…์„ Call Stack์œผ๋กœ ๋ณด๋‚ธ๋‹ค.
  1. Call Stack

    1. ์š”์ฒญ์ด ๋“ค์–ด์˜ฌ ๋•Œ๋งˆ๋‹ค ์ˆœ์ฐจ์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•˜๋Š” Stack(LIFO). ๊ธฐ๋ณธ์ ์ธ JavaScript์˜ Single Thread ์ž‘์—… ์ฒ˜๋ฆฌ
  2. Web API

    1. JavaScript ์—”์ง„์ด ์•„๋‹Œ ๋ธŒ๋ผ์šฐ์ €์—์„œ ์ œ๊ณตํ•˜๋Š” runtime ํ™˜๊ฒฝ์œผ๋กœ ์‹œ๊ฐ„์ด ์†Œ์š”๋˜๋Š” ์ž‘์—…์„ ์ฒ˜๋ฆฌ (setTimeout, DOM event, AJAX ์š”์ฒญ ๋“ฑ)
  3. Task Queue

    1. ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ๋œ Callback ํ•จ์ˆ˜๊ฐ€ ๋Œ€๊ธฐํ•˜๋Š” Queue(FIFO)
  4. Event Loop

    1. Call Stack๊ณผ Task Queue๋ฅผ ์ง€์†์ ์œผ๋กœ ๋ชจ๋‹ˆํ„ฐ๋ง
    2. Call Stack์ด ๋น„์–ด ์žˆ๋Š”์ง€ ํ™•์ธ ํ›„ ๋น„์–ด ์žˆ๋‹ค๋ฉด Task Queue์—์„œ ๋Œ€๊ธฐ ์ค‘์ธ ์˜ค๋ž˜๋œ ์ž‘์—…์„ Call Stack ์œผ๋กœ Push
  • ์ •๋ฆฌ
    • JavaScript๋Š” ํ•œ ๋ฒˆ์— ํ•˜๋‚˜์˜ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” Single Thread ์–ธ์–ด๋กœ ๋™๊ธฐ์  ์ฒ˜๋ฆฌ๋ฅผ ํ•˜์ง€๋งŒ, ๋ธŒ๋ผ์šฐ์ € ํ™˜๊ฒฝ์—์„œ๋Š” Web API์—์„œ ์ฒ˜๋ฆฌ๋œ ์ž‘์—…์ด ์ง€์†์ ์œผ๋กœ Task Queue๋ฅผ ๊ฑฐ์ณ Event Loop์— ์˜ํ•ด Call Stack์— ๋“ค์–ด์™€ ์ˆœ์ฐจ์ ์œผ๋กœ ์‹คํ–‰๋จ์œผ๋กœ์จ ๋น„๋™๊ธฐ ์ž‘์—…์ด ๊ฐ€๋Šฅํ•œ ํ™˜๊ฒฝ์ด ๋œ๋‹ค.

Axios

  • JavaScript์˜ HTTP ์›น ํ†ต์‹ ์„ ์œ„ํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ

  • node ํ™˜๊ฒฝ์€ npm์„ ์ด์šฉํ•ด์„œ ์„ค์น˜ ํ›„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ณ ,

    browser ํ™˜๊ฒฝ์€ CDN์„ ์ด์šฉํ•ด์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Œ

<script src="https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js"></script>
<script>
    axios.get('์š”์ฒญํ•  URL')
        .then(์„ฑ๊ณตํ•˜๋ฉด ์ˆ˜ํ–‰ํ•  ์ฝœ๋ฐฑํ•จ์ˆ˜)
        .catch(์‹คํŒจํ•˜๋ฉด ์ˆ˜ํ–‰ํ•  ์ฝœ๋ฐฑํ•จ์ˆ˜)
</script>
  • get, post ๋“ฑ ์—ฌ๋Ÿฌ method ์‚ฌ์šฉ ๊ฐ€๋Šฅ

  • then ์„ ์ด์šฉํ•ด์„œ ์„ฑ๊ณตํ•˜๋ฉด ์ˆ˜ํ–‰ํ•  ๋กœ์ง์„ ์ž‘์„ฑ

  • catch ๋ฅผ ์ด์šฉํ•ด์„œ ์‹คํŒจํ•˜๋ฉด ์ˆ˜ํ–‰ํ•  ๋กœ์ง์„ ์ž‘์„ฑ

  • Axios ์‹ค์Šต

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>Document</title>
    </head>
    <body>
        <button>์•ผ์˜น</button>
    
        <script src="https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js"></script>
    
        <script>
            console.log('๊ณ ์–‘์ด๋Š” ์•ผ์˜น');
            const catImageSearchURL = 'https://api.thecatapi.com/v1/images/search'
            const btn = document.querySelector('button')
    
            btn.addEventListener('click', function() {
                axios.get(catImageSearchURL)
                    .then((response) => {
                        imgElem = document.createElement('img')
                        imgElem.setAttribute('src', response.data[0].url)
                        document.body.appendChild(imgElem)
                    })
                    .catch((error) => {
                        console.log('์‹คํŒจํ–‡๋‹ค์˜น');
                    })
                    console.log('์•ผ์˜น์•ผ์˜น');
            })
        </script>
    
    </body>
    </html>
  • ์ •๋ฆฌ

    • axios๋Š” ๋น„๋™๊ธฐ๋กœ ๋ฐ์ดํ„ฐ ํ†ต์‹ ์„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•˜๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ
    • ๊ฐ™์€ ๋ฐฉ์‹์œผ๋กœ Django REST API๋กœ ์š”์ฒญ์„ ๋ณด๋‚ด์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›์•„์˜จ ํ›„ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์Œ

Callback๊ณผ Promise

  • ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ์˜ ํ•ต์‹ฌ์€ Web API๋กœ ๋“ค์–ด์˜ค๋Š” ์ˆœ์„œ๊ฐ€ ์•„๋‹ˆ๋ผ ์ž‘์—…์ด ์™„๋ฃŒ๋˜๋Š” ์ˆœ์„œ์— ๋”ฐ๋ผ ์ฒ˜๋ฆฌ ํ•œ๋‹ค๋Š” ๊ฒƒ!

  • ๊ฐœ๋ฐœ์ž ์ž…์žฅ์—์„œ ์ฝ”๋“œ์˜ ์‹คํ–‰ ์ˆœ์„œ๊ฐ€ ๋ถˆ๋ช…ํ™•ํ•˜๋‹ค๋Š” ๋‹จ์ ์ด ์žˆ์Œ

    • ์–ด๋–ป๊ฒŒ ํ•ด๊ฒฐํ• ๊นŒ?

      โ‡’ ์ฝœ๋ฐฑ ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์ž!!!


Callback Function (์ฝœ๋ฐฑ ํ•จ์ˆ˜)

  • ๋‹ค๋ฅธ ํ•จ์ˆ˜์˜ ์ธ์ž๋กœ ์ „๋‹ฌ๋˜๋Š” ํ•จ์ˆ˜ ๋ฅผ ์ฝœ๋ฐฑ ํ•จ์ˆ˜๋ผ๊ณ  ํ•œ๋‹ค.
  • ๋น„๋™๊ธฐ์—๋งŒ ์‚ฌ์šฉ๋˜๋Š” ํ•จ์ˆ˜๊ฐ€ ์•„๋‹ˆ๋ฉฐ ๋™๊ธฐ, ๋น„๋™๊ธฐ ์ƒ๊ด€์—†์ด ์‚ฌ์šฉ ๊ฐ€๋Šฅ
  • ์‹œ๊ฐ„์ด ๊ฑธ๋ฆฌ๋Š” ๋น„๋™๊ธฐ ์ž‘์—…์ด ์™„๋ฃŒ๋œ ํ›„ ์‹คํ–‰ํ•  ์ž‘์—…์„ ๋ช…์‹œํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ ๋˜๋Š” ์ฝœ๋ฐฑ ํ•จ์ˆ˜๋ฅผ ๋น„๋™๊ธฐ ์ฝœ๋ฐฑ (asynchronous callback) ์ด๋ผ ๋ถ€๋ฆ„
const btn = document.querySelector('button')
btn.addEventListener('click', () => {
    alert('Completed')
})
  • ์ฝœ๋ฐฑ ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ 
    • ๋ช…์‹œ์ ์ธ ํ˜ธ์ถœ์ด ์•„๋‹Œ ํŠน์ •ํ•œ ์กฐ๊ฑด ํ˜น์€ ํ–‰๋™์— ์˜ํ•ด ํ˜ธ์ถœ๋˜๋„๋ก ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์Œ
    • โ€œ์š”์ฒญ์ด ๋“ค์–ด์˜ค๋ฉดโ€, โ€œ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉดโ€, โ€œ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›์•„์˜ค๋ฉดโ€ ๋“ฑ์˜ ์กฐ๊ฑด์œผ๋กœ ์ดํ›„ ๋กœ์ง์„ ์ œ์–ดํ•  ์ˆ˜ ์žˆ์Œ
    • ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ๋ฅผ ์ˆœ์ฐจ์ ์œผ๋กœ ๋™์ž‘ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•จ
    • ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ๋ฅผ ์œ„ํ•ด์„ ใ„ด ์ฝœ๋ฐฑ ํ•จ์ˆ˜์˜ ํ˜•ํƒœ๊ฐ€ ๋ฐ˜๋“œ์‹œ ํ•„์š”ํ•จ
  • ์ฝœ๋ฐฑ ํ•จ์ˆ˜๋Š” ๋น„๋™๊ธฐ ์ž‘์—…์„ ์ˆœ์ฐจ์ ์œผ๋กœ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•˜๋Š” ๋ฐ˜๋“œ์‹œ ํ•„์š”ํ•œ ๋กœ์ง์ด์ง€๋งŒ, ์ฝœ๋ฐฑ ์ง€์˜ฅ์€ ๋ฐ˜๋“œ์‹œ ๋‚˜ํƒ€๋‚˜๋Š” ๋ฌธ์ œ
    • ์ฝ”๋“œ์˜ ๊ฐ€๋…์„ฑ์„ ํ•ด์นจ
    • ์œ ์ง€ ๋ณด์ˆ˜๊ฐ€ ์–ด๋ ค์›€

Promise (ํ”„๋กœ๋ฏธ์Šค)

  • Callback Hell ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ๋“ฑ์žฅํ•œ ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ๋ฅผ ์œ„ํ•œ ๊ฐ์ฒด
  • โ€œ์ž‘์—…์ด ๋๋‚˜๋ฉด ์‹คํ–‰์‹œ์ผœ์ค„๊ฒŒโ€๋ผ๋Š” ์•ฝ์†(promise)
  • ๋น„๋™๊ธฐ ์ž‘์—…์˜ ์™„๋ฃŒ ๋˜๋Š” ์‹คํŒจ๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ๊ฐ์ฒด
  • Promise ๊ธฐ๋ฐ˜์˜ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋ฐ”๋กœ ์ด์ „์— ์‚ฌ์šฉํ•œ Axios ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ
    • ์„ฑ๊ณต์— ๋Œ€ํ•œ ์•ฝ์† then()
    • ์‹คํŒจ์— ๋Œ€ํ•œ ์•ฝ์† catch()
  • then(callback)
    • ์š”์ฒญํ•œ ์ž‘์—…์ด ์„ฑ๊ณตํ•˜๋ฉด callback ์‹คํ–‰
    • callback์€ ์ด์ „ ์ž‘์—…์˜ ์„ฑ๊ณต ๊ฒฐ๊ณผ๋ฅผ ์ธ์ž๋กœ ์ „๋‹ฌ ๋ฐ›์Œ
  • catch(callback)
    • then()์ด ํ•˜๋‚˜๋ผ๋„ ์‹คํŒจํ•˜๋ฉด callback ์‹คํ–‰
    • callback์€ ์ด์ „ ์ž‘์—…์˜ ์‹คํŒจ ๊ฐ์ฒด๋ฅผ ์ธ์ž๋กœ ์ „๋‹ฌ ๋ฐ›์Œ
  • then๊ณผ catch ๋ชจ๋‘ ํ•ญ์ƒ promise ๊ฐ์ฒด๋ฅผ ๋ฐ˜ํ™˜. ์ฆ‰, ๊ณ„์†ํ•ด์„œ chaining์„ ํ•  ์ˆ˜ ์žˆ์Œ
  • axios๋กœ ์ฒ˜๋ฆฌํ•œ ๋น„๋™๊ธฐ ๋กœ์ง์ด ํ•ญ์ƒ promise ๊ฐ์ฒด๋ฅผ ๋ฐ˜ํ™˜. ๊ทธ๋ž˜์„œ then์„ ๊ณ„์† ์ด์–ด ๋‚˜๊ฐ€๋ฉด์„œ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์—ˆ๋˜ ๊ฒƒ
// promise ๋ฐฉ์‹

work1()
    .then((result1) => {
        // work2
        return result2
    })
    .then((result2) => {
        // work3
        return result3
    })
    .catch((error) => {
        // error handling
    })
  • promise ๋ฐฉ์‹์€ ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ๋ฅผ ์œ„ํ•ด ๋งˆ์น˜ ์ผ๋ฐ˜์ ์œผ๋กœ ์œ„์—์„œ ์•„๋ž˜๋กœ ์ ๋Š” ๋ฐฉ์‹์ฒ˜๋Ÿผ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์Œ

Promise๊ฐ€ ๋ณด์žฅํ•˜๋Š” ๊ฒƒ ( vs ๋น„๋™๊ธฐ ์ฝœ๋ฐฑ )

  • ๋น„๋™๊ธฐ ์ฝœ๋ฐฑ ์ž‘์„ฑ ์Šคํƒ€์ผ๊ณผ ๋‹ฌ๋ฆฌ Promise๊ฐ€ ๋ณด์žฅํ•˜๋Š” ํŠน์ง•
  1. callback ํ•จ์ˆ˜๋Š” JavaScript์˜ Event Loop๊ฐ€ ํ˜„์žฌ ์‹คํ–‰ ์ค‘์ธ Call Stack์„ ์™„๋ฃŒํ•˜๊ธฐ ์ด์ „์—๋Š” ์ ˆ๋Œ€ ํ˜ธ์ถœ๋˜์ง€ ์•Š์Œ
    1. Promise callback ํ•จ์ˆ˜๋Š” Event Queue์— ๋ฐฐ์น˜๋˜๋Š” ์—„๊ฒฉํ•œ ์ˆœ์„œ๋กœ ํ˜ธ์ถœ๋จ
  2. ๋น„๋™๊ธฐ ์ž‘์—…์ด ์„ฑ๊ณตํ•˜๊ฑฐ๋‚˜ ์‹คํŒจํ•œ ๋’ค์— .then() ๋ฉ”์„œ๋“œ๋ฅผ ์ด์šฉํ•˜์—ฌ ์ถ”๊ฐ€ํ•œ ๊ฒฝ์šฐ์—๋„ 1๋ฒˆ๊ณผ ๋˜‘๊ฐ™์ด ๋™์ž‘
  3. .then() ์„ ์—ฌ๋Ÿฌ ๋ฒˆ ์‚ฌ์šฉํ•˜์—ฌ ์—ฌ๋Ÿฌ ๊ฐœ์˜ callback ํ•จ์ˆ˜๋ฅผ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์Œ (Chaining)
    1. ๊ฐ๊ฐ์˜ callback์€ ์ฃผ์–ด์ง„ ์ˆœ์„œ๋Œ€๋กœ ํ•˜๋‚˜ํ•˜๋‚˜ ์‹คํ–‰ํ•˜๊ฒŒ ๋จ
    2. Chaining์€ Promise์˜ ๊ฐ€์žฅ ๋›ฐ์–ด๋‚œ ์žฅ์ 

AJAX

  • ๋น„๋™๊ธฐ ํ†ต์‹ ์„ ์ด์šฉํ•˜์—ฌ ํ™”๋ฉด ์ „์ฒด๋ฅผ ์ƒˆ๋กœ๊ณ ์นจ ํ•˜์ง€ ์•Š์•„๋„ ์„œ๋ฒ„๋กœ ์š”์ฒญ์„ ๋ณด๋‚ด๊ณ , ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›์•„ ํ™”๋ฉด์˜ ์ผ๋ถ€๋ถ„๋งŒ ์—…๋ฐ์ดํŠธ ๊ฐ€๋Šฅ
  • ์ด๋Ÿฌํ•œ โ€˜๋น„๋™๊ธฐ ํ†ต์‹  ์›น ๊ฐœ๋ฐœ ๊ธฐ์ˆ โ€™์„ Asynchronous Javascript And XML(AJAX) ๋ผ ํ•จ
  • AJAX์˜ ํŠน์ง•
    • ํŽ˜์ด์ง€ ์ƒˆ๋กœ๊ณ ์นจ ์—†์ด ์„œ๋ฒ„์— ์š”์ฒญ
    • ์„œ๋ฒ„๋กœ๋ถ€ํ„ฐ ์‘๋‹ต(๋ฐ์ดํ„ฐ)๋ฅผ ๋ฐ›์•„ ์ž‘์—…์„ ์ˆ˜ํ–‰
  • ์ด๋Ÿฌํ•œ ๋น„๋™๊ธฐ ์›น ํ†ต์‹ ์„ ์œ„ํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ค‘ ํ•˜๋‚˜๊ฐ€ Axios

ES (ECMAScript)

  • Ecma International์ด ECMA-262 ๊ธฐ์ˆ  ๊ทœ๊ฒฉ์— ๋”ฐ๋ผ ์ •์˜ํ•˜๊ณ  ์žˆ๋Š” ํ‘œ์ค€ํ™”๋œ ์Šคํฌ๋ฆฝํŠธ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด
  • ES6 ๋Š” 2015๋…„, ES5 ๋Š” 2009๋…„์— ์ถœ์‹œ (์ˆซ์ž๋Š” ๋ฒ„์ „์„ ์˜๋ฏธํ•จ)

ES6 ๋ฌธ๋ฒ• ์ •๋ฆฌ

1. let, const

  • let
    • ๋ธ”๋ก์Šค์ฝ”ํ”„, ์žฌํ• ๋‹น ๊ฐ€๋Šฅ, ์žฌ์„ ์–ธ ๋ถˆ๊ฐ€
    • ๋ณ€์ˆ˜ ์„ ์–ธ ํ‚ค์›Œ๋“œ
  • const
    • ๋ธ”๋ก์Šค์ฝ”ํ”„, ์žฌํ• ๋‹น ๋ถˆ๊ฐ€, ์žฌ์„ ์–ธ ๋ถˆ๊ฐ€
    • ์ƒ์ˆ˜ ์„ ์–ธ ํ‚ค์›Œ๋“œ

2. ํ…œํ”Œ๋ฆฟ ๋ฆฌํ„ฐ๋Ÿด

  • ``(back tick) ์œผ๋กœ ์‚ฌ์šฉ
  • ${} ํ˜•์‹์„ ํ†ตํ•ด ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ํ‘œํ˜„์‹ ์‚ฌ์šฉ ๊ฐ€๋Šฅ
// ES5 ๋ฌธ๋ฒ•์œผ๋กœ Hello, World! ์ถœ๋ ฅํ•˜๊ธฐ
var str1 = ', ';
var str2 = 'World!';
var str3 = 'Hello' + str1 + str2;
// ES6 ๋ฌธ๋ฒ•์œผ๋กœ Hello, World! ์ถœ๋ ฅํ•˜๊ธฐ
let str1 = ', ';
let str2 = 'World!';
let str3 = `Hello${str1} ${str2}`;

3. ๊ฐ์ฒด ๋ฆฌํ„ฐ๋Ÿด

๐Ÿ’ฅ ๊ฐ์ฒด

  • ๊ฐ์ฒด๋Š” JavaScript์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ํ‘œํ˜„ํ•˜๋Š” ๋ฐฉ์‹ ์ค‘ ํ•˜๋‚˜
  • key, value ์Œ์œผ๋กœ ๊ตฌ์„ฑ๋จ
let example = {
    'name': '๋ฐ•์‹œํ˜„',
    'age': 20
}

// ํ”„๋กœํผํ‹ฐ   : 'name': '๋ฐ•์‹œํ˜„' ๊ณผ 'age': 20
// ํ‚ค (key)   : ํ”„๋กœํผํ‹ฐ ๋ช…
// ๊ฐ’ (value) : ํ”„๋กœํผํ‹ฐ ๊ฐ’
  • JavaScript๋Š” prototype ๊ธฐ๋ฐ˜ ๊ฐ์ฒด์ง€ํ–ฅ ์–ธ์–ด๋กœ, ๋‹ค์–‘ํ•œ ๊ฐ์ฒด ์ƒ์„ฑ ๋ฐฉ๋ฒ• ์ง€์›

    • ๊ฐ์ฒด ๋ฆฌํ„ฐ๋Ÿด
    • Object ์ƒ์„ฑ์ž ํ•จ์ˆ˜
    • ์ƒ์„ฑ์ž ํ•จ์ˆ˜
    • Object.create ๋ฉ”์„œ๋“œ
    • ํด๋ž˜์Šค (ES6)
  • ๊ฐ์ฒด ๋ฆฌํ„ฐ๋Ÿด

    • ๊ฐ์ฒด ์ƒ์„ฑ ๋ฐฉ์‹ ์ค‘ ๊ฐ€์žฅ ์ผ๋ฐ˜์ ์ด๊ณ  ๊ฐ„๋‹จํ•จ

      • ์ปจํ…์ธ ๋ฅผ ๊ทธ๋Œ€๋กœ ๋Œ€์ž…ํ•˜๋Š” ๋ฐฉ๋ฒ•
    • ๊ฐ์ฒด ๋ฆฌํ„ฐ๋Ÿด ๋ฐฉ์‹์„ ํ†ตํ•ด Person์ด๋ž€ ๊ฐ์ฒด ์ƒ์„ฑํ•ด๋ณด๋ฉด

      let person = {
        name: ['Sihyun', 'Park'],
        age: 29,
        gender: 'male',
        interests: ['music', 'movie'],
        introduce: function() {
          console.log(`${this.name[0]} ${this.name[1]} is ${this.age} years old`);
        },
        greeting: function() {
          console.log(`Hi! I'm ${this.name[0]}.`);
        }
      };
      • ์œ„ ๊ฐ์ฒด์—์„œ introduce์™€ greeting ์€ ํ•จ์ˆ˜. ๊ฐ์ฒด๋Š” property๋กœ ์ผ๋ฐ˜ ๋ณ€์ˆ˜ ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ํ•จ์ˆ˜ ๋˜ํ•œ ๊ฐ€์งˆ ์ˆ˜ ์žˆ์Œ
        • ์ด ํ•จ์ˆ˜๋ฅผ ๋ฉ”์„œ๋“œ ๋ผ๊ณ  ํ‘œํ˜„!! (๋ฉ”์„œ๋“œ๋Š” ๊ฐ์ฒด์— ๋ฌถ์ธ ํ•จ์ˆ˜)
  • ํ”„๋กœํผํ‹ฐ ์ ‘๊ทผ

    • ์„ ์–ธํ•œ ํ”„๋กœํผํ‹ฐ์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์€ 2๊ฐ€์ง€

      1. ๋งˆ์นจํ‘œ ํ‘œ๊ธฐ๋ฒ•
        • person.name, person.age ์™€ ๊ฐ™์ด ์ ‘๊ทผ
      2. ๋Œ€๊ด„ํ˜ธ ํ‘œ๊ธฐ๋ฒ•
        • person['name'] , person['age'] ์™€ ๊ฐ™์ด ์ ‘๊ทผ
        • ์ด ๊ฒฝ์šฐ โ€˜โ€™(๋”ฐ์˜ดํ‘œ) ์•ˆ์— ๊ฐ์‹ธ์ฃผ์ง€ ์•Š์œผ๋ฉด name์ด๋ž€ ๋ณ€์ˆ˜์˜ ๊ฐ’์œผ๋กœ ์ธ์‹ํ•˜๋ฏ€๋กœ ๊ผญ ๊ฐ์‹ธ๊ธฐ
    • ๋ฉ”์„œ๋“œ๋„ ๋™์ผ

      person.introduce()
                  // Sihyun Park is 29 years old.
      
      person.greeting()
                  // Hi! I'm Sihyun.
  • ํ”„๋กœํผํ‹ฐ ๊ฐ’ ๊ฐฑ์‹ 

    • ์ด๋ฏธ ์กด์žฌํ•˜๋Š” property์˜ ๊ฐ’์„ ์ˆ˜์ •ํ•˜๋ฉด ๊ฐฑ์‹ ๋จ
    person.name = 'Gyuri'
  • ํ”„๋กœํผํ‹ฐ ๊ฐ’ ์ƒ์„ฑ

    • ์กด์žฌํ•˜์ง€ ์•Š๋Š” property์˜ ๊ฐ’์„ ํ• ๋‹นํ•˜๋ฉด ํ”„๋กœํผํ‹ฐ๊ฐ€ ๋™์ ์œผ๋กœ ์ƒ์„ฑ๋จ
    person.address = 'Suwon' 
  • ํ”„๋กœํผํ‹ฐ ๊ฐ’ ์‚ญ์ œ

    • ์‚ญ์ œํ•˜๊ณ ์ž ํ•˜๋Š” property๋ฅผ delete ํ‚ค์›Œ๋“œ ๋ถ™์—ฌ ์‚ฌ์šฉ
    • ์—†๋Š” property์— ์ ‘๊ทผ ์‹œ ์—๋Ÿฌ ์—†์ด ๋ฌด์‹œ๋จ
    delete person.age
  • ๊ฐ์ฒด ๋ฆฌํ„ฐ๋Ÿด ์ •๋ฆฌ

    • ์ด์ „๋ณด๋‹ค ํ›จ์”ฌ ๊ฐ„๊ฒฐํ•ด์ง„ ์ฝ”๋“œ๋กœ ๊ฐ์ฒด ์„ ์–ธ
    • ๋ฉ”์†Œ๋“œ์— :(์ฝœ๋ก ) ์ด๋‚˜ function์„ ๋ถ™์ด์ง€ ์•Š์•„๋„ ๋จ
    • ํ•จ์ˆ˜๋ช…์ด ๊ฒน์น˜๋Š” ๊ฒฝ์šฐ ํ•œ ๋ฒˆ๋งŒ ์‚ฌ์šฉ ๊ฐ€๋Šฅ
    • ๊ฐ์ฒด์˜ ํ”„๋กœํผํ‹ฐ๋ฅผ ๋™์ ์œผ๋กœ ์ƒ์„ฑํ•˜๋ ค๋ฉด ๊ฐ์ฒด ๋ฆฌํ„ฐ๋Ÿด ๋ฐ–์—์„œ [text + 1]๊ณผ ๊ฐ™์ด ์„ ์–ธํ–ˆ์–ด์•ผ ํ–ˆ๋Š”๋ฐ, ES6๋ถ€ํ„ฐ๋Š” ๊ฐ์ฒด ์•ˆ์—์„œ ๋ฐ”๋กœ ์†์„ฑ์œผ๋กœ ์‚ฌ์šฉ ๊ฐ€๋Šฅ
    const myFunc = function() {
        console.log('myFunc')
    }
    
    const text = 'TEXT'
    
    const obj = {
        inside() {
            console.log('๊ฐ์ฒด ์•ˆ์— ๋ฐ”๋กœ ํ•จ์ˆ˜ ์„ ์–ธ')
        },
        myFunc,
        [text + 1]: '๋ฐ•์‹œํ˜„'
    }
    
    obj.inside()  // ์ถœ๋ ฅ๊ฐ’ : ๊ฐ์ฒด ์•ˆ์— ๋ฐ”๋กœ ํ•จ์ˆ˜ ์„ ์–ธ
    obj.myFunc()  // ์ถœ๋ ฅ๊ฐ’ : myFunc
    console.log(obj.TEXT1)   // ์ถœ๋ ฅ๊ฐ’ : ๋ฐ•์‹œํ˜„

4. ํ™”์‚ดํ‘œ ํ•จ์ˆ˜

  • ํ•จ์ˆ˜ ํ‘œํ˜„์‹์„ ํ™”์‚ดํ‘œ ํ•จ์ˆ˜๋กœ ํ‘œํ˜„ ๊ฐ€๋Šฅ
  • ํ•จ์ˆ˜๋ฅผ ๊ฐ„๊ฒฐํ•˜๊ฒŒ ๋‚˜ํƒ€๋‚ผ ์ˆ˜ ์žˆ๊ฒŒ ๋˜์–ด ๊ฐ€๋…์„ฑ ๋ฐ ์œ ์ง€๋ณด์ˆ˜์„ฑ ์ƒ์Šน
  • ํ•จ์ˆ˜์˜ ๋ณธ๋ฌธ(body)์— return๋งŒ ์žˆ๋Š” ๊ฒฝ์šฐ ํ™”์‚ดํ‘œ ํ•จ์ˆ˜๋Š” return๊ณผ {}๋ฅผ ์ƒ๋žต ๊ฐ€๋Šฅ(๋‹จ, ๊ฐ™์ด ์ƒ๋žตํ•ด์•ผํ•จ)
  • return ๋ฌธ์—์„œ ์†Œ๊ด„ํ˜ธ๋Š” ์‚ฌ์šฉ ๊ฐ€๋Šฅ
// ES5
function plusFunc(a, b) {
    return a + b
}

// ES6
// ํ•จ์ˆ˜ ํ‘œํ˜„์‹ (ํ™”์‚ดํ‘œ ํ•จ์ˆ˜)
const plusFunc = (a, b) => {
    return a + b
}
// ํ•จ์ˆ˜ ํ‘œํ˜„์‹ (ํ™”์‚ดํ‘œ ํ•จ์ˆ˜, ์ƒ๋žตํ˜•)
const plusFunc = (a, b) => a + b

5. ๊ตฌ์กฐ ๋ถ„ํ•ด ํ• ๋‹น

  • ๊ฐ์ฒด๋‚˜ ๋ฐฐ์—ด์—์„œ ์‚ฌ์šฉ
  • ๊ฐ’์„ ํ•ด์ฒดํ•œ ํ›„ ๊ฐœ๋ณ„ ๊ฐ’์„ ๋ณ€์ˆ˜์— ์ƒˆ๋กœ ํ• ๋‹นํ•˜๋Š” ๊ณผ์ •
// ๋ฐฐ์—ด์—์„œ ์‚ฌ์šฉ
const arr = [1, 2, 3]
const [one, two, three] = arr

one // 1
two // 2
three // 3

////////////////////////////////////
// ๊ฐ์ฒด์—์„œ ์‚ฌ์šฉ
const obj = {
    firstName: '์‹œํ˜„',
    lastName: '๋ฐ•'
}

const { firstName, lastName } = obj
firstName // ์‹œํ˜„
lastName // ๋ฐ•

6. Promise

  • JavaScript์—์„œ๋Š” ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ๋ฅผ ๊ธฐ์กด์—๋Š” ์ฝœ๋ฐฑ ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•œ ์ฝœ๋ฐฑ ํŒจํ„ด์œผ๋กœ ํ•จ
    • ์ด๋Š” ์ฝœ๋ฐฑ์ง€์˜ฅ ๋ฐœ์ƒ์‹œํ‚ด
  • ์ด๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด Promise ๋„์ž…
  • Promise ํ›„์†์ฒ˜๋ฆฌ ๋ฉ”์„œ๋“œ๋ฅผ ์ด์šฉํ•ด ํšจ์œจ์  ์—๋Ÿฌ ์ฒ˜๋ฆฌ ๊ฐ€๋Šฅ

7. Class

  • JavaScript๋Š” ํ”„๋กœํ† ํƒ€์ž… ๊ธฐ๋ฐ˜์˜ ๊ฐ์ฒด ์ง€ํ–ฅ ์–ธ์–ด
  • ํด๋ž˜์Šค ๊ธฐ๋ฐ˜์˜ ๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๊ฐ€๋Šฅํ•˜๋„๋ก Class ํ‚ค์›Œ๋“œ ๋„์ž…
  • JavaScript์—์„œ Class๋Š” ๋‚ด๋ถ€์ ์œผ๋กœ ํ”„๋กœํ† ํƒ€์ž…์„ ์ด์šฉํ•ด ๋งŒ๋“ค์–ด์ง
  • ํ˜ธ์ด์ŠคํŒ…์ด let , const ํ‚ค์›Œ๋“œ์ฒ˜๋Ÿผ ๋™์ž‘

8. String Method (includes, startsWith, endsWith)

  • includes : ํฌํ•จ ์—ฌ๋ถ€
  • startsWith : ์‹œ์ž‘ํ•˜๋Š”์ง€
  • endsWith : ๋๋‚˜๋Š”์ง€
  • boolean ํƒ€์ž…์„ return ํ•จ
const str = 'Hello World Sihyun'
str.includes("Sihyun")   // true
str.startsWith("Hello")  // true
str.endsWith("yun")      // true

9. Multi-line String

  • ๊ณผ๊ฑฐ์— ๋ฌธ์ž์—ด์ด ๋ผ์ธ์„ ๋„˜์–ด๊ฐ„๋‹ค๋ฉด \\n ๊ณผ ๋ง์…ˆ ์—ฐ์‚ฐ์ž ํ•„์š”ํ–ˆ์Œ
// ES5
var str = 'asdhasfhfsahsfhfshasfhsfahsfahsfahasfh.\\n' + 
'mxmxmxmxmxmxmxmmxmxmxmxmxmmxmxmxmxmxm.\\n'
  • ๋ฐฑํ‹ฑ์„ ์‚ฌ์šฉํ•˜๊ฒŒ ๋˜๋ฉฐ ์—ฌ๋Ÿฌ ์ค„์˜ ๋ฌธ์ž์—ด ๊ด€๋ฆฌ๊ฐ€ ์šฉ์ดํ•ด์ง
// ES6
let str = `asdhasfhfsahsfhfshasfhsfahsfahsfahasfh
mxmxmxmxmxmxmxmmxmxmxmxmxmmxmxmxmxmxm`;

10. Default Parameter

  • ํ•จ์ˆ˜์˜ ๋งค๊ฐœ๋ณ€์ˆ˜ ์ดˆ๊ธฐํ™”

    • ๊ธฐ์กด์—๋Š” ๋‚ด๋ถ€ ์ž‘์—…์ด ํ•„์š”
    • ES6์—์„œ๋Š” ํ•„์š”ํ•˜์ง€ ์•Š์Œ
    // ES5
    function myFunc(a, b) {
        var a = a || 100
        var b = b || 200
        return a + b
    }
    console.log(myFunc(100))    // 300
    
    // ES6
    const myFunc = ( a = 100, b = 200 ) => a + b
    console.log(myFunc())       // 300

11. Module

  • ๋ชจ๋“ˆ์ด๋ž€?
    • ์žฌ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•œ ์ฝ”๋“œ ์กฐ๊ฐ
    • ์„ธ๋ถ€์‚ฌํ•ญ์€ ์บก์Šํ™”, API ๋ถ€๋ถ„๋งŒ ์™ธ๋ถ€์— ๋…ธ์ถœ
  • type์— module์„ ์ถ”๊ฐ€์‹œํ‚ค๊ณ  ํ™•์žฅ์ž๋ฅผ mjs๋กœ ๋ณ€๊ฒฝํ•˜์—ฌ ์‚ฌ์šฉ
  • ๋ชจ๋“ˆ์€ ๋ชจ๋“ˆ ์Šค์ฝ”ํ”„ ๊ฐ€์ง€๋ฉฐ, import์™€ export ํ‚ค์›Œ๋“œ๋ฅผ ์ด์šฉํ•˜์—ฌ ์‚ฌ์šฉ
<script type="module" src="lib.mjs"></script>