JavaScript

JavaScript ๊ฐ์ฒด(Object)์˜ ๊ธฐ์ดˆ

kohi โ˜• 2022. 10. 8. 16:22

๐Ÿ” ๊ฐ์ฒด(Object)์˜ ๊ธฐ๋ณธ ์ •์˜


  • ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋Š” ๊ฐ์ฒด ๊ธฐ๋ฐ˜์˜ ์Šคํฌ๋ฆฝํŠธ ์–ธ์–ด์ด๊ณ , ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ด๋ฃจ๊ณ  ์žˆ๋Š” ๋Œ€๋ถ€๋ถ„์˜ ๊ฒƒ๋“ค์ด ๊ฐ์ฒด๋กœ ์กด์žฌํ•œ๋‹ค. ๋”ฐ๋ผ์„œ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ๊ธฐ์ดˆ๋ฅผ ๋‹ค์ง€๊ธฐ ์œ„ํ•ด์„œ ๊ฐ์ฒด์— ๋Œ€ํ•œ ์ดํ•ด๋Š” ํ•„์ˆ˜์ ์ด๋‹ค.
  • ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—๋Š” ์ด 8๊ฐ€์ง€์˜ ์ž๋ฃŒํ˜•์ด ์žˆ๋‹ค.
    • ๋ฌธ์ž(String)
    • ์ˆซ์ž(Number)
    • Bigint: ๊ธธ์ด ์ œ์•ฝ ์—†์ด ์ •์ˆ˜๋ฅผ ๋‚˜ํƒ€๋‚ผ ์ˆ˜ ์žˆ๋‹ค.
    • ๋ถˆ๋ฆฌ์–ธ(Boolean)
    • ์‹ฌ๋ณผ(Symbol): ๊ฐ์ฒด์˜ ๊ณ ์œ ํ•œ ์‹๋ณ„์ž๋ฅผ ๋งŒ๋“ค ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค.
    • Null: ๋ฏธ์ง€์˜ ๊ฐ’์„ ๋œปํ•˜๋ฉฐ, ํƒ€์ž…์€ ์กด์žฌํ•˜์ง€๋งŒ ๊ฐ’์€ ์—†๋‹ค.
    • Undefined: ๊ฐ’๋„ ์—†๊ณ , ํƒ€์ž…๋„ ์ง€์ •๋˜์ง€ ์•Š์€ ์ƒํƒœ
    • Object
  • ์ด๋“ค ์ค‘ Object๋ฅผ ์ œ์™ธํ•œ ๋‚˜๋จธ์ง€๋Š” ์˜ค์ง ํ•˜๋‚˜์˜ ๋ฐ์ดํ„ฐ๋งŒ ๋‹ด์„ ์ˆ˜ ์žˆ์–ด ์›์‹œํ˜•(Primitive type)์ด๋ผ ๋ถ€๋ฅธ๋‹ค. Object๋Š” ํ‚ค(Key)์™€ ๊ฐ’(Value)์œผ๋กœ ๊ตฌ์„ฑ๋œ ํ”„๋กœํผํ‹ฐ(Property)๋“ค์˜ ์ง‘ํ•ฉ์œผ๋กœ, ์›์‹œํ˜•๊ณผ ๋‹ฌ๋ฆฌ ๋‹ค์–‘ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ด์„ ์ˆ˜ ์žˆ๋‹ค.
  • ํ”„๋กœํผํ‹ฐ ๊ฐ’์œผ๋กœ ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜๋„ ์žˆ์œผ๋ฉฐ, ํ”„๋กœํผํ‹ฐ ๊ฐ’์ด ํ•จ์ˆ˜์ผ ๊ฒฝ์šฐ ์ผ๋ฐ˜ ํ•จ์ˆ˜์™€ ๊ตฌ๋ถ„ํ•˜๊ธฐ ์œ„ํ•ด ๋ฉ”์„œ๋“œ(Method)๋ผ ๋ถ€๋ฅธ๋‹ค.

 

๐Ÿ” ํ”„๋กœํผํ‹ฐ(Property)


let user = {
    name: "Mitt",
    age: 28,
};

 

์ค‘๊ด„ํ˜ธ {…} ์•ˆ์— ํ‚ค: ๊ฐ’ ์Œ์œผ๋กœ ๊ตฌ์„ฑ๋œ ํ”„๋กœํผํ‹ฐ ์˜ˆ์‹œ๋ฅผ ์ž‘์„ฑํ•˜์˜€๋‹ค.

  • ์ฝœ๋ก ์„ ๊ธฐ์ค€์œผ๋กœ ์™ผ์ชฝ์—๋Š” ํ‚ค(์ด๋ฆ„ or ์‹๋ณ„์ž)๊ฐ€, ์˜ค๋ฅธ์ชฝ์—๋Š” ๊ฐ’์ด ์œ„์น˜ํ•œ๋‹ค.
  • ๊ฐ์ฒด user์—๋Š” ํ”„๋กœํผํ‹ฐ ๋‘ ๊ฐœ๊ฐ€ ์žˆ๋‹ค.
    • ์ฒซ ๋ฒˆ์งธ ํ”„๋กœํผํ‹ฐ: “name”(์ด๋ฆ„)๊ณผ “Mitt”(๊ฐ’)
    • ๋‘ ๋ฒˆ์งธ ํ”„๋กœํผํ‹ฐ: “age”(์ด๋ฆ„)๊ณผ 28(๊ฐ’)
  • ๊ฐ์ฒด์˜ ํŠน์ • ํ”„๋กœํผํ‹ฐ ๊ฐ’์— ์ ‘๊ทผํ•˜๋Š” ๊ฒฝ์šฐ, ๊ฐ์ฒด์ด๋ฆ„.ํ”„๋กœํผํ‹ฐ์ด๋ฆ„ or ๊ฐ์ฒด์ด๋ฆ„[”ํ”„๋กœํผํ‹ฐ์ด๋ฆ„”] ํ˜•์‹์œผ๋กœ ์ ‘๊ทผํ•œ๋‹ค. ์œ„์˜ ์˜ˆ์‹œ์—์„œ console.log๋กœ age ๊ฐ’๋งŒ ์ถœ๋ ฅํ•˜๊ณ ์ž ํ•˜๋Š” ๊ฒฝ์šฐ,
    • console.log(user.age);
    • console.log(user[”age”]);

 

๐Ÿ” ๊ฐ์ฒด(Object)์˜ ์ƒ์„ฑ


  • ๊ฐ์ฒด ๋ฆฌํ„ฐ๋Ÿด
    • ๊ฐ์ฒด ์ƒ์„ฑ ๋ฐฉ์‹ ์ค‘ ๊ฐ€์žฅ ์ผ๋ฐ˜์ ์ธ ๋ฐฉ๋ฒ•์œผ๋กœ, ์ปจํ…์ธ ๋ฅผ ๊ทธ๋Œ€๋กœ ๋Œ€์ž…ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ๋งํ•œ๋‹ค.
    • ์•„๋ž˜์™€ ๊ฐ™์ด key : value ํ˜•์‹์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ง์ ‘ ์ž…๋ ฅํ•˜๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค.
let obj = {
    mitt: 28,
    sophie: 26,
    pickle: 23,
};

 

  • Object()
    • new Object()๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด ๋น„์–ด ์žˆ๋Š” ๊ฐ์ฒด๋ฅผ ํ˜ธ์ถœํ•œ๋‹ค. ๋”ฐ๋ผ์„œ ๊ฐ์ฒด ์ƒ์„ฑ ์ดํ›„ ํ”„๋กœํผํ‹ฐ๋ฅผ ๋”ฐ๋กœ ์ถ”๊ฐ€ํ•ด ์ค˜์•ผ ํ•œ๋‹ค.
let obj = new Object();

obj.name = "mitt";
obj.age = "28";

console.log(obj); // { name: 'mitt', age: '28' }
console.log(obj.name); // mitt

 

  • ์ƒ์„ฑ์ž ํ•จ์ˆ˜
    • ๋ฌธ๋ฒ•์ด Java์™€ ์œ ์‚ฌํ•˜๋ฉฐ, ๊ธฐ์กด ํ•จ์ˆ˜์— new ์—ฐ์‚ฐ์ž๋ฅผ ๋ถ™์—ฌ์„œ ํ˜ธ์ถœํ•˜๋ฉด ํ•ด๋‹น ํ•จ์ˆ˜๋Š” ์ƒ์„ฑ์ž ํ•จ์ˆ˜๋กœ ๋™์ž‘ํ•œ๋‹ค. ์ƒ์„ฑ์ž ํ•จ์ˆ˜์˜ ์ฒซ ๋ฌธ์ž๋Š” ๋Œ€๋ฌธ์ž๋กœ ํ‘œ๊ธฐํ•˜๋Š” ๊ฒƒ์ด ๊ด€๋ก€์ด๋‹ค.
    • ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๋™์ผํ•œ ํ”„๋กœํผํ‹ฐ๋ฅผ ๊ฐ€์ง€๋Š” ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๊ธฐ ์œ„ํ•ด ํ•„์š”ํ•˜๋‹ค.
function Person(name, age) {
    this.name = name;
    this.age = age;
    this.job = "student";
}

let person1 = new Person("mitt", "28");
let person2 = new Person("sophie", "26");

console.log(person1); // Person { name: 'mitt', age: '28', job: 'student' }
console.log(person2.name + " " + person2.age + " " + person2.job); // sophie 26 student

 

  • Object.create()
    • ๋ช…์‹œ์ ์œผ๋กœ ํ”„๋กœํ† ํƒ€์ž…์„ ์ง€์ •ํ•ด์„œ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค. ์ฃผ๋กœ ์ƒ์†์„ ํ‘œํ˜„ํ•  ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค.
let fruit = Object.create(Object.prototype, {
    name: {
        value: "์‚ฌ๊ณผ",
        writable: true,
        enumerable: true,
        configurable: true,
    },
    brix: {
        value: 10,
        writable: true,
        enumerable: true,
        configurable: true,
    },
});

 

  • ES6 ํด๋ž˜์Šค
    • ECMAScript 5๊นŒ์ง€ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—๋Š” ๊ฐ์ฒด ์ƒ์„ฑ์„ ์œ„ํ•œ ์„ค๊ณ„๋„์ธ ํด๋ž˜์Šค๊ฐ€ ์—†์—ˆ๋‹ค.
    • ECMAScript 6๋ถ€ํ„ฐ ์ด๋ฅผ ์ง€์›ํ•œ๋‹ค. ๋‹ค๋ฅธ ์–ธ์–ด๋“ค๊ณผ ๋น„์Šทํ•œ ํ˜•ํƒœ๋กœ ๊ฐ์ฒด ๋ฐ ๊ฐ์ฒด๊ฐ€ ๊ฐ€์ง„ ๋ฉ”์„œ๋“œ๋ฅผ ์ •์˜ํ•  ์ˆ˜ ์žˆ๋„๋ก ์ œ๊ณตํ•œ๋‹ค.
class Person {
    constructor(name, age, major) {
        this.name = name;
        this.age = age;
        this.major = major;
    }

    id() {
        return `${this.name}${this.age}${this.major}`;
    }
}

let p1 = new Person("mitt", 28, "business");
let p2 = new Person("pickle", 23, "laws");

console.log(p1); // Person { name: 'mitt', age: 28, major: 'business' }
console.log(p2.id()); // pickle23laws

 

๐Ÿ” ํ”„๋กœํ† ํƒ€์ž…(Prototype)


  • ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ๋ชจ๋“  ๊ฐ์ฒด๋Š” ํ”„๋กœํ† ํƒ€์ž…์ด๋ผ๋Š” ๊ฐ์ฒด๋ฅผ ๊ฐ€์ง„๋‹ค. ๋ชจ๋“  ๊ฐ์ฒด๋Š” ๊ทธ๋“ค์˜ ํ”„๋กœํ† ํƒ€์ž…์œผ๋กœ๋ถ€ํ„ฐ ํ”„๋กœํผํ‹ฐ์™€ ๋ฉ”์„œ๋“œ๋ฅผ ์ƒ์† ๋ฐ›๋Š”๋‹ค.
  • ์ด์ฒ˜๋Ÿผ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ๋ชจ๋“  ๊ฐ์ฒด๋Š” ์ตœ์†Œํ•œ ํ•˜๋‚˜ ์ด์ƒ์˜ ๋‹ค๋ฅธ ๊ฐ์ฒด๋กœ๋ถ€ํ„ฐ ์ƒ์†์„ ๋ฐ›์œผ๋ฉฐ, ์ด๋•Œ ์ƒ์†๋˜๋Š” ์ •๋ณด๋ฅผ ์ œ๊ณตํ•˜๋Š” ๊ฐ์ฒด๋ฅผ ํ”„๋กœํ† ํƒ€์ž… ๊ฐ์ฒด, ํ˜น์€ ํ”„๋กœํ† ํƒ€์ž…์ด๋ผ๊ณ  ํ•œ๋‹ค.

 

๐Ÿ” For … in


  • ๋ฐฐ์—ด์—์„œ๋Š” ๋‹จ์ˆœ For๋ฌธ์œผ๋กœ๋„ key์™€ value๋ฅผ ๊บผ๋‚ผ ์ˆ˜ ์žˆ๋Š”๋ฐ, ๊ฐ์ฒด๋ฅผ ๋‹ค๋ฃฐ ๋•Œ๋Š” ๋‹จ์ˆœ For๋ฌธ์œผ๋กœ๋Š” ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค. ๋ฐ˜๋“œ์‹œ For … in ๋ฌธ์„ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค. — For in ๋ฌธ์„ ๋Œ๋ฆฌ๋ฉด์„œ ์›ํ•˜๋Š” ๊ฐ’ ์ง€์ •
// ๋‹จ์ˆœ For ๋ฌธ ์‚ฌ์šฉ --> Case 1 :: Array

let arr = ["mitt", "jerry", "tom", "nick"];

for (let i = 0; i < arr.length; i++) {
    console.log(arr[i]);
} // mitt jerry tom nick

console.log("==========================");

// For in ๋ฌธ ์‚ฌ์šฉ --> Case 2 :: Object
let person = {
    name: "mitt",
    age: 28,
    gender: "female",
};

for (let key in person) {
    console.log("key: ", key);
    console.log("value: ", person[key]);
}

์œ„ ์˜ˆ์ œ ์ถœ๋ ฅ ๊ฒฐ๊ณผ