potatos
๐•๐•’๐•ฆ๐•ฃ๐•ฆ๐•ค
potatos
์ „์ฒด ๋ฐฉ๋ฌธ์ž
์˜ค๋Š˜
์–ด์ œ
  • ๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ
    • Daily
    • Study
      • CS
      • Network
      • Windows
      • Linux
      • HTML & CSS
      • JavaScript
      • React
      • vue.js
      • Flutter
      • DataBase
      • Elastic Se..
      • Log
      • Coding Tes..
    • Work
      • PC
      • Mobile
      • JPGIF

๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

  • ํ™ˆ
  • ํƒœ๊ทธ
  • ๋ฐฉ๋ช…๋ก

๊ณต์ง€์‚ฌํ•ญ

  • notice

์ธ๊ธฐ ๊ธ€

ํƒœ๊ทธ

  • Windows
  • ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ
  • JavaScript
  • CSS
  • HTML
  • ์ˆ˜์ง ์ •๋ ฌ
  • MySQL
  • ์…€๋ ‰ํ„ฐ
  • ์œˆ๋„์šฐ
  • Linux

์ตœ๊ทผ ๋Œ“๊ธ€

์ตœ๊ทผ ๊ธ€

ํ‹ฐ์Šคํ† ๋ฆฌ

hELLO ยท Designed By ์ •์ƒ์šฐ.
potatos

๐•๐•’๐•ฆ๐•ฃ๐•ฆ๐•ค

Study/JavaScript

[JavaScript] JSON

2022. 5. 2. 23:07

JSON

JavaScript Object Notation(์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๊ฐ์ฒด ํ‘œ๊ธฐ๋ฒ•)์˜ ์ค„์ž„๋ง๋กœ JSON์ด๋ผ ํ‘œํ˜„ํ•œ๋‹ค. ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๊ฑฐ๋‚˜ ์ „์†กํ•  ๋•Œ ๋งŽ์ด ์‚ฌ์šฉ๋˜๋Š” Data ๊ตํ™˜ ํ˜•์‹์ด๋ฉฐ, ๊ฐ์ฒด๋ฅผ ๋งŒ๋“ค ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ํ‘œํ˜„์‹์„ ์˜๋ฏธํ•œ๋‹ค. ๋‹จ์ˆœํžˆ ๋ฐ์ดํ„ฐ๋ฅผ ํ‘œ์‹œํ•˜๋Š” ํ‘œํ˜„ ๋ฐฉ๋ฒ•์ด๋ฉฐ, ๋ฐ์ดํ„ฐ ํฌ๋งท์ผ ๋ฟ์ด๋‹ค. ์‚ฌ์‹ค์ƒ ์‚ฐ์—… ํ‘œ์ค€์œผ๋กœ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋‹ค.

Object(๊ฐ์ฒด)์˜ ์ž„์‹œ ์ •์˜

๋ฐ์ดํ„ฐ ์ด๋ฆ„๊ณผ ๊ฐ’์˜ ํ•œ ์Œ์œผ๋กœ ๊ตฌ์„ฑ๋˜๋ฉฐ, key์™€ value์˜ ์Œ์œผ๋กœ ๊ตฌ์„ฑ๋œ ์ž๋ฃŒ ๊ตฌ์กฐ์ด๋‹ค.
ํ•˜๋‚˜์˜ ๋ณ€์ˆ˜ ์•ˆ์— ๋‹ค๋ฅธ ํ•˜์œ„ ๋ณ€์ˆ˜๋ฅผ ๋‚ด์žฅํ•˜๋Š” ํŠน์ˆ˜ํ•œ ํ˜•ํƒœ์˜ ๋ณ€์ˆ˜์ด๋ฉฐ, ํ•˜์œ„ ๋ฐ์ดํ„ฐ์— ์ ‘๊ทผํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์ (.)์œผ๋กœ ๊ตฌ๋ถ„ํ•œ๋‹ค.
๊ทธ๋Ÿฌ๋ฏ€๋กœ, JSON์€ ์–ด๋–ค ๋ณ€์ˆ˜ ์•ˆ์— ํ•˜์œ„ ๋ณ€์ˆ˜๋ฅผ ๋‚ด์žฅ์‹œํ‚ค๊ธฐ ์œ„ํ•œ JavaScript์˜ ํ‘œ๊ธฐ๋ฒ•์ด๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ๋‹ค.
๊ฐ์ฒด๋ณ€์ˆ˜์ด๋ฆ„.ํ•˜์œ„๋ณ€์ˆ˜1์ด๋ฆ„ = 123;
๊ฐ์ฒด๋ณ€์ˆ˜์ด๋ฆ„.ํ•˜์œ„๋ณ€์ˆ˜2์ด๋ฆ„ = 456;
๊ฐ์ฒด๋ณ€์ˆ˜์ด๋ฆ„.ํ•˜์œ„๋ณ€์ˆ˜n์ด๋ฆ„ = 999;

JSON ํ‘œ๊ธฐ๋ฒ•์œผ๋กœ ๊ฐ์ฒด ์ •์˜

1. ๋ณ€์ˆ˜๋“ค์˜ ๊ทธ๋ฃน์œผ๋กœ์„œ์˜ ๊ฐ์ฒด ์ •์˜

ํ•˜๋‚˜์˜ ๋ณ€์ˆ˜์— ํ•˜์œ„ ์ •๋ณด๋“ค์ด ํฌํ•จ๋˜์–ด ์žˆ๋Š” ๋ณ€์ˆ˜๋“ค์˜ ๊ทธ๋ฃน์œผ๋กœ ์ดํ•ดํ•œ๋‹ค.
key ์ด๋ฆ„์„ ์ง€์ •ํ•œ ํ›„, ์ฝœ๋ก (:)์œผ๋กœ ๊ตฌ๋ถ„ ์ง€์€ ํ›„์— ๊ฐ’์„ ๋ช…์‹œํ•˜๋ฉฐ, ๋‘ ๊ฐœ ์ด์ƒ์˜ ๋ฐ์ดํ„ฐ๋Š” ์ฝค๋งˆ(,)๋กœ ๊ตฌ๋ถ„ํ•œ๋‹ค.
์›์น™์ ์œผ๋กœ key ์ด๋ฆ„์€ ๋”ฐ์˜ดํ‘œ๋กœ ๊ฐ์‹ธ๋Š” ๊ฒƒ์ด ๋งž์ง€๋งŒ, key ์ด๋ฆ„์— ๋„์–ด์“ฐ๊ธฐ๋‚˜ ๋Œ€์‹œ(-)๊ฐ€ ใ…‡๋ฒ—๋Š” ๊ฒฝ์šฐ์—๋Š” ๋”ฐ์˜คํ‘œ ์ฒ˜๋ฆฌ๋ฅผ ์ƒ๋žตํ•ด๋„ ๋ฌด๊ด€ํ•˜๋‹ค. ์ˆซ์ž, boolean, null, undefined๋Š” ๋”ฐ์˜ดํ‘œ๋ฅผ ์ ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค.
const ๊ฐ์ฒด์ด๋ฆ„ = { ์ด๋ฆ„1: ๊ฐ’1, ์ด๋ฆ„2: ๊ฐ’2, ..., ์ด๋ฆ„n: ๊ฐ’n };
/** ๋ณ€์ˆ˜๋“ค์˜ ๊ทธ๋ฃน์œผ๋กœ์„œ์˜ JSON ์ •์˜ */
const student = {
    // key: value, key: value ... ์˜ ํ˜•์‹์œผ๋กœ ๋‚˜์—ด
    // ์ˆซ์ž, boolean, null, undefined๋Š” ๋”ฐ์˜ดํ‘œ ์ ์šฉ ์•ˆ ํ•จ
    studno: 10101,
    grade: 1,
    name: "ํ•™์ƒ1",
    phoneno: "010-1231-2342"
};
  • ๊ฐ€์žฅ ๊ธฐ๋ณธ์ ์ธ ๋ฐฉ๋ฒ•์˜ ์ถœ๋ ฅ
    • ๋ฐ์ดํ„ฐ์— ์ ‘๊ทผํ•˜๋Š” ๊ธฐ๋ณธ์ ์ธ ๋ฐฉ๋ฒ•์€ ๊ฐ์ฒด์ด๋ฆ„.ํ•˜์œ„์ •๋ณด์ด๋ฆ„์ด๋ฉฐ, 90% ์ด์ƒ์˜ ๊ฒฝ์šฐ์—์„œ ์ด ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•œ๋‹ค.
console.log("----------์ถœ๋ ฅ type1----------");
console.log("ํ•™๋ฒˆ: " + student.studno);
console.log("ํ•™๋…„: " + student.grade);
console.log("์ด๋ฆ„: " + student.name);
console.log("์—ฐ๋ฝ์ฒ˜: " + student.phoneno);
console.groupEnd();
  • JSON์˜ key ์ด๋ฆ„์„ ๋ฐฐ์—ด์˜ ์ธ๋ฑ์Šค์ฒ˜๋Ÿผ ํ™œ์šฉ
console.log("----------์ถœ๋ ฅ type2----------");
console.log("ํ•™๋ฒˆ: " + student['studno']);
console.log("ํ•™๋…„: " + student['grade']);
console.log("์ด๋ฆ„: " + student['name']);
console.log("์—ฐ๋ฝ์ฒ˜: " + student['phoneno']);
console.groupEnd();
  • ์ ‘๊ทผํ•˜๊ณ ์ž ํ•˜๋Š” ํ•˜์œ„ ๋ณ€์ˆ˜์˜ ์ด๋ฆ„์„ ๋™์ ์œผ๋กœ ์„ค์ •ํ•ด์•ผ ํ•  ๊ฒฝ์šฐ
const keyName = "phoneno";
console.log(student[keyName]);
  • JSON์˜ key๋ฅผ ๋ฐฐ์—ด๋กœ ๋ฐ˜ํ™˜ํ•˜๋Š” ๋ช…๋ น
const keys = Object.getOwnPropertyNames(student);
console.log(keys);

2. ๋ฐฐ์—ด์„ ํฌํ•จํ•˜๋Š” JSON

JSON์˜ ๊ฐ’์—๋Š” ์ง€๊ธˆ๊นŒ์ง€ ๋‹ค๋ฃฌ ๋ชจ๋“  ํ˜•ํƒœ์˜ ๋ฐ์ดํ„ฐ ํƒ€์ž…์ด ์ง€์ • ๊ฐ€๋Šฅํ•˜๋‹ค.
const ๊ฐ์ฒด์ด๋ฆ„ = { ์ด๋ฆ„1: ์ˆซ์ž, ์ด๋ฆ„2: ๋ฌธ์ž์—ด, ..., ์ด๋ฆ„n: [๊ฐ’1, ๊ฐ’2, ๊ฐ’3 ... ๊ฐ’n] };

console.log(๊ฐ์ฒด์ด๋ฆ„.์ด๋ฆ„n[0]);

3. ๋ณตํ•ฉ ์ž๋ฃŒ ๊ตฌ์กฐ

๋‹ค์–‘ํ•œ ๋ฐ์ดํ„ฐ ํƒ€์ž…์„ ํฌํ•จํ•˜๋Š” ๊ตฌ์กฐ๋กœ, ์ ์„ ํ†ตํ•œ ์ ‘๊ทผ์„ ๊ถŒ์žฅํ•œ๋‹ค.
์ ‘๊ทผ ๋ฐฉ๋ฒ• code
์ ์œผ๋กœ ์—ฐ๊ฒฐ console.log(conpany.name);
console.log(conpany.department[0]);
๋ฐฐ์—ด์ฒ˜๋Ÿผ ์—ฐ๊ฒฐ console.log(conpany['since']);
console.log(conpany['department'][0]);
const company = {
    name: "(์ฃผ)๊ตฟ๋ชจ๋‹์ปดํŒจ๋‹ˆ",
    since: 2013,
    department: ["๊ธฐํšํŒ€", "๋””์ž์ธํŒ€", "๊ฐœ๋ฐœํŒ€"]
};

console.log(company.name); //์ ์œผ๋กœ ์—ฐ๊ฒฐ
console.log(company['since']); // ๋ฐฐ์—ด์ฒ˜๋Ÿผ ์—ฐ๊ฒฐ
console.log(company.department[0]); //์ ์œผ๋กœ ์—ฐ๊ฒฐ
console.log(company.department[1]); //์ ์œผ๋กœ ์—ฐ๊ฒฐ
console.log(company['department'][0]); // ๋ฐฐ์—ด์ฒ˜๋Ÿผ ์—ฐ๊ฒฐ

4. ๊ณ„์ธต ๊ตฌ์กฐ

JSON ํ‘œ๊ธฐ๋ฒ•์˜ ์žฅ์ ์€ ๋ณต์žกํ•œ ์ •๋ณด ๊ตฌ์กฐ๋ฅผ ๊ณ„์ธตํ™”ํ•˜์—ฌ ํ‘œํ˜„ ๊ฐ€๋Šฅํ•˜๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.
๋‹จ์ผ ํ˜•ํƒœ์˜ JSON ๊ตฌ์กฐ๋ฅผ ๋ณ„๋„๋กœ ์ฐธ์กฐํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹Œ, ์ง์ ‘ ์ •์˜ํ•˜๋Š” ํŒจํ„ด์œผ๋กœ๋„ ํ‘œํ˜„์ด ๊ฐ€๋Šฅํ•˜๋‹ค.
/** ๋‹จ์ผ ํ˜•ํƒœ์˜ JSON */
const json1 = { ... };
const json2 = { ... };


/** ๋‹ค๋ฅธ JSON์„ ํฌํ•จํ•˜๋Š” JSON */
const json3 = {
    data1: json1,
    data2: json2
};


/** ๊ณ„์ธต์ ์œผ๋กœ ์ •์˜๋œ JSON */
const myjson = {
    data1: {        
        ...
    },
    data2: {
        ...
    }
};

5. ๋ชฉ๋ก ๊ตฌ์กฐ

JSON์˜ value๊ฐ€ ๋ฐฐ์—ด๋กœ ์ •์˜๋˜์–ด ์žˆ์œผ๋ฉด์„œ ๊ฐ ๋ฐฐ์—ด์˜ ์›์†Œ๊ฐ€ ๋˜๋‹ค๋ฅธ JSON ํ˜•์‹์ธ ๊ฒฝ์šฐ์ด๋‹ค. ๋ฐฐ์—ด์˜ ์šฐ๋„ˆ์†Œ๋กœ ํฌํ•จ๋˜๋Š” JSON๋ผ๋ฆฌ๋Š” ๋™์ผํ•œ ๊ตฌ์กฐ์ด๋ฉฐ, ๋ณดํ†ต listํ˜• ์ปจํ…์ธ  ๊ตฌ์กฐ๋กœ ์‚ฌ์šฉํ•œ๋‹ค.
/** ๋ชฉ๋ก ๊ตฌ์กฐ๋ฅผ ๊ฐ–๋Š” JSON ๊ฐ์ฒด **/
const ๊ฐ์ฒด์ด๋ฆ„= {
    key: [value, value...]
}


/** ๋ฐฐ์—ด์˜ ์›์†Œ๋กœ์„œ JSON ๊ตฌ์กฐ๋ฅผ ์ง์ ‘ ๋ช…์‹œ **/
const ๊ฐ์ฒด์ด๋ฆ„ = {
    key : [ {
        key: value, key: value...
    }, {
        key: value, key: value...
    }, {
        key: value, key: value...
    }, {
        key: value, key: value...
    } ]
}
  • ๊ฐ€์žฅ ์ผ๋ฐ˜์ ์ธ ํ˜•ํƒœ์˜ ๋ชฉ๋ก ๊ตฌ์กฐ
    • ๋ชฉ๋ก์„ ๊ตฌ์„ฑํ•˜๋Š” ๋ฐฐ์—ด ์™ธ์— ๋ชฉ๋ก์„ ์„ค๋ช…ํ•˜๊ธฐ ์œ„ํ•œ ๋ถ€๊ฐ€ ์ •๋ณด๋„ ํ•จ๊ป˜ ํฌํ•จ๋œ๋‹ค.
const bbs = {
    title: '๊ณต์ง€์‚ฌํ•ญ',
    count: 4,
    item: [
        {id: 1, subject: '์ฒซ ๋ฒˆ์งธ ๊ฒŒ์‹œ๋ฌผ ์ œ๋ชฉ'},
        {id: 2, subject: '๋‘ ๋ฒˆ์งธ ๊ฒŒ์‹œ๋ฌผ ์ œ๋ชฉ'},
        {id: 3, subject: '์„ธ ๋ฒˆ์งธ ๊ฒŒ์‹œ๋ฌผ ์ œ๋ชฉ'},
        {id: 4, subject: '๋„ค ๋ฒˆ์งธ ๊ฒŒ์‹œ๋ฌผ ์ œ๋ชฉ'}
    ]
};

JSON ๊ตฌ์กฐ ํ™•์žฅ

1. ์กด์žฌํ•˜์ง€ ์•Š๋Š” key๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ

์กด์žฌํ•˜์ง€ ์•Š๋Š” key์— ๋Œ€ํ•ด ์ถœ๋ ฅํ•˜๊ฑฐ๋‚˜ ๋‹ค๋ฅธ ๋ณ€์ˆ˜์— ๋Œ€์ž…ํ•  ๊ฒฝ์šฐ, undefined๋กœ ์ฒ˜๋ฆฌ๋œ๋‹ค.
  • ์กด์žฌํ•˜์ง€ ์•Š๋Š” ๊ฐ’์— ๋Œ€ํ•œ ์ถœ๋ ฅ
const foo = {
    name: "์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ",
    age: 19
};

// ์กด์žฌํ•˜์ง€ ์•Š๋Š” ๊ฐ’์— ๋Œ€ํ•œ ์ถœ๋ ฅ -> undefined
console.log(foo.email);
  • ์กด์žฌํ•˜์ง€ ์•Š๋Š” ๊ฐ’์„ ํ™œ์šฉํ•œ ์—ฐ์‚ฐ
const foo = {
    name: "์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ",
    age: 19
};

const nextAge = foo.aga + 1;	// undefined + 1
console.log(nextAge);

// ์ˆซ์ž๊ฐ€ ์•„๋‹Œ ๊ฒฐ๊ณผ๊ฐ’์ด ๋˜๋ฏ€๋กœ Not A Number๋ฅผ ์˜๋ฏธํ•˜๋Š” NaN์ด ์ถœ๋ ฅ

2. ์กด์žฌํ•˜์ง€ ์•Š๋Š” key์— ๋Œ€ํ•œ ๋Œ€์ž…

์ฆ‰์‹œ ๊ฐ์ฒด๋ฅผ ํ™•์žฅํ•˜๋ฉฐ, ์กด์žฌํ•˜์ง€ ์•Š๋Š” key์— ๋Œ€ํ•œ ๋Œ€์ž…์€ ์ž์ฃผ ์‚ฌ์šฉ๋œ๋‹ค.
const foo = {
    name: "์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ",
    age: 19
};

foo.email = "hello@world.com";
console.log(foo);


/** ๊ฒฐ๊ณผ **/
{ name: '์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ', age: 19, email: 'hello@world.com' }

3. ๋นˆ ๊ฐ์ฒด ํ™•์žฅ

์•„๋ฌด๋Ÿฐ key๋„ ์ •์˜๋˜์ง€ ์•Š์€ ๋นˆ JSON ๊ฐ์ฒด์— ์ ์ง„์ ์œผ๋กœ ๋‚ด์šฉ์„ ๋ง๋ถ™์ผ ์ˆ˜ ์žˆ๋‹ค.
const myJson = {}; // ๋นˆ ๊ฐ์ฒด
console.log(myJson);

for (let i=0; i<10; i++) {
    const key = "value" + i;
    myJson[key] = i * 100;
}

console.log(myJson);


/** ๊ฒฐ๊ณผ **/
{}
{
  value0: 0,
  value1: 100,
  value2: 200,
  value3: 300,
  value4: 400,
  value5: 500,
  value6: 600,
  value7: 700,
  value8: 800,
  value9: 900
}

JSON ๋ฐ˜๋ณต๋ฌธ

๋ฐฐ์—ด์˜ ํ‚ค๋ฅผ ์ฐธ์กฐํ•˜์—ฌ ๋ฐ˜๋ณต๋ฌธ์„ ์‚ฌ์šฉํ•œ๋‹ค. ๋ฐ˜๋ณตํ•˜๋Š” ๋™์•ˆ ๊ฐ์ฒด๋ฅผ ์ถ”๊ฐ€ ๋˜๋Š” ์ œ๊ฑฐํ•  ์ˆ˜ ์žˆ๋‹ค.
for(๋ณ€์ˆ˜ in Json) {

}
const student = {
    studno: 10101,
    grade: 1,
    name: "ํ•™์ƒ1",
    phoneno: "010-1231-2342"
};

for (let key in student) {
    console.log(student[key]);
};


/** ๊ฒฐ๊ณผ **/
10101
1
ํ•™์ƒ1
010-1231-2342

์ฐธ์กฐ ๋ณต์‚ฌ

1. ๊ฐ’ ๋ณต์‚ฌ

์ผ๋ฐ˜ ๊ฐ’ ๋ณต์‚ฌ๋Š” ์ผ๋ฐ˜ ๋ณ€์ˆ˜๋ผ๋ฆฌ์˜ ๋ณต์‚ฌ๋ฅผ ์˜๋ฏธํ•œ๋‹ค. ์ผ๋ฐ˜ ๋ณ€์ˆ˜๋ผ๋ฆฌ ๋ณต์‚ฌํ•œ ๊ฒฝ์šฐ, ์›๋ณธ์ด ๋ณ€๊ฒฝ๋˜๋ฉด ๋ณต์‚ฌ๋ณธ์€ ์˜ํ–ฅ์„ ์ฃผ์ง€ ์•Š๋Š”๋‹ค.
let a = 100;
let b = a; // ๋ณ€์ˆ˜ b์— ๋ณ€์ˆ˜ a ๊ฐ’ ๋ณต์‚ฌ
console.log("a = " + a + ", b = " + b);		// a = 100, b = 100

a++; // a ๊ฐ’ 1 ์ฆ๊ฐ€
console.log("a = " + a + ", b = " + b);		// a = 101, b = 100

2. ์ฐธ์กฐ ๋ณต์‚ฌ (=์–•์€ ๋ณต์‚ฌ)

๋ฐฐ์—ด, JSON, ๊ฐ์ฒด๋ผ๋ฆฌ์˜ ๋ณต์‚ฌ๋Š” ์ฐธ์กฐ ์ฒ˜๋ฆฌ๋ฅผ ํ•œ๋‹ค.
์—ฌ๊ธฐ์„œ ์ฐธ์กฐ ์ฒ˜๋ฆฌ๋ž€, ์›๋ณธ์„ ์ˆ˜์ •ํ•˜๋ฉด ๋ณต์‚ฌ๋ณธ๋„ ํ•จ๊ป˜ ์ˆ˜์ •๋˜๋ฉฐ, ๋ณต์‚ฌ๋ณธ์„ ์ˆ˜์ •ํ•ด๋„ ์›๋ณธ์ด ํ•จ๊ป˜ ์ˆ˜์ •๋˜๋Š” ๊ฒƒ์„ ๋งํ•œ๋‹ค.
์„œ๋กœ ๋‹ค๋ฅธ ๋ณ€์ˆ˜๊ฐ€ ๊ฐ™์€ ๊ฐ์ฒด๋ฅผ ๋ฐ”๋ผ๋ณด๊ณ  ์žˆ๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•˜๋ฉฐ, ๊ฐ์ฒด ์•ˆ์— ๊ฐ์ฒด๊ฐ€ ์žˆ์„ ๊ฒฝ์šฐ์—๋Š” ํ•œ ๊ฐœ์˜ ๊ฐ์ฒด๋ผ๋„ ์›๋ณธ ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ•œ๋‹ค๋ฉด ์ด๋Š” ์ฐธ์กฐ ๋ณต์‚ฌ(=์–•์€ ๋ณต์‚ฌ)๊ฐ€ ๋œ๋‹ค.
C์–ธ์–ด์˜ ํฌ์ธํ„ฐ(Pointe)์™€ ๊ฐ™์€ ๊ฐœ๋…์œผ๋กœ ์ดํ•ด๊ฐ€ ๊ฐ€๋Šฅํ•˜๋ฉฐ, ์‹ค์ œ๋กœ ๊ฐ’์ด ๋ณต์‚ฌ๋˜์ง€๋Š” ์•Š๋Š”๋‹ค.
๋ง ๊ทธ๋Œ€๋กœ ์–•์€ ๋ณต์‚ฌ์ด๋ฏ€๋กœ ์—๋Ÿฌ ๋ฐœ์ƒ๋ฅ ์ด ๋†’์€๋ฐ, ์—๋Ÿฌ ๋ฐœ์ƒ๋ฅ ์„ ๋‚ฎ์ถ”๊ธฐ ์œ„ํ•ด ๋ฐฐ์—ด๋ผ๋ฆฌ์˜ ๋ณต์‚ฌ(=๊นŠ์€ ๋ณต์‚ฌ)๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.
const user = {
    name: "Lee"
};

const member = user; // ์ƒ์ˆ˜ member์— ์ƒ์ˆ˜ user ๊ฐ’ ๋ณต์‚ฌ
console.log(user);
console.log(member);

member.name = "Kim"; // member์˜ name ๊ฐ’ ์ˆ˜์ •
console.log(user);
console.log(member);


/** ๊ฒฐ๊ณผ **/
{ name: 'Lee' }
{ name: 'Lee' }
{ name: 'Kim' }
{ name: 'Kim' }
const d1 = [1, 2, 3];
const d2 = d1; // ์ƒ์ˆ˜ d2์— ์ƒ์ˆ˜ d1 ๊ฐ’ ๋ณต์‚ฌ
console.log(d1);
console.log(d2);

d1[0] += 10; // d1์˜ 0๋ฒˆ์งธ ๊ฐ’์— +10
d1[1] += 10; // d1์˜ 1๋ฒˆ์งธ ๊ฐ’์— +10
d1[2] += 10; // d1์˜ 2๋ฒˆ์งธ ๊ฐ’์— +10
console.log(d1);
console.log(d2);



/** ๊ฒฐ๊ณผ **/
[ 1, 2, 3 ]
[ 1, 2, 3 ]
[ 11, 12, 13 ]
[ 11, 12, 13 ]

3. ๋ฐฐ์—ด๋ผ๋ฆฌ์˜ ๋ณต์‚ฌ (=๊นŠ์€ ๋ณต์‚ฌ)

  • ๋ฐ˜๋ณต๋ฌธ ์ด์šฉ
    • ๊ฐ™์€ ๊ฐ’์„ ์ถœ๋ ฅํ•˜๋ฉฐ, ์˜จ์ „ํžˆ ๋ฐฐ์—ด์˜ ๊ฐ’์„ ๋ณต์‚ฌํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์›์†Œ๋ผ๋ฆฌ์˜ ๊ฐœ๋ณ„ ๋ณต์‚ฌ๊ฐ€ ํ•„์š”ํ•˜๋‹ค.
const a1 = [1, 2, 3];

// ์›๋ณธ a1๊ณผ ๋™์ผํ•œ ๊ธธ์ด๋ฅผ ๊ฐ–๋Š” ๋ฐฐ์—ด์„ ์ƒ์„ฑ
const a2 = new Array(a1.length);

// ๋ฐฐ์—ด์„ ์˜จ์ „ํžˆ ๊ฐ’ ๋ณต์‚ฌํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์›์†Œ๋ผ๋ฆฌ ๊ฐœ๋ณ„ ๋ณต์‚ฌ ํ•„์š”
for (let i = 0; i < a1.length; i++) {
    a2[i] = a1[i];
}

console.log(a1);	// [ 1, 2, 3 ]
console.log(a2);	// [ 1, 2, 3 ]

a1[0] += 100;

console.group("----- a1[0] += 100 -----");
console.log(a1);	// [ 101, 2, 3 ]
console.log(a2);	// [ 1, 2, 3 ]
console.groupEnd();
  • ๋ฉ”์„œ๋“œ ์ด์šฉ
    • slice ๋ฉ”์„œ๋“œ๋ฅผ ์ด์šฉํ•˜๋ฉด ์›์†Œ๋ผ๋ฆฌ์˜ ๊ฐœ๋ณ„ ๋ณต์‚ฌ๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค.
const a1 = [1, 2, 3];

// ๋ฐฐ์—ด ๊ฐ์ฒด๊ฐ€ ๊ฐ–๋Š” ๋ฉ”์„œ๋“œ๋ฅผ ํ™œ์šฉํ•œ ๊นŠ์€ ๋ณต์‚ฌ ๋ฐฉ๋ฒ•
const a2 = a1.slice();

console.log(a1);	// [ 1, 2, 3 ]
console.log(a2);	// [ 1, 2, 3 ]

a1[0] += 100;

console.group("----- a1[0] += 100 -----");
console.log(a1);	// [ 101, 2, 3 ]
console.log(a2);	// [ 1, 2, 3 ]
console.groupEnd();
  • JavaScript ๋‚ด์žฅ ๊ธฐ๋Šฅ ์ด์šฉ
    • ๋นˆ JSON ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜์—ฌ, ์ƒ์„ฑํ•œ ๊ฐ์ฒด๊ฐ€ ๋น„์–ด ์žˆ๋‹ค๋ฉด ์›๋ณธ JSON ๊ฐ์ฒด๋ฅผ ๋ˆ„์  ์ถ”๊ฐ€ํ•˜์—ฌ ๋ณต์‚ฌํ•œ๋‹ค.
/** ๋ฐ˜๋ณต๋ฌธ for๋ฌธ ์ด์šฉ **/
const addr = {
    city: '์„œ์šธ',
    gu: '์„œ์ดˆ'
};

const copy = {}; // ๋นˆ JSON ๊ฐ์ฒด ์ƒ์„ฑ

for (let key in addr) {
    copy[key] = addr[key];
}

console.log(addr);	// { city: '์„œ์šธ', gu: '์„œ์ดˆ' }
console.log(copy);	// { city: '์„œ์šธ', gu: '์„œ์ดˆ' }

addr.gu = '๊ฐ•๋‚จ';

console.group("----- addr.gu = '๊ฐ•๋‚จ' -----");
console.log(addr);	// { city: '์„œ์šธ', gu: '๊ฐ•๋‚จ' }
console.log(copy);	// { city: '์„œ์šธ', gu: '์„œ์ดˆ' }
console.groupEnd();
/** Object .assign() ์ด์šฉ **/
const addr = {
    city: '์„œ์šธ',
    gu: '์„œ์ดˆ'
};

// ๊นŠ์€ ๋ณต์‚ฌ๋ฅผ ์ˆ˜ํ–‰ํ•  ๋นˆ JSON ๊ฐ์ฒด ์ƒ์„ฑ
const copy = {};

// addr์„ copy2์— ๊นŠ์€ ๋ณต์‚ฌ๋ฅผ ์ˆ˜ํ–‰ํ•˜๋Š” JS ๋‚ด์žฅ ๊ธฐ๋Šฅ
// ๋ณต์‚ฌ๋  copy2๊ฐ€ ๋น„์–ด์žˆ๋Š” json์ผ ๊ฒฝ์šฐ ๋ณต์‚ฌ ๊ฐ€๋Šฅ
// ๋น„์–ด ์žˆ์ง€ ์•Š์œผ๋ฉด ์ถ”๊ฐ€๋ฅผ ํ•˜๊ฒŒ ๋จ --> ๋ˆ„์ 
Object.assign(copy, addr);
console.log(copy);	// { city: '์„œ์šธ', gu: '์„œ์ดˆ' }

addr.gu = '๊ฐ•๋‚จ';

console.log(addr); // { city: '์„œ์šธ', gu: '๊ฐ•๋‚จ' }
console.log(copy); // { city: '์„œ์šธ', gu: '์„œ์ดˆ' }

์˜ต์…”๋„ ์ฒด์ด๋‹ (Optional Chaining)

?.์˜ ํ˜•ํƒœ๋กœ ์‚ฌ์šฉํ•˜๋ฉฐ, ๊ฐ ์ฐธ์กฐ๊ฐ€ ์œ ํšจํ•œ์ง€์— ๋Œ€ํ•œ ์—ฌ๋ถ€๋ฅผ ๊ฒ€์‚ฌํ•˜๋Š” ์—ฐ์‚ฐ์ž์ด๋‹ค.
์ฐธ์กฐ๊ฐ€ null ํ˜น์€ undefined๋ผ๋ฉด, ๊ฒ€์‚ฌ๋ฅผ ์ค‘์ง€ํ•˜๊ณ  ์—๋Ÿฌ์‹ ๋ฐœ์ƒ ๋Œ€์‹  undefined ๊ฐ’์„ ๋ฆฌํ„ดํ•œ๋‹ค.
์†์„ฑ ๊ฐ’์ด ์กด์žฌํ•œ๋‹ค๋Š” ํ™•์‹คํ•œ ๋ณด์ฆ์ด ์—†์„ ๊ฒฝ์šฐ, ๊ทธ ๊ฐ์ฒด๋ฅผ ํƒ์ƒ‰ํ•˜๋Š” ๋ฐ์— ๋„์›€์„ ์ค€๋‹ค.
์˜ต์…”๋„ ์ฒด์ด๋‹์„ ์‚ฌ์šฉํ•จ์œผ๋กœ์„œ ๋ฌธ๋ฒ•์˜ ๊ฐ€๋…์„ฑ์ด ์˜ฌ๋ผ๊ฐ€๊ณ , ๊ฐ„๊ฒฐํ•œ ํ‘œํ˜„์‹์œผ๋กœ ์ž‘์„ฑ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.
๊ทธ๋Ÿฌ๋‚˜, ํ•„์ˆ˜์ ์ด์ง€ ์•Š์€ ๊ฐ์ฒด์—๊ฒŒ๋งŒ ์‚ฌ์šฉํ•ด์•ผ ํ•˜๋ฉฐ, ํ•„์ˆ˜์ ์ธ ๊ฐ์ฒด์—๊ฒŒ๋Š” ์˜ต์…”๋„ ์ฒด์ด๋‹ ๋Œ€์‹  if๋ฌธ์œผ๋กœ ์กด์žฌ ์—ฌ๋ถ€๋ฅผ ๊ฒ€์‚ฌํ•˜๋Š” ์œ ํšจ์„ฑ ๊ฒ€์‚ฌ๋ฅผ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค.
ES2020์—์„œ ์ƒˆ๋กญ๊ฒŒ ๋“ฑ์žฅํ•ด JavaScript์— ์ถ”๊ฐ€๋œ์ง€ ์–ผ๋งˆ ๋˜์ง€ ์•Š์€ ๋ฌธ๋ฒ•์œผ๋กœ, IE์—์„œ๋Š” ์ง€์›ํ•˜์ง€ ์•Š๊ณ  10% ๋ฏธ๋งŒ์œผ๋กœ ๋“œ๋ฌผ๊ฒŒ ์‚ฌ์šฉ๋œ๋‹ค.

1. ์ •์˜๋˜์ง€ ์•Š์€ ๊ฐ์ฒด์— ์ ‘๊ทผ

/** user ์•ˆ์— address๊ฐ€ ์ •์˜๋˜์ง€ ์•Š์•˜์œผ๋ฏ€๋กœ undefined๊ฐ€ ๋ฐœ์ƒ **/
const user = {};

console.log(user.address);	// undefined

2. ์ •์˜๋˜์ง€ ์•Š์€ ๊ฐ์ฒด์˜ ํ•˜์œ„ ๊ธฐ๋Šฅ์— ์ ‘๊ทผ

/** address ์ž์ฒด๊ฐ€ ์ •์˜๋˜์ง€ ์•Š์€ ์ƒํƒœ์—์„œ ํ•˜์œ„ ๊ธฐ๋Šฅ์— ์ ‘๊ทผํ•˜๋ฏ€๋กœ ์—๋Ÿฌ ๋ฐœ์ƒ **/
const user = {};

console.log(user.address.city);		// Error

3. AND ์—ฐ์‚ฐ์ž๋กœ ๊ฐ์ฒด ์กด์žฌ ์—ฌ๋ถ€ ๊ฒ€์‚ฌ

/** ๋‹จ๊ณ„๋ณ„๋กœ ๊ฐ์ฒด๊ฐ€ ์กด์žฌํ•˜๋Š”์ง€ ๊ฒ€์‚ฌ **/
const user = {};

console.log(user && user.address && user.address.city);		// undefined

4. ์˜ต์…”๋„ ์ฒด์ด๋‹์œผ๋กœ ๊ฐ์ฒด ์กด์žฌ ์—ฌ๋ถ€ ๊ฒ€์‚ฌ

/** if๋ฌธ์ด๋‚˜ AND ์—ฐ์‚ฐ์ž ์‚ฌ์šฉ ์—†์ด ๊ฐ์ฒด ์กด์žฌ ์—ฌ๋ถ€ ๊ฒ€์‚ฌ ๊ฐ€๋Šฅ **/
const user = {};

console.log(user?.address?.city);		// undefined

'Study > JavaScript' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

[JavaScript] ๋ธŒ๋ผ์šฐ์ € ์ €์žฅ์†Œ  (0) 2022.07.08
[JavaScript] ๋ธŒ๋ผ์šฐ์ € ๋ Œ๋”๋ง ๋™์ž‘ ์›๋ฆฌ  (0) 2022.07.08
[JavaScript] ๋ฐฐ์—ด  (0) 2022.04.29
[JavaScript] ๊ธฐ๋ณธ ๋ฌธ๋ฒ• ํ™œ์šฉ  (0) 2022.04.24
[JavaScript] ๋ณ€์ˆ˜์˜ ์œ ํšจ์„ฑ ๋ฒ”์œ„ (๋ณ€์ˆ˜์˜ ์Šค์ฝ”ํ”„)  (0) 2022.04.24
    'Study/JavaScript' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
    • [JavaScript] ๋ธŒ๋ผ์šฐ์ € ์ €์žฅ์†Œ
    • [JavaScript] ๋ธŒ๋ผ์šฐ์ € ๋ Œ๋”๋ง ๋™์ž‘ ์›๋ฆฌ
    • [JavaScript] ๋ฐฐ์—ด
    • [JavaScript] ๊ธฐ๋ณธ ๋ฌธ๋ฒ• ํ™œ์šฉ
    potatos
    potatos

    ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”