๐ Javascrip๋ ๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์์ ๊ธฐ๋ณธ์ ์ผ๋ก ์ ๊ณตํ๋ Class๋ผ๋ ๊ฐ๋
์ ์ ๊ณตํ์ง ์๋๋ค.
ํ์ง๋ง Javascript์์๋ Class์ฒ๋ผ ์ฌ์ฉํ ์ ์๋ ๋ฐฉ๋ฒ์ 3๊ฐ์ง ์ง์ํ๋ค.
๐ ๋ฆฌํฐ๋ด ๋ฐฉ์
, ํจ์ ๋ฐฉ์
, ํ๋กํ ํ์
๋ฐฉ์
Function
ํน์ ๋ก์ง์ ๊ตฌํํ๋ ๋ณ์์ ์คํ ์ฝ๋๋ก ๊ตฌ์ฑ.
๊ธฐ๋ฅ ๋จ์์ ์ฝ๋ ๊ทธ๋ฃนํ(๊ธฐ๋ฅ ๋จ์์ ์ค๋ณต์ฝ๋ ์ ๊ฑฐ ๋ฐ ์ฝ๋ ์ฌ์ฌ์ฉ)
Class
์ฐ๊ด ์๋ ๋ณ์์ ํจ์(๋ฉ์๋)๋ก ๊ตฌ์ฑ.
๊ฐ์ฒด ๋จ์์ ์ฝ๋ ๊ทธ๋ฃนํ(๊ฐ์ฒด ๋จ์์ ์ค๋ณต์ฝ๋ ์ ๊ฑฐ ๋ฐ ์ฝ๋ ์ฌ์ฌ์ฉ)
โก ๊ฐ์ฒด๋ก ๋ฌถ์ด์ ๋ณ์์ ํจ์(๋ฉ์๋)๋ฅผ ๊ตฌ๋ถํด์ ์ฝ๋๋ฅผ ์์ฑํ๋ฉด ํ์ํ ํจ์๋ค์ ์ฐพ๊ธฐ ํธํด์ง๊ณ , ๊ฐ์ฒด๋จ์์ ์ฝ๋ ์ฌ์ฌ์ฉ ๋ฐ ์ค๋ณต์ฝ๋๋ฅผ ์ ๊ฑฐํ ์ ์๋ค.
โฉ Class = Object
ex. ๋ถ์ด๋นต ํ
โฉ Instance = Object
ex. ๋ถ์ด๋นต ํ๋ก ๋ง๋ค์ด๋ธ ๋ถ์ด๋นต
โ Class์ ํ๋กํผํฐ ์ด๊ธฐํ ์ญํ (์๋์ผ๋ก Class๋ฅผ ํธ์ถ๋๋ ํจ์)
โฉ Property = Class ๋ด๋ถ์ ๋ง๋๋ ๋ณ์(=๋ฉค๋ฒ๋ณ์
)
ex. ๋ถ์ด๋นต ์์ ๋ค์ด๊ฐ๋ ํฅ
(์ํฌ๋ฆผ ๋์ฒด ๊ฐ๋ฅ)
์ฆ ํด๋์ค ๊ฐ์ฒด ๋ด๋ถ์์ ์ฌ์ฉํ๋ ์ ๋ณด๋ก์จ ์ฒ๋ฆฌํ ๊ฒฐ๊ณผ๊ฐ ์ ์ฅ.
โฉ Method = Class ๋ด๋ถ์ ๋ง๋๋ ํจ์(=๋ฉค๋ฒํจ์
)
ex. ๋ถ์ด๋นต ์์ ๋ค์ด๊ฐ๋ ํฅ
(๋ถ์ด๋นต ์์ ์์ ๋ถ์ด๋นต ๊ฐ์ ๊ฐ๋
)
์ฆ ๊ฐ์ฒด ๋ด ํจ์ ํ๋กํผํฐ๋ก์จ, ์ฃผ๋ก ๊ฐ์ฒด ํ๋กํผํฐ ๊ฐ ๋ณ๊ฒฝ ๋ฐ ํ์.
๐ ํด๋์ค๋ ๊ฒฐ๊ตญ ๊ฐ์ฒด(object)๋ฅผ ์ ์ค๊ณํ๊ธฐ ์ํ ํ์ด๋ผ๊ณ ํ ์ ์๋ค. ์ด ๋ ๊ฐ์ฒด๋ ํน์ ๋ก์ง์ ๊ฐ๊ณ ์๋ ํ๋(method)์ ๋ณ๊ฒฝ ๊ฐ๋ฅํ ์ํ(๋ณ์)๋ฅผ ๊ฐ๋๋ค.
์ํ๋ ๊ตฌ์กฐ์ ๊ฐ์ฒด ํ(=class)์ ์ง ๋๊ณ , ๋น์ทํ ๋ชจ์์ ๊ฐ์ฒด(=instance)๋ฅผ ๊ณต์ฅ์ฒ๋ผ ์ฐ์ด๋ผ ์ ์๋ค.
๐ class๋ก ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ ๊ณผ์ ์ ์ธ์คํด์คํ
๋ผ๊ณ ๋ถ๋ฅธ๋ค
// ํด๋์ค ์์ฑ class Car { constructor(name, price) { //constructor ๋ฉ์๋๋ 2๊ฐ์ ์ธ์๋ฅผ ๋ฐ์๋ค.(=๋ฉค๋ฒ๋ณ์) // ๋ฉค๋ฒ๋ณ์: ํด๋์ค ๋ด์์ name, price์ ๊ฐ์ด ๋ณ๊ฒฝ ๊ฐ๋ฅํ ์ํ๊ฐ์ด์ class๋ด์ ์ปจํ ์คํธ์์ ์ด๋ ๊ณณ์์๋ ์ฌ์ฉํ ์ ์๋ ๋ณ์ this.name = name; this.price = price; } } // ์ธ์คํด์ค ์์ฑ(Carํด๋์ค์ instance๋ฅผ morning์ด๋ผ๋ ๋ณ์์ ์ ์ฅ) const morning = new Car('morning', 200); //constructor()์ ์ธ์(name๊ณผ price)๋ฅผ ์ฌ์ฉํด Car instance์ name, priceํ๋กํผํฐ์ ๊ฐ์ ํ ๋น
- Car๋ ํด๋์ค ์ด๋ฆ(โ ํญ์
๋๋ฌธ์
๋ก ์์, CarmelCase)- Car ํด๋์ค์ ์ธ์คํด์ค๋ฅผ ์์ฑํ ๋๋ง๋ค
constructor
๋ฉ์๋๊ฐ ํธ์ถ๋๋ค.- ํด๋์ค๋ ํ๋กํผํฐ๋ง๋ค
;
๋ก ๊ตฌ๋ถ
(์ผ๋ฐ ๊ฐ์ฒด๋ ํ๋กํผํฐ๋ง๋ค,
(์ฝค๋ง)๋ก ๊ตฌ๋ถ)- ์ธ์คํด์ค๋ ํด๋์ค๋ฅผ ํตํด ์์ฑ๋ ๊ฐ์ฒด.
class์ property์ด๋ฆ๊ณผ method๋ฅผ ๊ฐ๋ ๊ฐ์ฒด
์ด๋ค. (์ธ์คํด์ค๋ง๋ค ๋ชจ๋ ๋ค๋ฅธ property value(๊ฐ) ์ ๊ฐ๊ณ ์๋ค)- ์๋ก์ด ์ธ์คํด์ค๋ฅผ ์์ฑํ๋ ค๋ฉด
new
ํค์๋๊ฐ ํ์. ์ฆnew
ํค์๋๋ constructor()๋ฉ์๋๋ฅผ ํธ์ถํ๊ณ ์๋ก์ด ์ธ์คํด์ค๋ฅผ returnํด์ค๋ค.
๋ฆฌํฐ๋ด ๋ฐฉ์
์ผ๋ก Class Object ๋ง๋ค๊ธฐvar user = { // instance name : "kirin", // property1 age : 20, // property2 showInfo : function() { document.write( `์ด๋ฆ: ${this.name} ๋์ด: ${this.age}` ) }, // ๊ฐ์ฒด ๋ด๋ถ์์ ์์ ์ ํ๋กํผํฐ์ ์ ๊ทผ(this) callShowInfo : function() { this.showInfo(); } // ๊ฐ์ฒด ๋ด๋ถ์์ ์์ ์ ๋ฉ์๋์ ์ ๊ทผ(this) } user.showInfo(); //๋ฉ์๋ ์ ๊ทผ user.age; // ํ๋กํผํฐ ์ ๊ทผ
๐ ์ธ์คํด์ค๋ฅผ ์ฌ๋ฌ๊ฐ ๋ง๋ค ์ ์๋ค(์์ฒด๊ฐ ์ธ์คํด์ค). ์ฃผ ์ฉ๋๋ ์ฌ๋ฌ๊ฐ์ ๋ฐ์ดํฐ ํฌ์ฅ์ฉ.
์ฝ๋ ์ฌ์ฌ์ฉ์ ์ํด ์ฌ์ฉํ๊ธฐ ๋ณด๋จ ์ฌ๋ฌ๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ๋ฌถ์ด ๊ฐ์ ๋ณด๊ดํ๊ฑฐ๋, ํจ์์ ๋งค๊ฐ๋ณ์ ๊ฐ์ผ๋ก ์ ๋ฌํ ๋ ์ฃผ๋ก ์ฌ์ฉ.
ํจ์ ๋ฐฉ์
์ผ๋ก Class Object ๋ง๋ค๊ธฐfunction User = { // Class์ด๋ฆ this.name : "kirin", // property1 this.age : 20, // property2 this.showInfo : function() { document.write( `์ด๋ฆ: ${this.name} ๋์ด: ${this.age}` ) }, // ๊ฐ์ฒด ๋ด๋ถ์์ ์์ ์ ํ๋กํผํฐ์ ์ ๊ทผ(this) } let user = new User // ์ธ์คํด์ค ์์ฑ User.showInfo(); //๋ฉ์๋ ์ ๊ทผ User.age; // ํ๋กํผํฐ ์ ๊ทผ
๐ ๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์ ๊ฒฝ์ฐ class์ด๋ฆ { ํ๋กํผํฐ์ ๋ฉ์๋} ์ ํํ๋ก class๋ฅผ ์ ์ํ์ง๋ง, Javascript๋ ํด๋์ค๋ฅผ ๋ง๋๋ ํค์๋๊ฐ ๋ฐ๋ก ์๋ค.
๋ฐ๋ผ์ ์ผ๋ฐ ํจ์์ํจ์ ๋ฐฉ์์ ํด๋์ค
์ ํํ๊ฐ ๊ฐ๋ค. ํ์ง๋ง ์ผ๋ฐ ํจ์์ ๊ฒฝ์ฐ, ์ผ๋ฐ์ ์ผ๋ก ์๋ฌธ์๋ก ์์ํ๊ณ class์ ๊ฒฝ์ฐ๋๋ฌธ์
๋ก ์์ํ๋ค.
โ class์์ฑ ์, ํด๋์ค ์ด๋ฆ์ ๊ผญ๋๋ฌธ์
๋ก ์์ํ๊ธฐ๐
์ฝ๋ ์ฌ์ฌ์ฉ
์ด ๊ฐ๋ฅํ๋ค. ํ๋์ class๋ก ์ฌ๋ฌ๊ฐ์ ๊ฐ์ฒด(์ธ์คํด์ค) ์์ฑ ๊ฐ๋ฅlet userInfo1 = new User(); let userInfo2 = new User(); let userInfo3 = new User();
โ ๋ฉ์๋ ์ค๋ณต ์์ฑ โก ํด๋์ค์ ๋ฉ์๋๋ ๋ ๋ฆฝ์ ์ด๊ธฐ ๋๋ฌธ์ userInfo1,2,3 ๋ชจ๋ ์ธ์คํด์ค์ ๋ฉ์๋๋ ๊ฐ๊ฐ ๋ ๋ฆฝ์ ์ผ๋ก ๋ง๋ค์ด์ง๋ค. ๋ฐ๋ผ์ ๋๊ฐ์ ๋ฉ์๋๋ฅผ ์ธ ์ธ์คํด์ค๊ฐ ๋ชจ๋ ์ค๋ณต๋์ด ์์ฑ๋๋ค๋ ๋จ์ ์ด ์๋ค.
ํ๋กํ ํ์
๋ฐฉ์
์ผ๋ก Class Object ๋ง๋ค๊ธฐfunction User = { // Class์ด๋ฆ this.name : "kirin", // property1 this.age : 20, // property2 // ํจ์ ๋ฐฉ์๊ณผ ๊ฐ์ง๋ง, ํ๋กํ ํ์ ์ ๋ฉ์๋์ prototype์ด๋ผ๊ณ ํ๋กํผํฐ์ ์ ์ํ๋ ๊ตฌ์กฐ User.prototype.showInfo : function() { document.write( `์ด๋ฆ: ${this.name} ๋์ด: ${this.age}` ) }, // ๊ฐ์ฒด ๋ด๋ถ์์ ์์ ์ ํ๋กํผํฐ์ ์ ๊ทผ(this) } let user = new User // ์ธ์คํด์ค ์์ฑ User.showInfo(); //๋ฉ์๋ ์ ๊ทผ User.age; // ํ๋กํผํฐ ์ ๊ทผ
๐ ํจ์ ๋ฐฉ์๊ณผ ๋์ผํ๊ฒ ๋ง๋ค์ด์ง๋ค.(๋ฉ์๋ ์์ฑ ๋ฐฉ๋ฒ๋ง ๋ค๋ฅด๋ค)
โ ๋ฉ์๋ ๊ณต์ โก ๋ชจ๋ ์ธ์คํด์ค(userInfo1,2,3)๊ฐ prototype์ ๋ง๋ ๋ฉ์๋๋ฅผ ๊ณต์ ํ์ฌ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ ๋ฉ์๋ ์ค๋ณต ์์ฑ์ ๋ง์ ์ ์๋ค.
์ฌ๋นผ๋ฏธ์กฑ ๋ค.. 3์๋ผ๋ ใ ใ ;