๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐ŸŒŒ | WEB DEV/Vanilla JS

JS_๊ธฐ๋ณธ ๋ฌธ๋ฒ• (23)_ ๊ฐ์ฒด +

by KASSID 2023. 3. 26.

๋ชฉ์ฐจ

    728x90

    2022.02.10 - [๐ŸŒŒ | WEB DEV/Vanilla JS] - JS_๊ธฐ๋ณธ๋ฌธ๋ฒ• (3)_๊ฐ์ฒด

    ๊ธฐ์กด์— ๋‹ค๋ฃจ์—ˆ๋˜ JS์˜ ๊ฐ์ฒด์— ๋Œ€ํ•ด์„œ ์กฐ๊ธˆ ๋” ์•Œ์•„๋ณด์ž!

     

    1. ๊ฐ์ฒด ์ƒ์„ฑ & ์ ‘๊ทผ

    ์˜ˆ์ „ ํฌ์ŠคํŠธ์—์„œ ๋‹ค๋ฃจ์—ˆ๋˜ ๋Œ€๊ด„ํ˜ธ ํ‘œ๊ธฐ๋ฒ•์€ ๋‹ค์–‘ํ•œ ๋ฐฉ์‹์œผ๋กœ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. 

     

    1) ์‹๋ณ„์ž ๋ช…๋ช… ๊ทœ์น™์—์„œ ๋ฒ—์–ด๋‚œ ํ‚ค ์ด๋ฆ„์— ์ ‘๊ทผ

    const obj = {
      'ab-1' : 100,
      'c d' : 'Hello'
    };
    
    console.log(
      obj['ab-1'],
      obj['c d']
    );
    
    >>> 100
    >>> 'Hello'

    ์œ„์ฒ˜๋Ÿผ ๋ช…๋ช… ๊ทœ์น™์„ ์–ด๊ธด ๊ฒฝ์šฐ์—๋„ ' '(๋”ฐ์˜ดํ‘œ)๋ฅผ ์ด์šฉํ•˜์—ฌ ํ‚ค ์ด๋ฆ„์œผ๋กœ ์„ค์ •ํ•˜๊ณ 

    ์ด๋ฅผ ๋Œ€๊ด„ํ˜ธ ํ‘œ๊ธฐ๋ฒ•์œผ๋กœ ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋‹ค.

     

     

    2) ํ‘œํ˜„์‹์— ์ด์šฉ

    ์—ฐ์‚ฐ์„ ํ•˜์—ฌ ํ‚ค๊ฐ’์œผ๋กœ ์„ค์ •์„ ํ•  ๊ฒฝ์šฐ์—๋„ ๋Œ€๊ด„ํ˜ธ๋ฅผ ์ด์šฉํ•œ๋‹ค.

    let idx = 0;
    const obj = {
      ['user-' + ++idx] : `info-${idx}`,
      ['user-' + ++idx] : `info-${idx}`,
      ['user-' + ++idx] : `info-${idx}`,
    }
    
    console.log(obj);
    
    >>> {user-1: 'info-1', user-2: 'info-2', user-3: 'info-3'}

     

     

    3) ์ฃผ์˜!! ๊ฐ์ฒด๋‚˜ ๋ฐฐ์—ด์„ ํ‚ค ๊ฐ’์œผ๋กœ ์‚ฌ์šฉ??

    ๊ฐ์ฒด๋‚˜ ๋ฐฐ์—ด์„ ํ‚ค ๊ฐ’์œผ๋กœ ์‚ฌ์šฉํ•˜์—ฌ ๋ณด์ž.

    const obj = {x: 1, y: 2};
    const arr = [0, 1, 2];
    
    const result = {
      [obj] : '๊ฐ์ฒด',
      [arr] : '๋ฐฐ์—ด'
    };
    
    console.log(
      result[obj],
      result[arr],
    );
    
    >>> ๊ฐ์ฒด ๋ฐฐ์—ด

    ์œ„์˜ ๊ฒฐ๊ณผ๋กœ ๋ณด์•˜์„ ๋•Œ ๋ฌธ์ œ๊ฐ€ ์—†๋Š” ๋“ฏํ•˜๋‹ค

     

    ํ•˜์ง€๋งŒ ๋‹ค๋ฅธ ์˜ˆ์‹œ๋ฅผ ๋ณด์ž!

    console.log(
      result[{}],
      result['0,1,2'],
    );
    
    >>> ๊ฐ์ฒด ๋ฐฐ์—ด

    ์ด์ฒ˜๋Ÿผ ์•„์˜ˆ ๋‹ค๋ฅธ ๊ฐ’๋“ค์„ ๋„ฃ์—ˆ์Œ์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ  ์œ„์™€ ๊ฐ™์€ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค!

     

    ๊ทธ ์ด์œ ๋ฅผ ์•Œ์•„๋ณด๋ฉด

    console.log(
      result
    );
    
    >>> {[object Object]: '๊ฐ์ฒด', 0,1,2: '๋ฐฐ์—ด'}

    ๊ฐ์ฒด์˜ ๊ฒฝ์šฐ

    ๊ฐ์ฒด๋ฅผ ๋‹จ์ˆœํžˆ ๋ฌธ์ž์—ด๋กœ ์น˜ํ™˜ํ•œ ๊ฐ’( [object Object] ) ์ด ํ‚ค๊ฐ’์œผ๋กœ ์ €์žฅ๋˜์–ด ์žˆ๋‹ค.

    ๋”ฐ๋ผ์„œ ์•„๋ฌด ๊ฐ์ฒด๋ฅผ ๋„ฃ์–ด๋„ ์ด ํ‚ค๊ฐ’์œผ๋กœ ์ ‘๊ทผ์ด ๋œ๋‹ค.

     

    ๋ฐฐ์—ด์˜ ๊ฒฝ์šฐ

    ๋ฐฐ์—ด ๋‚ด ์›์†Œ๋ฅผ ์‰ผํ‘œ๋กœ ์ด์–ด๋ถ™์ธ ๋ฌธ์ž์—ด๋กœ ์น˜ํ™˜๋œ๋‹ค.

     

    ์ฆ‰, ์‹ค์ œ ๊ฐ์ฒด๋‚˜ ๋ฐฐ์—ด์ด ํ‚ค๊ฐ’์ด ๋˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋‹ค.

    ๋”ฐ๋ผ์„œ ๊ฐ์ฒด๋‚˜ ๋ฐฐ์—ด์„ ํ‚ค๊ฐ’์œผ๋กœ ํ™œ์šฉํ•ด์„œ๋Š” ์•ˆ๋œ๋‹ค.

     

     

    4) ํ‚ค ๋™์  ํ™œ์šฉ

    ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ํ†ตํ•ด ๊ฐ์ฒด์™€ ํ‚ค๊ฐ’์„ ๋ฐ›๊ณ  ๊ทธ๋ฅผ ํ™œ์šฉํ•˜๋Š” ํ•จ์ˆ˜๋ฅผ ๋งŒ๋“ค์–ด๋ณด์ž.

     

    ๋Œ€๊ด„ํ˜ธ ํ‘œ๊ธฐ๋ฒ•์„ ์ด์šฉํ•œ ํ•จ์ˆ˜์™€ ์  ํ‘œ๊ธฐ๋ฒ•์„ ์‚ฌ์šฉํ•œ ํ•จ์ˆ˜๋ฅผ ๋น„๊ตํ•˜์—ฌ ๋ณด์ž!

    const obj = {
      name : 'Kassid',
      job : 'student',
      major : 'Computer Engineering',
      age : 25
    };
    
    function addProp1(prop, key, value){ //๋Œ€๊ด‹ํ˜ธ ํ‘œ๊ธฐ๋ฒ• ์‚ฌ์šฉ
      prop[key] = value;
      console.log(prop);
    }
    
    function addProp2(prop, key, value){ //์  ํ‘œ๊ธฐ๋ฒ• ์‚ฌ์šฉ
      prop.key = value;
      console.log(prop);
    }

     

    1_ ๋Œ€๊ด„ํ˜ธ ํ‘œ๊ธฐ๋ฒ• ํ•จ์ˆ˜ ์‚ฌ์šฉ์‹œ

    addProp1(obj, grade, 3);
    
    >>> {name: 'Kassid', job: 'student', major: 'Computer Engineering', age: 25, grade: 3}

    ์˜๋„ํ•œ ๋Œ€๋กœ ์ƒˆ๋กœ์šด ํ”„๋กœํผํ‹ฐ๊ฐ€ ์ƒ์„ฑ์ด ๋œ ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค.

     

    2_ ์  ํ‘œ๊ธฐ๋ฒ• ํ•จ์ˆ˜ ์‚ฌ์šฉ์‹œ

    addProp2(obj, 'grade', 3);
    
    >>> {name: 'Kassid', job: 'student', major: 'Computer Engineering', age: 25, key: 3}

    ์˜๋„ํ•œ ๊ฒƒ๊ณผ ๋‹ค๋ฅด๊ฒŒ ํ‚ค์˜ ์ด๋ฆ„์ด grade๊ฐ€ ์•„๋‹Œ key ๋ผ๋Š” ์ด๋ฆ„์œผ๋กœ ์ƒ์„ฑ ๋˜์—ˆ๋‹ค.

     

    ๋”ฐ๋ผ์„œ ๋™์ ์œผ๋กœ ํ‚ค๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ์—๋Š” ๊ผญ ๋Œ€๊ด„ํ˜ธ๋ฅผ ํ™œ์šฉํ•ด์•ผํ•œ๋‹ค!

    (์ƒ์„ฑ ๋ฟ ์•„๋‹ˆ๋ผ ์—…๋ฐ์ดํŠธ, ์‚ญ์ œ๋„ ๊ฐ€๋Šฅํ•˜๋‹ค.)

     

     


    2. ES6 ๋ฌธ๋ฒ•

    ๊ทธ๋™์•ˆ ์ต์Šคํ”Œ๋กœ์–ด๋กœ ์ธํ•ด ์ž˜ ์‚ฌ์šฉํ•˜์ง€ ๋ชปํ–ˆ๋˜ ๋ฌธ๋ฒ•๋“ค์— ๋Œ€ํ•ด์„œ ์•Œ์•„๋ณด์ž.

     

    1) ๊ฐ์ฒด ์ƒ์„ฑ ์‹œ ํ‚ค์ด๋ฆ„๊ณผ ๊ฐ’์— ํ•ด๋‹นํ•˜๋Š” ๋ณ€์ˆ˜/์ƒ์ˆ˜ ์ด๋ฆ„์ด ๊ฐ™์€ ๊ฒฝ์šฐ

    ๋จผ์ € ์ผ๋ฐ˜์ ์ธ ๋ฐฉ๋ฒ•์œผ๋กœ ๊ตฌํ˜„์„ ํ•ด๋ณธ๋‹ค๋ฉด ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

     

    ์˜ˆ์‹œ 1) ๊ธฐ์กด์˜ ๋ฐฉ๋ฒ•

    let x = 1;
    let y = 2;
    
    const obj = {
      x : x,
      y : y
    };
    
    console.log(obj);
    
    >>> {x: 1, y: 2}

     

     

    ์˜ˆ์‹œ 2) ES6 ๋ฌธ๋ฒ• ํ™œ์šฉ

    const obj2 = {x, y};
    
    console.log(x, y);
    
    >>> {x: 1, y: 2}

    ์ด์ฒ˜๋Ÿผ ๋Œ€๊ด„ํ˜ธ ์•ˆ์— ๋ณ€์ˆ˜/์ƒ์ˆ˜๋ฅผ ๋Œ€์ž…ํ•œ๋‹ค๋ฉด

    ๊ทธ ์ด๋ฆ„์„ ํ‚ค๋กœ ๊ฐ–๋Š” ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.

     

     

    ์˜ˆ์‹œ 3) ํ•จ์ˆ˜๋กœ์˜ ํ™•์žฅ

    function createObj(name, desc, price){
      return {name, desc, price};
    }
    
    const bread1 = createObj('ํŠ€๊น€์†Œ๋ณด๋กœ', '๋Œ€์ „ ์„ฑ์‹ฌ๋‹น', 1500);
    console.log(bread1);
    
    >>> {name: 'ํŠ€๊น€์†Œ๋ณด๋กœ', desc: '๋Œ€์ „ ์„ฑ์‹ฌ๋‹น', price: 1500}

    ์ด๋ฅผ ์ด์šฉํ•œ ํ•จ์ˆ˜๋ฅผ ๋งŒ๋“ ๋‹ค๋ฉด ์œ„์™€ ๊ฐ™์ด ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค.

     

     

    2) ๋ฉ”์„œ๋“œ (method)

    ๊ฐ์ฒด์— ์ถ•์•ฝ๋œ ํ‘œํ˜„์œผ๋กœ ์ •์˜๋œ ํ•จ์ˆ˜ ํ”„๋กœํผํ‹ฐ๋ฅผ ๋ฉ”์„œ๋“œ๋ผ๊ณ  ์นญํ•œ๋‹ค.

     

    ์ด๋•Œ ์ฃผ์˜ํ•  ์ ์€ ์ผ๋ฐ˜ ํ•จ์ˆ˜ ํ”„๋กœํผํ‹ฐ์™€ ๋ฉ”์„œ๋“œ๋Š” ์ฐจ์ด๊ฐ€ ์žˆ๋‹ค.

     

    case_1 ์ผ๋ฐ˜ํ•จ์ˆ˜ ํ”„๋กœํผํ‹ฐ

    const obj = {
      say : function(isUser){
        return isUser
        ? '์•ˆ๋…•ํ•˜์„ธ์š”. ์ฒ˜์Œ ์˜ค์…จ๊ตฐ์š”?'
        : '์•ˆ๋…•ํ•˜์„ธ์š”. ๋˜ ์™€์ฃผ์…จ๊ตฐ์š”?'
      }
    }
    
    console.log(obj.say(true));
    
    >>> ์•ˆ๋…•ํ•˜์„ธ์š”. ์ฒ˜์Œ ์˜ค์…จ๊ตฐ์š”?

     

    case_2 ๋ฉ”์„œ๋“œ

    const obj = {
      say (isUser){
        return isUser
        ? '์•ˆ๋…•ํ•˜์„ธ์š”. ์ฒ˜์Œ ์˜ค์…จ๊ตฐ์š”?'
        : '์•ˆ๋…•ํ•˜์„ธ์š”. ๋˜ ์™€์ฃผ์…จ๊ตฐ์š”?'
      }
    }
    
    console.log(obj.say(true));
    
    >>> ์•ˆ๋…•ํ•˜์„ธ์š”. ์ฒ˜์Œ ์˜ค์…จ๊ตฐ์š”?

    ES6 ์ดํ›„์—๋Š” ์ด๋Ÿฌํ•œ ๋ฐฉ๋ฒ• ๋งŒ์„ ๋ฉ”์„œ๋“œ๋ผ๊ณ  ์นญํ•œ๋‹ค.

    ์ผ๋ฐ˜ ํ•จ์ˆ˜ ํ”„๋กœํผํ‹ฐ์™€ ๋ฉ”์„œ๋“œ๋Š” ํŠน์„ฑ๊ณผ ๊ธฐ๋Šฅ์ด ์กฐ๊ธˆ ๋‹ค๋ฅธ๋ฐ ์ด๋Š” ์ถ”ํ›„์— ๋‹ค๋ค„๋ณด๋„๋ก ํ•˜๊ฒ ๋‹ค!

     

     

     

    ๋Œ“๊ธ€