Bibi's DevLog ๐ค๐
[์ธํ๋ฐ] Javascript์ ๋ฌธ - ๊ฐ์ฒด 2 : ๊ฐ์ฒด์ ์์ฑ์(์์ฑ์๋ฅผ ์ฌ์ฉํด ๊ฐ์ฒด ๋ง๋ค๊ธฐ) ๋ณธ๋ฌธ
[์ธํ๋ฐ] Javascript์ ๋ฌธ - ๊ฐ์ฒด 2 : ๊ฐ์ฒด์ ์์ฑ์(์์ฑ์๋ฅผ ์ฌ์ฉํด ๊ฐ์ฒด ๋ง๋ค๊ธฐ)
๋น๋น bibi 2020. 10. 20. 16:01* ์ด ๊ธ์ ์ธํ๋ฐ์์ ์ ๊ณตํ๋ ํธ๋ ์ค๋์ ์ ๋ฃ ๊ฐ์ '์ฝ๊ณ ์์ฐ์ค๋ฝ๊ฒ ๋ฐฐ์๋ณด๋ Javascript ์ ๋ฌธ - ์ฝ๋์ค์ฟผ๋ ๋ง์คํฐ์ฆ ์ฝ์ค ๋ ๋ฒจ1'๋ฅผ ๋ฃ๊ณ ๊ณต๋ถํ๋ฉฐ ์ ๋ฆฌํ ๊ธ์ ๋๋ค. ๊ฐ์ ๋ด์ฉ์ ๋ํด, ์ ๊ฐ ํ๊ธฐํ๊ณ ๊ตฌ๊ธ๋งํ ๋ด์ฉ์ด ์ ๋ฆฌ๋์ด ์์ต๋๋ค. ์ด๋ณด์ธ ์ ๊ฐ ์ดํดํ ๋๋ก ์ ๋ฆฌํ๊ธฐ ๋๋ฌธ์, ๋ถ์ ํํ ๋ด์ฉ์ด ์์ ์ ์์์ ๊ฐ์ํด ์ฃผ์๊ธธ ๋ฐ๋๋๋ค. ๊ฐ์๋ฅผ ๋ฃ๊ณ ๋ด์ฉ์ ์ ๋ฆฌํ ๊ธ์ด๊ธฐ ๋๋ฌธ์ ๋ฌธ์ ๊ฐ ๋์ง ์๋๋ค๋ ์ธํ๋ฐ ์ธก ๋ต๋ณ์ ๋ฐ์ ์ ์ด ์์ผ๋(https://bibi6666667.tistory.com/37), ์ ์๊ถ์ ๋ฌธ์ ๊ฐ ๋๋ค๋ฉด ๋ณดํธ ๋ชจ๋(๋น๊ณต๊ฐ)๋ก ์ ํํ๊ฒ ์ต๋๋ค.
๊ฐ์ฒด์ ์์ฑ์ ์ดํด๋ณด๊ธฐ
๋ณต์ต
๊ฐ์ฒด object ๋ ์ ์ง ๋ณด์๋ฅผ ์ฝ๊ฒ ํ๊ธฐ ์ํด์ ๊ฐ๋ค์ ๋ฌถ์ด ๋์ ๊ฒ์ผ๋ก, ์์ฑproperty๊ณผ ๋ฉ์๋method๋ฅผ ๊ฐ์ง๋๋ค.
var p1 = {
"name": "honux", // ์์ฑ(ํ๋กํผํฐ)
"eat": function(food) { // ๋ฉ์๋
};
};
์์ฑ์๋ก ์ฌ๋ฌ ๊ฐ์ฒด๋ฅผ ์ฝ๊ฒ ๋ง๋ค๊ธฐ
var a = {"name" = "์์์ค", "hp" : 999999};
๊ฐ์ฒด๋ฅผ ํ ๋๊ฐ ๋ง๋ค ๋๋ ๊ทธ๋ฅ ์ ์ฝ๋์ฒ๋ผ JSONํ๊ธฐ๋ฒ์ผ๋ก ๋์ดํด ๋ง๋ค๋ฉด ๋๋ค.
ํ์ง๋ง ๋น์ทํ ํ์์ ๊ฐ์ฒด๋ฅผ '์ฌ๋ฌ ๊ฐ' ๋ง๋ค์ด์ผ ํ ๋, ๋งค๋ฒ ์์ ๊ฐ์ ์ฝ๋๋ฅผ ์
๋ ฅํ๋ ๊ฒ์ ๋งค์ฐ ๋ฒ๊ฑฐ๋กญ๋ค.
๋ฐ๋ผ์ ๋น์ทํ ๊ฐ์ฒด๋ฅผ ์ฌ๋ฌ ๊ฐ ๋ง๋ค ๋๋ ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ ํจ์, ์์ฑ์Constructor๋ฅผ ์ด์ฉํ๋ค.
(์์ฑ์Constructor : ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ ํจ์)
-์์ฑ์๋ ๊ด๋ก์ ๋๋ฌธ์๋ก ์์ํ๋ ๊ฒฝ์ฐ๊ฐ ๋ง์ต๋๋ค.
-์์ฑ์์ ํํ
var ์์ฑ์ ์ด๋ฆ = function(์์ฑ์์ ๋งค๊ฐ๋ณ์๋ค) {
this.์์ฑ1 = ;
this.์์ฑ2 = ;
...
this.๋ฉ์๋1 = function(๋ฉ์๋1์ ๋งค๊ฐ๋ณ์) { ..
};
this.๋ฉ์๋2 = function(๋ฉ์๋2์ ๋งค๊ฐ๋ณ์) { ..
};
};
//Human ํด๋์ค๋ฅผ ์ ์ํ๋ ํจ์ = ์์ฑ์
var Human = function(name, hp, power) {
this.name = name;
this.hp = hp;
this.power = power;
this.attack = function(target) {
console.log(this.name + "์ด " + target.name + "์ ๊ณต๊ฒฉํ๋ค.");
target.hp -= this.power;
};
this.show = function() {
console.log("%s %d" , this.name, this.hp);
};
};
โ "%s $d" ์ ์๋ฏธ : ์ถ๋ ฅํ์(type)์ ์๋ ค์ฃผ๋ ๊ฒ.
%s = (string์ ์ฝ์) ๋ค์ '๋ฌธ์์ด'์ ์ถ๋ ฅํ๋ค. ์ฆ ์์ ์ฝ๋์์๋ this.name์ ์ถ๋ ฅ
%d = (decimals = ์์ ์ ์ฝ์) ๋ค์ '์ซ์'๋ฅผ ์ถ๋ ฅํ๋ค. ์ฆ ์์ ์ฝ๋์์๋ this.hp๋ฅผ ์ถ๋ ฅ
์์ฑ์๋ฅผ ์ด์ฉํด์ ๊ฐ์ฒด ๋ง๋ค๊ธฐ
์์ฑ์๋ฅผ ์ด์ฉํด์ ๊ฐ์ฒด๋ฅผ ๋ง๋ค ๋๋ new ๋ผ๋ ํค์๋๋ฅผ ์ฌ์ฉํฉ๋๋ค.
var p1 = new Human("honux", 100, 10);
var p2 = new Human("crong", 200, 1);
var p3 = new Human("pobi", 50, 30);
p1.attack(p2); // honux์ด crong์ ๊ณต๊ฒฉํ๋ค.
p2; // Human {name: "crong", hp: 190, pow: 1, attack: f, show: f}
// (crong์ ์ฒด๋ ฅ์ด 10 ๊น์๋ค)
p3.attack(p2); // pobi์ด crong์ ๊ณต๊ฒฉํ๋ค.
p2; // Human {name: "crong", hp: 160, pow: 1, attack: f, show: f}
// (crong์ ์ฒด๋ ฅ์ด 30 ๊น์๋ค)
p1.show(); // [honux] 100
p2.show(); // [crong] 159
p3.show(); // [pobi] 50
์ ์ฝ๋์์ p1/p2/p3์ "๊ฐ์ฒด" ๋๋ "(ํด๋์ค์) ์ธ์คํด์คinstance"๋ผ๊ณ ํฉ๋๋ค.
๋, p1/p2/p3์ ๋ณ์ ์ค์์๋ "์ฐธ์กฐ ๋ณ์"์
๋๋ค.
์ฐธ์กฐ ๋ณ์๋ ๊ฐ์ฒด์ ๋ณ์์ด๋ฉฐ, ์ฐธ์กฐ ๋ณ์์ ๋ํด์๋ ๋ค์์ ๋ค์ ์ค๋ช
ํฉ๋๋ค.
์ฝ์ ๋ : Human ํด๋์ค์ ์ธ์คํด์ค p1/p2/p3์ด๋ค.
โ ์ธ์คํด์ค instance : ์/๊ฒฝ์ฐ/์ฌ๋ก(โexample, case) ๋ผ๋ ๋ป์ด๋ค.
-์ธ์คํด์ค๋ผ๋ ์ฉ์ด ์์ฒด๋ '๊ฐ์ฒดobject'์ ์ ์ฌํ๋,
๊ฐ์ฒด๋ ๋ ์ผ๋ฐ์ ์ธ ์๋ฏธ์ด๋ฉฐ / ์ธ์คํด์ค๋ ํ์ฌ ์์ฑ๋ ๊ทธ ๊ฐ์ฒด๋ผ๋ ๋ ๊ตฌ์ฒด์ ์ธ ์๋ฏธ์ด๋ค.
์์ฑ์๋ฅผ ์ฌ์ฉํ๋ ์ด์
- ๊ฐ์ฒด๋ฅผ ํ๋๋ง ๋ง๋ค ๋๋ ๊ฐ๋จํ json ํ๊ธฐ๋ฒ์ผ๋ก ๋ง๋ญ๋๋ค.
- ์ฌ๋ฌ ๊ฐ์ฒด๋ฅผ ๋ง๋ค๊ณ ์ถ์ ๋๋ ์์ฑ์๋ฅผ ํตํด์ ๋ง๋ญ๋๋ค.
์์
- Food(name, energy) ์์ฑ์๋ฅผ ๋ง๋ค์ด ๋ด ์๋ค.
- eat(food) ๋ฉ์๋๋ฅผ Human() ์์ฑ์ ์์ ์ถ๊ฐํด ๋ด ์๋ค.
- ๋๋์ธ ๊ฐ์ฒด๋ฅผ ์์ฑํด์ ํด๋จผ ๊ฐ์ฒด์๊ฒ ๋จน์ฌ ๋ด ์๋ค.
///// ์์ ํ์ด - Human.eat(food)๋์ Food.feed(human) ์ผ๋ก ๋ณํ.
var Food = function(name, energy) {
this.name = name;
this.energy = energy;
this.feed = function(human) {
human.hp += this.energy;
};
};
var d = new Food('donut', 30);
// ์๋ก ๋ง๋ค ๋๋ ๊ผญ new๋ฅผ ์ ๊ธฐ!
d // Food {name: "donut", energy: 30, feed: f}
p2; // Human {name: "crong", hp: 159, pow: 1, attack: f, show: f}
d.feed(p2);
p2; // Human {name: "crong", hp: 189, pow: 1, attack: f, show: f}
// d (๋๋)์ ๋จน์ฌ์ crong์ hp๊ฐ 30 ์ฆ๊ฐํ๋ค.
d.feed(p2);
p2; // Human {name: "crong", hp: 219, pow: 1, attack: f, show: f}
// d (๋๋)์ ํ ๋ฒ ๋ ๋จน์ฌ์ crong์ hp๊ฐ 30 ๋ ์ฆ๊ฐํ๋ค.
๊ฐ์ฒด ์กฐ๊ธ ๋ ๊ณต๋ถํ๊ธฐ
๋ ๊ณต๋ถํ๊ณ ์ถ์ผ์ ๋ถ๋ค์ ์ํ ์ฝ๋ฉ์ ์๋ ํ์ด์ง๋ฅผ ๊ณต๋ถํด ๋ณด์ธ์. https://opentutorials.org/course/743/6553
์ํ์ฝ๋ฉ - ๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ ์ค๋ฆฌ์ํ ์ด์ (1. ๊ฐ์ฒด / 2. ์ค๊ณ์ ์ถ์ํ / 3. ๋ถํํ)