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 ํ๋ก๊ทธ๋จ์ ์์ฑํด๋ณด์ธ์!
๋๊ธ ์ฐ๊ธฐ