πŸ“† 2025.04.21 ‐ JavaScript Function Deep Dive [λ©‹μŸμ΄μ‚¬μžμ²˜λŸΌλΆ€νŠΈμΊ ν”„ ν”„λ‘ νŠΈμ—”λ“œ13κΈ°]

rogieΒ·2025λ…„ 4μ›” 21일

likelion-posting

λͺ©λ‘ 보기
6/10

🧠 배운 점 & 정리

  • First class object

    • 일급 객체
      • λ³€μˆ˜ , λ°°μ—΄ μ—˜λ¦¬λ¨ΌνŠΈ , λ‹€λ₯Έ 객체의 ν”„λ‘œνΌν‹°μ— ν• λ‹Ή 될 수 μžˆλ‹€
        image
      • ν•¨μˆ˜μ˜ 인자둜 전달 될 수 μžˆλ‹€
      • ν•¨μˆ˜μ˜ κ²°κ³Ό κ°’μœΌλ‘œ λ°˜ν™˜ 될 수 μžˆλ‹€
      • λ¦¬ν„°λŸ΄λ‘œ 생성될 수 μžˆλ‹€
      • λ™μ μœΌλ‘œ μƒμ„±λœ ν”„λ‘œνΌν‹°λ₯Ό κ°€μ§ˆ 수 μžˆλ‹€
    • μžλ°”μŠ€ν¬λ¦½νŠΈμ˜ ν•¨μˆ˜(function) λŠ” 일급객체 이닀

      ν•¨μˆ˜ == 호좜 + 객체
    • ν•¨μˆ˜κ°€ 일급 κ°μ²΄λΌμ„œ κ°€λŠ₯ν•œ 일
      • 콜백 ν•¨μˆ˜ (Callback function)
        • λ‹€λ₯Έ ν•¨μˆ˜μ— 인자둜 μ „λ‹¬λ˜μ–΄ μ–΄λ–€ μž‘μ—…μ˜ 결과둜 ν˜ΈμΆœλ˜λŠ” ν•¨μˆ˜
      • κ³ μ°¨ ν•¨μˆ˜ (Higher order function)
        • ν•¨μˆ˜λ₯Ό 인자둜 λ°›κ±°λ‚˜ λ°˜ν™˜ ν•˜λŠ” ν•¨μˆ˜

  • ν•¨μˆ˜ 생성

    • μ„ μ–Έλ¬Έ

      // κΈ°λͺ…ν•¨μˆ˜ addλΌλŠ” 이름이 있음
      function add(x, y){
        const result = x + y;
        return result;
      }
      // 읡λͺ…ν•¨μˆ˜, ν•¨μˆ˜ 이름이 μ—†λ‹€
      function () {}
      • function ν‚€μ›Œλ“œλ‘œ μ‹œμž‘ν•˜λŠ” ν•¨μˆ˜ μ •μ˜
      • ν•¨μˆ˜ 이름
        • μœ νš¨ν•œ μ‹λ³„μžμ΄μ–΄μ•Ό 함
        • μƒλž΅ κ°€λŠ₯
      • λ§€κ°œλ³€μˆ˜ λͺ©λ‘
        • μ‰Όν‘œλ‘œ κ΅¬λΆ„λœ λ§€κ°œλ³€μˆ˜ λͺ©λ‘κ³Ό κ·Έ λ§€κ°œλ³€μˆ˜ λͺ©λ‘μ„ λ‘˜λŸ¬μ‹Έκ³  μžˆλŠ” κ΄„ν˜Έ
        • λ§€κ°œλ³€μˆ˜λŠ” μƒλž΅ κ°€λŠ₯ , κ΄„ν˜ΈλŠ” ν•„μˆ˜
      • ν•¨μˆ˜ λ³Έλ¬Έ
        • μ€‘κ΄„ν˜Έλ‘œ λ‘˜λŸ¬μ‹Έμ—¬ μžˆλŠ” μžλ°”μŠ€ν¬λ¦½νŠΈ ꡬ문
        • 본문은 μƒλž΅ κ°€λŠ₯ , μ€‘κ΄„ν˜ΈλŠ” ν•„μˆ˜
    • ν‘œν˜„μ‹

      • ν•¨μˆ˜ μ •μ˜λ₯Ό λ³€μˆ˜μ— ν• λ‹Ή

        • λ³€μˆ˜λͺ…을 ν•¨μˆ˜λͺ…μ²˜λŸΌ μ‚¬μš©
      • λ³€μˆ˜μ— 읡λͺ…ν•¨μˆ˜λ₯Ό μ§€μ •

        const add = function (x,y){
          const result = x + y;
          return result;
        };
        add(10 , 20)
      • λ³€μˆ˜μ— κΈ°λͺ…ν•¨μˆ˜λ₯Ό μ§€μ •

        • λ³€μˆ˜λͺ…을 ν•¨μˆ˜λͺ…μ²˜λŸΌ μ‚¬μš©
        • ν•¨μˆ˜λͺ…을 ν†΅ν•œ 접근은 ν•΄λ‹Ή ν•¨μˆ˜ λ‚΄λΆ€μ—μ„œλ§Œ μ‚¬μš© κ°€λŠ₯ (μž¬κ·€ ν•¨μˆ˜)
        const f = function factorial(n){
          if( n == 1 ){
          return 1
          }
          return n * factorial(n - 1);
        };
        console.log(f(5)); // 
        console.log(factorial(5)); // μ •μ‚­ μž‘λ™ μ•ˆλ¨
    • Function μƒμ„±μž ν•¨μˆ˜

      • ν•¨μˆ˜ 객체λ₯Ό μƒμ„±ν•΄μ„œ λ°˜ν™˜
        const add = new Function('x', 'y', 'let result = x + y; return result;');
        //    λ³€μˆ˜ = μƒˆλ‘œμš΄ ν•¨μˆ˜ (λ§€κ°œλ³€μˆ˜1, λ§€κ°œλ³€μˆ˜ 2, μ‹€ν–‰ν•  μ½”λ“œ)
      • 가독성이 μ•ˆ μ’‹μ•„μ„œ μ§„μ§œ 잘 μ•ˆμ“°μž„
    • ν™”μ‚΄ν‘œ ν•¨μˆ˜ ν‘œν˜„μ‹

      • ν•¨μˆ˜ ν‘œν˜„μ‹μ˜ λŒ€μ•ˆμœΌλ‘œ κ°„κ²°ν•˜κ²Œ ν•¨μˆ˜ μ •μ˜
      • 읡λͺ… ν•¨μˆ˜λ‘œλ§Œ μ •μ˜ κ°€λŠ₯
      • μ‹€ν–‰ν•  μ½”λ“œκ°€ ν•˜λ‚˜λ§Œ μžˆλ‹€λ©΄ ν•¨μˆ˜ 본문의 μ€‘κ΄„ν˜Έ μƒλž΅ κ°€λŠ₯
      • ν•¨μˆ˜ 본문의 μ€‘κ΄„ν˜Έκ°€ μƒλž΅λ  경우 ν•¨μˆ˜μ˜ μ½”λ“œκ°€ μžλ™μœΌλ‘œ λ¦¬ν„΄κ°’μœΌλ‘œ μ‚¬μš©λ¨
      • 맀개 λ³€μˆ˜κ°€ ν•˜λ‚˜λ§Œ μžˆλ‹€λ©΄ λ§€κ°œλ³€μˆ˜μ˜ κ΄„ν˜Έ μƒλž΅ κ°€λŠ₯
      // κΈ°μ‘΄ ν•¨μˆ˜
      let add = function (x, y) {
        return x + y;
      };
      
      // ν™”μ‚΄ν‘œ ν•¨μˆ˜
      add = (x, y) => {
        return x + y;
      };
      
      // ν™”μ‚΄ν‘œ ν•¨μˆ˜ μΆ•μ•½ => μ‹€ν–‰ν•  μ½”λ“œκ°€ 단 ν•œκ°œλ©΄ κ°€λŠ₯
      add = (x, y) => x + y;
      
      // add 좜λ ₯λ¬Έ
      console.log(add(10, 20)); // 좜λ ₯μ‹œ 10 + 20 = 30
      // κΈ°μ‘΄ ν•¨μˆ˜
      let add10 = function (x) {
        return x + 10;
      };
      
      // ν™”μ‚΄ν‘œ ν•¨μˆ˜
      add10 = (x) => {
        return x + 10;
      };
      
      // ν™”μ‚΄ν‘œ ν•¨μˆ˜ μΆ•μ•½ => μ‹€ν–‰ν•  μ½”λ“œκ°€ 단 ν•œκ°œλ©΄ κ°€λŠ₯
      add10 = (x) => x + 10;
      add10 = x => x + 10; // 맀개 λ³€μˆ˜κ°€ ν•˜λ‚˜λ§Œ μžˆλ‹€λ©΄ λ§€κ°œλ³€μˆ˜μ˜ κ΄„ν˜Έ μƒλž΅ κ°€λŠ₯
      
      // add10 좜λ ₯λ¬Έ
      console.log(add10(100)); // 100 + 10 = 110

  • ν˜Έμ΄μŠ€νŒ…

    • ν•¨μˆ˜ ν˜Έμ΄μŠ€νŒ…

      • μ„ μ–Έλ¬Έ ν˜•νƒœλ‘œ μ •μ˜ν•œ ν•¨μˆ˜ 의 유효 λ²”μœ„κ°€ μ½”λ“œμ˜ 맨 μ²˜μŒλΆ€ν„° μ‹œμž‘ν•˜ 게 λ˜λŠ” μžλ°”μŠ€ν¬λ¦½νŠΈμ˜ λ™μž‘ 방식
      • νŠΉμ • λΈ”λŸ­μ˜ μ½”λ“œκ°€ μžλ°”μŠ€ν¬λ¦½νŠΈ 엔진에 μ˜ν•΄ μ‹€ν–‰ 되기 전에 ν˜Έμ΄μŠ€νŒ… 단계λ₯Ό κ±°μΉ˜λŠ”λ° μ΄λ•Œ μ„ μ–Έλ¬Έ ν˜•νƒœμ˜ ν•¨μˆ˜κ°€ 생성 λ˜λ―€λ‘œ ν•¨μˆ˜ μ„ μ–Έ μ½”λ“œλ³΄λ‹€ λ¨Όμ € ν˜ΈμΆœν•˜λŠ” μ½”λ“œλ₯Ό μž‘μ„±ν•˜λŠ”κ²Œ κ°€λŠ₯
      console.log("μ‹€ν–‰ μˆœμ„œ 2", add(10, 20));
      
      function add(x, y) {
        return x + y;
      }
      
      console.log("μ‹€ν–‰ μˆœμ„œ 3", add(10, 20));

      image

    • λ³€μˆ˜ ν˜Έμ΄μŠ€νŒ…

      • ν˜Έμ΄μŠ€νŒ… λ‹¨κ³„μ—μ„œ var 둜 μ„ μ–Έν•œ λ³€μˆ˜ 의 경우 μ„ μ–Έλ§Œ 되고 κ·Έ 값은 undefined 둜 μ΄ˆκΈ°ν™” 됨
      • let, const 둜 μ„ μ–Έν•œ λ³€μˆ˜ 의 경우 ν˜Έμ΄μŠ€νŒ… λ‹¨κ³„μ—μ„œ 선언은 λ˜μ§€λ§Œ μ΄ˆκΈ°ν™”κ°€ λ˜μ§€ μ•ŠκΈ° λ•Œλ¬Έμ— μ„ μ–Έ 전에 μ ‘κ·Όν•˜λ©΄ μ—λŸ¬ λ°œμƒ
        (undefined 값도 ν• λ‹Ήλ˜μ§€ μ•Šμ€ μƒνƒœ)
      console.log(a);
      console.log(b); // ReferenceError: Cannot access 'b' before initialization
      console.log(c); // ReferenceError: Cannot access 'c' before initialization
      
      var a = 10; // ν˜Έμ΄μŠ€νŒ… λ‹¨κ³„μ—μ„œ undefinde둜 μ΄ˆκΈ°ν™”κ°€ 돼있음 => κ·Έλž˜μ„œ μ—λŸ¬ μ•ˆλ‚¨
      let b = 20; // ν˜Έμ΄μŠ€νŒ… λ‹¨κ³„μ—μ„œ μ„ μ–Έλ§Œ 되고 μ΄ˆκΈ°ν™”κ°€ μ•ˆλ¨ => κ·Έλž˜μ„œ μ—λŸ¬λ‚¨
      const c = 30; // ν˜Έμ΄μŠ€νŒ… λ‹¨κ³„μ—μ„œ μ„ μ–Έλ§Œ 되고 μ΄ˆκΈ°ν™”κ°€ μ•ˆλ¨ => κ·Έλž˜μ„œ μ—λŸ¬λ‚¨
      
      console.log(a); // μ •μƒμ μœΌλ‘œ 좜λ ₯ 됨
      console.log(b); // μ •μƒμ μœΌλ‘œ 좜λ ₯ 됨
      console.log(c); // μ •μƒμ μœΌλ‘œ 좜λ ₯ 됨
      console.log(add(10, 20)); 
      // TypeError: add is not a function
      // var λ³€μˆ˜λŠ” ν˜Έμ΄μŠ€νŒ…λ˜μ§€λ§Œ μ΄ˆκΈ°ν™”λŠ” μ•ˆλ˜λ―€λ‘œ 이 μ‹œμ μ—μ„œ addλŠ” undefinedμž„
      
      // ν‘œν˜„μ‹ λ°©μ‹μ˜ ν•¨μˆ˜ μ •μ˜
      var add = function (x, y) {
        return x + y;
      };
      
      console.log(add(10, 20)); // μ •μƒμ μœΌλ‘œ 30으둜 좜λ ₯됨
    • TDZ(Temporal Dead Zone)

      • ν˜Έμ΄μŠ€νŒ… λ‹¨κ³„μ—μ„œ λ³€μˆ˜κ°€ μ„ μ–Έλœ 이후 μ‹€μ œ μ΄ˆκΈ°ν™”κ°€ 이루어지기 μ „κΉŒμ§€μ˜ ꡬ간
      • λ³€μˆ˜λ₯Ό μ΄ˆκΈ°ν™” ν•˜κΈ° 이전에 λ³€μˆ˜μ— μ ‘κ·Όν•  수 μ—†λŠ” μΌμ‹œμ μΈ μ˜μ—­μœΌλ‘œ λ¬΄λΆ„λ³„ν•œ λ³€μˆ˜ μ‚¬μš©μ„ 막고 예츑 κ°€λŠ₯ν•œ μ½”λ“œλ₯Ό λ§Œλ“€κΈ° μœ„ν•œ μž₯치
      var add; // ν˜Έμ΄μŠ€νŒ… μ‹œ μ„ μ–Έλ˜κ³  undefined둜 μ΄ˆκΈ°ν™”λ¨
      
      // λ³Έ μ½”λ“œ μ‹€ν–‰ 단계 (아직 ν•¨μˆ˜ ν• λ‹Ή μ „)
      console.log(add); 
      // 좜λ ₯ κ²°κ³Ό: undefined 
      // μ—λŸ¬λŠ” μ•„λ‹˜. λ‹€λ§Œ 아직 ν•¨μˆ˜κ°€ μ•„λ‹˜ => μ‹€ν–‰ λΆˆκ°€λŠ₯
      
      // ν‘œν˜„μ‹ λ°©μ‹μ˜ ν•¨μˆ˜ μ •μ˜ (ν•¨μˆ˜λ₯Ό λ³€μˆ˜μ— ν• λ‹Ή)
      var add = function (x, y) {
        return x + y;
      };
      
      console.log(add(10, 20)); // 30 좜λ ₯됨
      
      • ex01-38.js gpt μ„€λͺ…

        πŸ” μ½”λ“œ μ„€λͺ…

        function max(n1, n2) {
          let result; // μ§€μ—­ λ³€μˆ˜ μ„ μ–Έ (블둝 μŠ€μ½”ν”„)
        
          if (n1 > n2) {
            result = n1;
          } else {
            result = n2;
          }
        
          return result;
        }
        

        • βœ… μ£Όμš” 포인트 μ„€λͺ…

          ν•­λͺ©μ„€λͺ…
          ν•¨μˆ˜ 이름max β€” 두 수 쀑 μ΅œλŒ€κ°’μ„ λ°˜ν™˜
          λ§€κ°œλ³€μˆ˜n1, n2 β€” 비ꡐ할 두 숫자
          μ§€μ—­ λ³€μˆ˜result β€” ν•¨μˆ˜ λ‚΄λΆ€μ—μ„œλ§Œ μ‚¬μš©λ˜λŠ” λ³€μˆ˜
          μŠ€μ½”ν”„let으둜 μ„ μ–Έλœ resultλŠ” ν•¨μˆ˜ λ‚΄λΆ€(μ§€μ—­)μ—μ„œλ§Œ μœ νš¨ν•¨
          ν˜Έμ΄μŠ€νŒ…let은 ν˜Έμ΄μŠ€νŒ…μ€ λ˜μ§€λ§Œ TDZ(Temporal Dead Zone) λ•Œλ¬Έμ— μ΄ˆκΈ°ν™” μ „ μ ‘κ·Ό λΆˆκ°€λŠ₯주석에 var둜 λ°”κΎΈλ©΄ ν˜Έμ΄μŠ€νŒ… ν•™μŠ΅ μ˜ˆμ‹œλ‘œ μ μ ˆν•¨

        • 🧠 μ˜ˆμ‹œλ‘œ λ³΄λŠ” μ§€μ—­ λ³€μˆ˜ vs μ „μ—­ λ³€μˆ˜

        • resultλŠ” ν•¨μˆ˜ λ‚΄λΆ€μ—μ„œλ§Œ μ„ μ–Έλ˜μ—ˆκΈ° λ•Œλ¬Έμ— μ™ΈλΆ€μ—μ„œ μ ‘κ·Ό λΆˆκ°€λŠ₯

        • μ˜ˆμ‹œ:

          console.log(result); // ReferenceError: result is not defined

        • πŸ’‘ var와 let의 차이 μ˜ˆμ‹œ

          function max(n1, n2) {
            // var result; // ν˜Έμ΄μŠ€νŒ…μœΌλ‘œ ν•¨μˆ˜ μ΅œμƒλ‹¨μ— μ„ μ–Έλœ κ²ƒμ²˜λŸΌ μž‘λ™
            let result;     // let은 TDZ 영ν–₯ β†’ μ„ μ–Έ μ „ μ ‘κ·Ό λΆˆκ°€
          
            if (n1 > n2) {
              result = n1;
            } else {
              result = n2;
            }
          
            return result;
          }
          
        • var둜 μ„ μ–Έν•˜λ©΄, ν•¨μˆ˜ μ‹œμž‘ μ‹œμ μ— undefined둜 μ΄ˆκΈ°ν™”λ¨

        • let은 μ„ μ–Έ μ‹œμ κΉŒμ§€ TDZ에 μžˆμœΌλ―€λ‘œ, μ„ μ–Έ μ „ μ ‘κ·Ό μ‹œ ReferenceError


  • λ§€κ°œλ³€μˆ˜

    • κΈ°λ³Έκ°’ λ§€κ°œλ³€μˆ˜ (Default parameters)
      • ν•¨μˆ˜ ν˜ΈμΆœμ‹œ μΈμžκ°’μ„ μ „λ‹¬ν•˜μ§€ μ•ŠμœΌλ©΄ undefinedκ°€ 전달됨
      • 값이 μ „λ‹¬λ˜μ§€ μ•Šκ±°λ‚˜ undefinedλ₯Ό μΈμžκ°’μœΌλ‘œ μ „λ‹¬ν•œ 경우 μ§€μ •ν•œ λ§€κ°œλ³€μˆ˜λ₯Ό κΈ°λ³Έκ°’μœΌλ‘œ μ΄ˆκΈ°ν™”
    • λ‚˜λ¨Έμ§€ λ§€κ°œλ³€μˆ˜ (Rest parameters)
      • μ •ν•΄μ§€μ§€ μ•Šμ€ 수의 λ§€κ°œλ³€μˆ˜λ₯Ό λ°°μ—΄λ‘œ μ „λ‹¬λ°›μŒ
      • ν•¨μˆ˜μ˜ λ§ˆμ§€λ§‰ λ§€κ°œλ³€μˆ˜ μ•žμ— ...을 λΆ™μž„
      • λ‚˜λ¨Έμ§€ λ§€κ°œλ³€μˆ˜μ˜ νŠΉμ§•
        • λ°°μ—΄λ‘œ μˆ˜μ§‘: λͺ¨λ“  인수λ₯Ό λ°°μ—΄λ‘œ μˆ˜μ§‘ν•©λ‹ˆλ‹€.
        • λ§ˆμ§€λ§‰ λ§€κ°œλ³€μˆ˜λ‘œλ§Œ μ‚¬μš©: ν•¨μˆ˜ μ •μ˜μ—μ„œ λ‚˜λ¨Έμ§€ λ§€κ°œλ³€μˆ˜λ₯Ό μ‚¬μš©ν•œλ‹€.
        • 일반 λ§€κ°œλ³€μˆ˜μ™€ ν•¨κ»˜ μ‚¬μš©κ°€λŠ₯: λ‹€λ₯Έ λ§€κ°œλ³€μˆ˜μ™€ ν•¨κ»˜ μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
    • 인자수

      ν•¨μˆ˜μ— μ •μ˜ν•œ λ§€κ°œλ³€μˆ˜μ™€ ν•¨μˆ˜ ν˜ΈμΆœμ— μ‚¬μš©λ˜λŠ” 인자의 μˆ˜κ°€ 달라도 μ—λŸ¬κ°€ λ°œμƒν•˜μ§€λŠ” μ•ŠμŒ
      • λ§€κ°œλ³€μˆ˜ > 인자

        • λΆ€μ‘±ν•œ μΈμžμ— λŒ€ν•œ λ§€κ°œλ³€μˆ˜μ—λŠ” undefined κ°€ 지정됨
        • λ‹€λ₯Έ κ°•ν˜• μ–Έμ–΄μ—μ„œλŠ” λ§€κ°œλ³€μˆ˜λ₯Ό ν˜ΈμΆœμ•ˆν•΄μ£Όλ©΄ 숫자 + 숫자 + undefinedλΌμ„œ NaN이 뜸
        function add(x, y, z) {
          console.log(z); // undefined
          return x + y;
        }
        console.log(add(3, 4)); // 7 => z값은 μ•Œμ•„μ„œ λ¬΄μ‹œ
      • λ§€κ°œλ³€μˆ˜ < 인자

        • λ‚¨λŠ” μΈμžμ— λŒ€ν•΄μ„œλŠ” μ²˜λ¦¬ν•  λ§€κ°œλ³€μˆ˜κ°€ μ—†κΈ° λ•Œλ¬Έμ— λ¬΄μ‹œλ¨
        function add(x, y) {
          return x + y;
        }
        console.log(add(3 , 4 , 5)); // 7 => 5λŠ” μ•Œμ•„μ„œ λ¬΄μ‹œ
    • 암묡적 λ§€κ°œλ³€μˆ˜
      • λͺ¨λ“  ν•¨μˆ˜μ—μ„œ λͺ…μ‹œμ μœΌλ‘œ μ„ μ–Έν•˜μ§€ μ•Šκ³  μ•”λ¬΅μ μœΌλ‘œ μ‚¬μš©ν•  수 μžˆλŠ” λ§€κ°œλ³€μˆ˜
      • arguments
        • ν•¨μˆ˜ λ‚΄μ—μ„œ arguments λ³€μˆ˜λ‘œ μ ‘κ·Ό κ°€λŠ₯
        • ν•¨μˆ˜μ— μ „λ‹¬λœ λͺ¨λ“  μΈμžλ“€μ„ λ‹΄κ³  μžˆλŠ” μ»¬λ ‰μ…˜ μœ μ‚¬ λ°°μ—΄ 객체
        • λ°°μ—΄κ³Ό λΉ„μŠ·ν•˜κ²Œ length 속성과 index둜 각 μΈμžμ— μ ‘κ·Ό κ°€λŠ₯
        • arguments λŒ€μ‹  ES6 의 λ‚˜λ¨Έμ§€ λ§€κ°œλ³€μˆ˜(…) μ‚¬μš©μ„ ꢌμž₯
      • this
        • ν•¨μˆ˜ λ‚΄μ—μ„œ this ν‚€μ›Œλ“œλ‘œ μ ‘κ·Ό κ°€λŠ₯
        • ν•¨μˆ˜ μ»¨ν…μŠ€νŠΈ 객체
        • ν•¨μˆ˜λ₯Ό ν˜ΈμΆœν•œ 객체 에 λŒ€ν•œ μ°Έμ‘°

πŸ”— λ°°μ› λ˜ 파일


❓ 생긴 질문 / 더 μ•Œμ•„λ³Ό 것

  • ν•¨μˆ˜μ— λŒ€ν•΄μ„œ 생각보닀 λͺ¨λ₯΄λŠ”κ²Œ μ’€ λ§Žμ•˜κ³  ν˜Έμ΄μŠ€νŒ… κ΄€λ ¨ν•΄μ„œ 이해도가 λ–¨μ–΄μ§€λŠ”κ²ƒ κ°™μ•„ 보인닀. νŒŒμΌμ„ λ‹€μ‹œ ν•œλ²ˆ μ‚΄νŽ΄λ³΄κ³  책도 μ½μœΌλ©΄μ„œ 정리해야겠닀.

πŸ”— μ°Έκ³  자료

profile
front-endλ₯Ό κΏˆκΏ‰λ‹ˆλ‹€

0개의 λŒ“κΈ€