Responsive Advertisement

JavaScript Object Constructors: ๊ฐ์ฒด ์ƒ์„ฑ์ž ์‚ฌ์šฉ๋ฒ•

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

JavaScript์—์„œ ๊ฐ์ฒด ์ƒ์„ฑํ•˜๋Š” ๋ฐฉ๋ฒ•

JavaScript์—์„œ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๊ฐ€์žฅ ๊ฐ„๋‹จํ•œ ๋ฐฉ๋ฒ•์€ ๊ฐ์ฒด ๋ฆฌํ„ฐ๋Ÿด์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ฐ์ฒด ๋ฆฌํ„ฐ๋Ÿด์€ ์ค‘๊ด„ํ˜ธ {}๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ•˜๋‚˜์˜ ๊ฐ์ฒด๋ฅผ ์ง์ ‘ ์ •์˜ํ•˜๋Š” ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค.

let person = {
    name: "Alice",
    age: 25,
    greet: function() {
        console.log("Hello, my name is " + this.name);
    }
};

์œ„์˜ ์ฝ”๋“œ๋Š” person ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๊ณ , ๊ทธ ์•ˆ์— name๊ณผ age ์†์„ฑ, ๊ทธ๋ฆฌ๊ณ  greet๋ผ๋Š” ๋ฉ”์„œ๋“œ๋ฅผ ์ •์˜ํ•œ ๊ฐ์ฒด ๋ฆฌํ„ฐ๋Ÿด์˜ ์˜ˆ์ž…๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ๊ฐ์ฒด๋ฅผ ์—ฌ๋Ÿฌ ๊ฐœ ์ƒ์„ฑํ•  ๋•Œ๋งˆ๋‹ค ์ด ๋ฐฉ์‹์œผ๋กœ ์ž‘์„ฑํ•˜๋Š” ๊ฒƒ์€ ๋น„ํšจ์œจ์ ์ž…๋‹ˆ๋‹ค. ์ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ๊ฐ์ฒด ์ƒ์„ฑ์ž ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ฐ์ฒด ์ƒ์„ฑ์ž๋ž€?

๊ฐ์ฒด ์ƒ์„ฑ์ž(Constructor)๋Š” ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๊ธฐ ์œ„ํ•œ ํ•จ์ˆ˜์ž…๋‹ˆ๋‹ค. ์ด ํ•จ์ˆ˜๋Š” ์ƒˆ๋กœ์šด ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๊ณ , ๊ทธ ๊ฐ์ฒด์— ์†์„ฑ๊ณผ ๋ฉ”์„œ๋“œ๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค. ๊ฐ์ฒด ์ƒ์„ฑ์ž๋Š” ๋ณดํ†ต ์ฒซ ๊ธ€์ž๋ฅผ ๋Œ€๋ฌธ์ž๋กœ ์‹œ์ž‘ํ•˜๋Š” ์ด๋ฆ„์œผ๋กœ ์ •์˜๋˜๋ฉฐ, new ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

๊ฐ์ฒด ์ƒ์„ฑ์ž ํ•จ์ˆ˜ ์ •์˜

๊ฐ์ฒด ์ƒ์„ฑ์ž๋Š” ํ•จ์ˆ˜์ฒ˜๋Ÿผ ์ •์˜๋˜๋ฉฐ, ์ƒ์„ฑํ•  ๊ฐ์ฒด์˜ ์†์„ฑ๊ณผ ๋ฉ”์„œ๋“œ๋ฅผ ์„ค์ •ํ•˜๋Š” ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค.

function Person(name, age) {
    this.name = name;
    this.age = age;
    this.greet = function() {
        console.log("Hello, my name is " + this.name);
    };
}

์œ„์˜ Person ์ƒ์„ฑ์ž ํ•จ์ˆ˜๋Š” name๊ณผ age ์†์„ฑ์„ ๊ฐ€์ง„ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๋ฉฐ, greet๋ผ๋Š” ๋ฉ”์„œ๋“œ๋ฅผ ํฌํ•จํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ƒ์„ฑ์ž ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๊ฐ์ฒด๋ฅผ ์‰ฝ๊ฒŒ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ฐ์ฒด ์ƒ์„ฑ์ž ์‚ฌ์šฉ

new ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐ์ฒด ์ƒ์„ฑ์ž๋ฅผ ํ˜ธ์ถœํ•˜๋ฉด, ํ•ด๋‹น ํ•จ์ˆ˜๋Š” ์ƒˆ๋กœ์šด ๊ฐ์ฒด๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

let person1 = new Person("Alice", 25);
let person2 = new Person("Bob", 30);

person1.greet();  // ๊ฒฐ๊ณผ: "Hello, my name is Alice"
person2.greet();  // ๊ฒฐ๊ณผ: "Hello, my name is Bob"

์œ„ ์ฝ”๋“œ์—์„œ๋Š” new Person()์„ ์‚ฌ์šฉํ•ด ๊ฐ๊ฐ person1๊ณผ person2 ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ–ˆ์Šต๋‹ˆ๋‹ค. ์ƒ์„ฑ๋œ ๊ฐ์ฒด๋“ค์€ ๋ชจ๋‘ name๊ณผ age ์†์„ฑ์„ ๊ฐ€์ง€๊ณ  ์žˆ์œผ๋ฉฐ, greet ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

this ํ‚ค์›Œ๋“œ์˜ ์—ญํ• 

๊ฐ์ฒด ์ƒ์„ฑ์ž ํ•จ์ˆ˜ ๋‚ด์—์„œ ์‚ฌ์šฉ๋˜๋Š” this ํ‚ค์›Œ๋“œ๋Š” ์ƒˆ๋กญ๊ฒŒ ์ƒ์„ฑ๋œ ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ•ฉ๋‹ˆ๋‹ค. ์ฆ‰, this.name = name๊ณผ ๊ฐ™์ด ์ž‘์„ฑํ•˜๋ฉด, ์ƒ์„ฑ๋œ ๊ฐ์ฒด์˜ name ์†์„ฑ์— ์ „๋‹ฌ๋œ ๊ฐ’์„ ํ• ๋‹นํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

์œ„์—์„œ ์„ค๋ช…ํ•œ ์˜ˆ์ œ์—์„œ person1๊ณผ person2๋Š” ๊ฐ๊ฐ ์ž์‹ ๋งŒ์˜ name๊ณผ age ์†์„ฑ์„ ๊ฐ€์ง€๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. this๋Š” ์ƒ์„ฑ๋˜๋Š” ๊ฐ๊ฐ์˜ ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ•˜๊ธฐ ๋•Œ๋ฌธ์—, ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•  ๋•Œ๋„ ๊ฐ ๊ฐ์ฒด๋Š” ๋…๋ฆฝ์ ์œผ๋กœ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค.

ํ”„๋กœํ† ํƒ€์ž…(Prototype) ํ™œ์šฉ

๊ฐ์ฒด ์ƒ์„ฑ์ž๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ ํ”„๋กœํ† ํƒ€์ž…(Prototype)์„ ํ™œ์šฉํ•˜๋ฉด ๋ฉ”๋ชจ๋ฆฌ ํšจ์œจ์„ฑ์„ ๋†’์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ƒ์„ฑ์ž ํ•จ์ˆ˜ ๋‚ด๋ถ€์— ๋ฉ”์„œ๋“œ๋ฅผ ์ •์˜ํ•  ๊ฒฝ์šฐ, ๊ฐ ๊ฐ์ฒด๋งˆ๋‹ค ๋™์ผํ•œ ๋ฉ”์„œ๋“œ๊ฐ€ ์ค‘๋ณต ์ƒ์„ฑ๋˜๋ฏ€๋กœ ๋ฉ”๋ชจ๋ฆฌ ๋‚ญ๋น„๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ํ”„๋กœํ† ํƒ€์ž…์„ ์‚ฌ์šฉํ•˜๋ฉด, ๋ชจ๋“  ๊ฐ์ฒด๊ฐ€ ๊ฐ™์€ ๋ฉ”์„œ๋“œ๋ฅผ ๊ณต์œ ํ•˜๊ฒŒ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ”„๋กœํ† ํƒ€์ž…์„ ์‚ฌ์šฉํ•œ ๋ฉ”์„œ๋“œ ์ •์˜

function Person(name, age) {
    this.name = name;
    this.age = age;
}

Person.prototype.greet = function() {
    console.log("Hello, my name is " + this.name);
};

์ด ๋ฐฉ์‹์œผ๋กœ greet ๋ฉ”์„œ๋“œ๋ฅผ Person ์ƒ์„ฑ์ž์˜ ํ”„๋กœํ† ํƒ€์ž…์— ์ถ”๊ฐ€ํ•˜๋ฉด, ๋ชจ๋“  Person ๊ฐ์ฒด๋Š” ๋™์ผํ•œ greet ๋ฉ”์„œ๋“œ๋ฅผ ๊ณต์œ ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์ ˆ์•ฝํ•˜๋ฉด์„œ๋„ ๋™์ผํ•œ ๋™์ž‘์„ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

let person1 = new Person("Alice", 25);
let person2 = new Person("Bob", 30);

person1.greet();  // ๊ฒฐ๊ณผ: "Hello, my name is Alice"
person2.greet();  // ๊ฒฐ๊ณผ: "Hello, my name is Bob"

์œ„ ์ฝ”๋“œ์—์„œ person1๊ณผ person2๋Š” ์—ฌ์ „ํžˆ ๊ฐ๊ฐ ๋…๋ฆฝ์ ์ธ ๊ฐ์ฒด๋กœ ๋™์ž‘ํ•˜์ง€๋งŒ, greet ๋ฉ”์„œ๋“œ๋Š” ๋ฉ”๋ชจ๋ฆฌ์— ํ•œ ๋ฒˆ๋งŒ ์ €์žฅ๋˜์–ด ๋ชจ๋“  ๊ฐ์ฒด๊ฐ€ ์ด๋ฅผ ๊ณต์œ ํ•ฉ๋‹ˆ๋‹ค.

๋‚ด์žฅ ๊ฐ์ฒด ์ƒ์„ฑ์ž

JavaScript์—๋Š” ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๋‚ด์žฅ ๊ฐ์ฒด ์ƒ์„ฑ์ž๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด Array, Date, String๊ณผ ๊ฐ™์€ ์ƒ์„ฑ์ž ํ•จ์ˆ˜๋“ค์ด ๋‚ด์žฅ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

Array ์ƒ์„ฑ์ž

let numbers = new Array(1, 2, 3);
console.log(numbers);  // ๊ฒฐ๊ณผ: [1, 2, 3]

Date ์ƒ์„ฑ์ž

let today = new Date();
console.log(today);  // ๊ฒฐ๊ณผ: ํ˜„์žฌ ๋‚ ์งœ์™€ ์‹œ๊ฐ„

์ด์ฒ˜๋Ÿผ ๋‚ด์žฅ๋œ ์ƒ์„ฑ์ž๋ฅผ ์‚ฌ์šฉํ•ด ๊ธฐ๋ณธ์ ์ธ ๋ฐ์ดํ„ฐ ํƒ€์ž…์„ ์ƒ์„ฑํ•˜๊ณ  ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ฒฐ๋ก 

JavaScript์˜ ๊ฐ์ฒด ์ƒ์„ฑ์ž๋Š” ์œ ์‚ฌํ•œ ๊ฐ์ฒด๋ฅผ ์—ฌ๋Ÿฌ ๊ฐœ ์ƒ์„ฑํ•  ๋•Œ ๋งค์šฐ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค. new ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•ด ๊ฐ์ฒด๋ฅผ ์‰ฝ๊ฒŒ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, this ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•ด ๊ฐ ๊ฐ์ฒด๊ฐ€ ๋…๋ฆฝ์ ์œผ๋กœ ๋™์ž‘ํ•˜๋„๋ก ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ ํ”„๋กœํ† ํƒ€์ž…์„ ํ™œ์šฉํ•˜๋ฉด ๋ฉ”๋ชจ๋ฆฌ ํšจ์œจ์„ฑ์„ ๋†’์ด๋ฉด์„œ๋„ ๋™์ผํ•œ ๋ฉ”์„œ๋“œ๋ฅผ ์—ฌ๋Ÿฌ ๊ฐ์ฒด๊ฐ€ ๊ณต์œ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ฐ์ฒด ์ƒ์„ฑ์ž์™€ ํ”„๋กœํ† ํƒ€์ž…์„ ์ž˜ ํ™œ์šฉํ•˜๋ฉด, ์ฝ”๋“œ์˜ ์žฌ์‚ฌ์šฉ์„ฑ๊ณผ ํšจ์œจ์„ฑ์„ ๋†’์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ๋” ํšจ์œจ์ ์ธ JavaScript ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•ด๋ณด์„ธ์š”!

๋Œ“๊ธ€ ์“ฐ๊ธฐ