JavaScript์์ ๊ฐ์ฒด(Object)๋ ๊ฐ์ฅ ์ค์ํ ๋ฐ์ดํฐ ํ์ ์ค ํ๋์ ๋๋ค. ๊ฐ์ฒด๋ ํค-๊ฐ ์์ผ๋ก ์ด๋ฃจ์ด์ง ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ก, ๋ค์ํ ์์ฑ๊ณผ ๋ฉ์๋๋ฅผ ๋ด์ ์ ์์ต๋๋ค. ์ด ๊ธ์์๋ JavaScript ๊ฐ์ฒด์ ๊ธฐ๋ณธ ๊ฐ๋ ๊ณผ ํ์ฉ ๋ฐฉ๋ฒ์ ์์๋ณด๊ฒ ์ต๋๋ค.
JavaScript ๊ฐ์ฒด๋?
๊ฐ์ฒด๋ ์ฌ๋ฌ ๊ฐ์ ํ๋์ ๋จ์๋ก ๋ฌถ์ด ๊ด๋ฆฌํ ์ ์๋ ๋ฐ์ดํฐ ํ์
์
๋๋ค. ๊ฐ์ฒด๋ key
์ value
์ ์์ผ๋ก ์ด๋ฃจ์ด์ง๋ฉฐ, ์ด๋ฅผ ํตํด ๋ค์ํ ๋ฐ์ดํฐ๋ฅผ ํจ์จ์ ์ผ๋ก ๊ด๋ฆฌํ ์ ์์ต๋๋ค. ๊ฐ์ฒด๋ ์ค๊ดํธ {}
๋ก ์ ์๋ฉ๋๋ค.
let person = {
name: "John",
age: 30,
isAdult: true
};
์ ์ฝ๋์์ person
๊ฐ์ฒด๋ ์ธ ๊ฐ์ง ์์ฑ(name
, age
, isAdult
)์ ๊ฐ์ง๊ณ ์์ต๋๋ค. ๊ฐ ์์ฑ์ ํค-๊ฐ ์์ผ๋ก ํํ๋๋ฉฐ, ์์ฑ ๊ฐ์ ๋ฌธ์์ด, ์ซ์, ๋ถ๋ฆฌ์ธ ๋ฑ ๋ค์ํ ํ์
์ด ๊ฐ๋ฅํฉ๋๋ค.
๊ฐ์ฒด ์์ฑ์ ์ ๊ทผํ๊ธฐ
๊ฐ์ฒด์ ์์ฑ์ ์ ๊ทผํ๋ ๋ฐฉ๋ฒ์ ๋ ๊ฐ์ง๊ฐ ์์ต๋๋ค: ์ ํ๊ธฐ๋ฒ๊ณผ ๋๊ดํธ ํ๊ธฐ๋ฒ์ ๋๋ค.
์ ํ๊ธฐ๋ฒ
๊ฐ์ฅ ์ผ๋ฐ์ ์ธ ๋ฐฉ๋ฒ์ผ๋ก, ๊ฐ์ฒด์ ์์ฑ์ ์ ๊ทผํ ๋ ๊ฐ์ฒด๋ช
.์์ฑ๋ช
์ ์ฌ์ฉํฉ๋๋ค.
console.log(person.name); // ๊ฒฐ๊ณผ: "John"
console.log(person.age); // ๊ฒฐ๊ณผ: 30
๋๊ดํธ ํ๊ธฐ๋ฒ
๋๊ดํธ ํ๊ธฐ๋ฒ์ ๊ฐ์ฒด๋ช
["์์ฑ๋ช
"]
ํ์์ ์ฌ์ฉํฉ๋๋ค. ํนํ, ์์ฑ๋ช
์ด ๋ณ์๋ก ์ ์ฅ๋ ๊ฒฝ์ฐ ๋๊ดํธ ํ๊ธฐ๋ฒ์ ์ฌ์ฉํด์ผ ํฉ๋๋ค.
console.log(person["name"]); // ๊ฒฐ๊ณผ: "John"
let key = "age";
console.log(person[key]); // ๊ฒฐ๊ณผ: 30
๊ฐ์ฒด ์์ฑ ์ถ๊ฐ ๋ฐ ์์
๊ฐ์ฒด์ ์์ฑ์ ์ธ์ ๋ ์ง ์ถ๊ฐํ๊ฑฐ๋ ์์ ํ ์ ์์ต๋๋ค. ๊ฐ์ฒด์ ์๋ ์์ฑ์ ์ถ๊ฐํ๊ฑฐ๋, ๊ธฐ์กด ์์ฑ์ ๋ฎ์ด์๋๋ค.
person.job = "Developer"; // ์๋ก์ด ์์ฑ ์ถ๊ฐ
person.age = 31; // ๊ธฐ์กด ์์ฑ ๊ฐ ์์
console.log(person);
์ ์ฝ๋์์๋ job
์์ฑ์ ์ถ๊ฐํ๊ณ , age
๊ฐ์ 31๋ก ์์ ํฉ๋๋ค.
๊ฐ์ฒด ๋ฉ์๋
JavaScript ๊ฐ์ฒด๋ ์์ฑ๋ฟ๋ง ์๋๋ผ ๋ฉ์๋(๊ฐ์ฒด์ ํจ์)๋ ๊ฐ์ง ์ ์์ต๋๋ค. ๋ฉ์๋๋ ๊ฐ์ฒด์ ํ๋์ ์ ์ํ๋ฉฐ, ํจ์์ฒ๋ผ ํธ์ถ๋ฉ๋๋ค.
let person = {
name: "John",
greet: function() {
console.log("Hello, " + this.name);
}
};
person.greet(); // ๊ฒฐ๊ณผ: "Hello, John"
์ ์ฝ๋์์ greet
๋ฉ์๋๋ this
ํค์๋๋ฅผ ์ฌ์ฉํด ๊ฐ์ฒด์ name
์์ฑ์ ์ ๊ทผํ๊ณ , ์ธ์ฌ๋ง์ ์ถ๋ ฅํฉ๋๋ค. this
๋ ํธ์ถ๋ ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ๋ ์ค์ํ ํค์๋์
๋๋ค.
๊ฐ์ฒด์ ๋ฐ๋ณต๋ฌธ
๊ฐ์ฒด์ ๋ชจ๋ ์์ฑ์ ๋ฐ๋ณต์ ์ผ๋ก ์ฒ๋ฆฌํ๊ณ ์ถ๋ค๋ฉด, for...in
๋ฐ๋ณต๋ฌธ์ ์ฌ์ฉํ ์ ์์ต๋๋ค. ์ด ๋ฐ๋ณต๋ฌธ์ ๊ฐ์ฒด์ ๋ชจ๋ ์์ฑ์ ์์ฐจ์ ์ผ๋ก ์ ๊ทผํ ์ ์๊ฒ ํด์ค๋๋ค.
for (let key in person) {
console.log(key + ": " + person[key]);
}
์ ์ฝ๋๋ person
๊ฐ์ฒด์ ๋ชจ๋ ์์ฑ ํค์ ๊ฐ์ ์ถ๋ ฅํฉ๋๋ค.
๊ฐ์ฒด์ ์์ฑ ์ญ์
๊ฐ์ฒด์์ ์์ฑ์ ์ญ์ ํ ๋๋ delete
์ฐ์ฐ์๋ฅผ ์ฌ์ฉํฉ๋๋ค.
delete person.age;
console.log(person); // ๊ฒฐ๊ณผ: age ์์ฑ์ด ์ญ์ ๋ ๊ฐ์ฒด
delete
๋ฅผ ์ฌ์ฉํ๋ฉด ํน์ ์์ฑ์ ๊ฐ์ฒด์์ ์ ๊ฑฐํ ์ ์์ต๋๋ค.
๊ฐ์ฒด์ ์ฐธ์กฐ์ ๋ณต์ฌ
๊ฐ์ฒด๋ ์ฐธ์กฐ ํ์ ์ผ๋ก, ๊ฐ์ฒด๋ฅผ ๋ค๋ฅธ ๋ณ์์ ํ ๋นํ๋ฉด ๊ฐ์ฒด ์์ฒด๊ฐ ์๋ ๋ฉ๋ชจ๋ฆฌ ์ฃผ์๋ฅผ ๋ณต์ฌํฉ๋๋ค. ์ด๋ ๊ฐ์ฒด๋ฅผ ๋ณต์ฌํ์ ๋ ์๋ณธ ๊ฐ์ฒด๊ฐ ์์ ๋ ์ ์์์ ์๋ฏธํฉ๋๋ค.
let obj1 = { name: "Alice" };
let obj2 = obj1; // obj1์ ์ฐธ์กฐ๋ฅผ ๋ณต์ฌ
obj2.name = "Bob";
console.log(obj1.name); // ๊ฒฐ๊ณผ: "Bob"
์ ์์ ์์ obj2
๋ฅผ ์์ ํ๋ฉด, obj1
๋ ํจ๊ป ์์ ๋ฉ๋๋ค. ์ด๋ ๋ ๋ณ์๊ฐ ๋์ผํ ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ๊ณ ์๊ธฐ ๋๋ฌธ์
๋๋ค.
๊ฐ์ฒด ๋ณต์ฌ ๋ฐฉ๋ฒ
๊ฐ์ฒด๋ฅผ ์์ ํ ๋ณต์ฌํ๋ ค๋ฉด Object.assign()
๋๋ ์คํ๋ ๋ ์ฐ์ฐ์(...
)๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค.
Object.assign()
์ ์ฌ์ฉํ ๊ฐ์ฒด ๋ณต์ฌ
let obj1 = { name: "Alice" };
let obj2 = Object.assign({}, obj1);
obj2.name = "Bob";
console.log(obj1.name); // ๊ฒฐ๊ณผ: "Alice"
์คํ๋ ๋ ์ฐ์ฐ์๋ฅผ ์ฌ์ฉํ ๊ฐ์ฒด ๋ณต์ฌ
let obj1 = { name: "Alice" };
let obj2 = { ...obj1 };
obj2.name = "Bob";
console.log(obj1.name); // ๊ฒฐ๊ณผ: "Alice"
์ ๋ ๋ฐฉ๋ฒ์ ์ฌ์ฉํ๋ฉด ์๋ณธ ๊ฐ์ฒด์ ๋ ๋ฆฝ์ ์ธ ๋ณต์ฌ๋ณธ์ ๋ง๋ค ์ ์์ต๋๋ค.
๊ฒฐ๋ก
JavaScript ๊ฐ์ฒด๋ ๋ฐ์ดํฐ์ ๊ทธ ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ๋ ๋ฉ์๋๋ฅผ ํจ๊ป ๊ด๋ฆฌํ๋ ๊ฐ๋ ฅํ ๋๊ตฌ์ ๋๋ค. ๊ฐ์ฒด๋ฅผ ํ์ฉํด ๋ฐ์ดํฐ๋ฅผ ํจ์จ์ ์ผ๋ก ์ ์ฅํ๊ณ ์ฒ๋ฆฌํ ์ ์์ผ๋ฉฐ, ๊ฐ์ฒด์ ์์ฑ, ๋ฉ์๋, ์ฐธ์กฐ ๋ฑ์ ์ ์ดํดํ๋ฉด ๋ณด๋ค ๊ตฌ์กฐ์ ์ธ ํ๋ก๊ทธ๋จ์ ์์ฑํ ์ ์์ต๋๋ค.
JavaScript ๊ฐ์ฒด์ ๋ค์ํ ํ์ฉ ๋ฐฉ๋ฒ์ ์ตํ๊ณ ์ค์ ํ๋ก์ ํธ์ ์ ์ฉํด๋ณด์ธ์!
๋๊ธ ์ฐ๊ธฐ