๊ทธ๋์ ๋ฏธ๋ค์๋ class ์ ๋ฆฌํด์ผ์ง, ํด์ผ์ง ํ๋ค๊ฐ ๋๋์ด ์ ๋ฆฌํ๋ ๋ .
๋น์ทํ object ๋ฅผ ์ฌ๋ฌ ๊ฐ ์ฐ์ด๋ด๊ณ ์ถ์ผ๋ฉด class ๋ฅผ ์ด์ฉํ๋ฉด ๋๋ค.
ES6 ์ ๋ฌธ๋ฒ์ด ๋์ค๊ธฐ ์ ์๋ function ํค์๋๋ก ์ด์ฌํ ์ฐ์ด๋๋ค.
function Student(์ด๋ฆ){
this.name = ์ด๋ฆ;
}
let ํ์1= new Student('Lee')
this๋ ์๋ก ์์ฑ๋๋ ์ค๋ธ์ ํธ๋ฅผ ์๋ฏธํ๋ฉฐ, ๋ฉ์ง ๊ฐ๋ฐ์ ์ฉ์ด๋ก ์ธ์คํด์ค ๋ผ๊ณ ํ๋ค.
์์์ ์ฐ๋ thisํค์๋๋ ์ ์งํ ์ฑ class
ํค์๋์ constructor()
ํค์๋๋ฅผ ์๋ฆ๋ต๊ฒ ์กฐํฉํ์ฌ ๋ง๋ค๋ฉด ๋๋ค.
class Student{ //ํด๋์ค๋ช
์ ๋๋ฌธ์, ํด๋์ค๋ช
๋ค์์ () ์์ด๋ค!
constructor(์ด๋ฆ){ //ํ๋ผ๋ฏธํฐ ์๋ฆฌ๋ constructor()์ฌ๊ธฐ์ ์ฐ๋๊ฑฐ๋ค!
this.name = ์ด๋ฆ;
}
}
let ํ์1= new Student('Lee')
class Student{
constructor(์ด๋ฆ){
this.name= ์ด๋ฆ;
this.sayHi= function(){
}
}
sayHello(){
alert(this.name)
}
}
ํจ์๋ constructor ์์์ this.์ด์ฉ๊ตฌํจ์ = function(){}
์ด๋ ๊ฒ ์ฐ๊ฑฐ๋ constructor()๋ฐ์์ ์ ์ฉ๊ตฌํจ์(){}
์ด๋ ๊ฒ ์ธ์ ์๋ค. this ๋ก ์ฐ๋ฉด ์์์ ์ง์ ๊ทธ ํจ์๋ฅผ ๊ฐ์งํ
๊ณ , contructor ๋ฐ์์ ์ฐ๋ฉด prototype์ ๋ฃ์ด์ฃผ๋ ๊ฒ์ด๋ ์์์ด ์ง์ ์์ ํ์ง๋ ๋ชปํ ๊ฒ์ด๋ค.
class ๋ง๋ค์์ผ๋ฉด ์ด์ ํ์1, ํ์2,...์ ์ด์ฌํ ์ฐ์ด๋ผ ์ ์๊ธฐ ๋๋ฌธ์ class๋ ๋ถ๋ชจ
, ์ด์ฌํ ์ฐ์ด๋ธ ํ์1,2๋ ์์
์ด๋ผ๊ณ ๋ณดํต ์นญํ๋ค. ๊ทธ๋ฆฌ๊ณ ๋ถ๋ชจ๊ฐ ๊ฐ์ง๊ณ ์๋ ๊ทธ ์์ ์์ฑ๋ค์ ์์๋ค๋ ๊ฐ์ง ์ ์๊ฒ ๋๋๊ฑธ ์์
์ด๋ผ๊ณ ๋ ํํํ๋ค. ์ด๋ ๊ฒ ์์ํ๊ฒ ๋๋ ๊ฑด class ์ธ์ prototype์ด๋ผ๋ ๊ฑธ๋ก๋ ๊ฐ๋ฅํ๋ฐ, ์ฝ๊ฒ ์๊ฐํด์ ๊ทธ๋ฅ ์ ์ ์
๋ผ๊ณ ์๊ฐํ๋ฉด ๋๋ค.
์์์ ๋ง๋ 'ํ์1' ์ ์ฝ์์ฐฝ์ ์ฐ์ด๋ณด๋ฉด Student{name: 'Lee'} ์ ๋๋ง ๋์ค์ง๋ง
Student.prototype.school='seoul'
์ ์ ๊ณ ๋ค์๋ณด๋ฉด ์ฌ์ ํ Student{name: 'Lee'} ๋ผ๊ณ ๋ง ๋ณด์ด๋..........
๊ฒ์ฒ๋ผ ๋ณด์ด์ง๋ง, ์ฌ์ค ์๋์ prototype ์ ํด๋ฆญํด์ ๋ณด๋ฉด school: 'seoul' ๋ ๋ณด์ด๋ ๋งค์ง!
์ฐ๋ฆฌ๊ฐ ํ์1์ ์ง์ ์ ์ผ๋ก ๊ฑด๋ ์ ์ ์์ง๋ง, ๊ทธ ๋ถ๋ชจ์ ์ ์ ์์ shcool: 'seoul' ์ ๋ฃ์ด์ค์ผ๋ก์จ, ๊ทธ ์ ์ ์์ ์ํด ์์๋ค๋ ์ฌ์ฉ๊ฐ๋ฅํ๊ฒ ๋ ๊ฒ์ด๋ค. (์ฃผ์ํ ๊ฒ์ด ์๋ค๋ฉด, prototype์ผ๋ก ์ถ๊ฐ๋ ๊ทธ ๋ฐ์ดํฐ๋ ๋ถ๋ชจ๋ง ๊ฐ์ง๊ณ ์๋ค. ์์๋ค์ด ์ง์ ๊ฐ์ง๊ณ ์๋ ๊ฒ ์๋๋ผ!)
๊ทธ๋ฐ๋ฐ ์ด๊ฒ ์ด๋ป๊ฒ ๊ฐ๋ฅํ ๊ฑธ๊น? ์ด๊ฑด ์๋ฐ์คํฌ๋ฆฝํธ์ ๋์์๋ฆฌ๋ฅผ ์ดํดํ๋ฉด ์ฌ์ด๋ฐ, JS๋ ์ค๋ธ์ ํธ์์ ์๋ฃ๋ฅผ ๋ฝ์ ๋ ์ค๋ธ์ ํธ ์์ ๊ทธ ์๋ฃ๊ฐ ์์ผ๋ฉด ๊ทธ ๋
์์ ๋ถ๋ชจ๋ํํ
๊น์ง ๊ฐ๋ค. ๊ทธ ๋ถ๋ชจ๋๋ ์์ผ๋ฉด ๊ทธ ์ฆ์กฐ๋ถํํ
๋ ๊ฐ๊ณ , ์์ผ๋ฉด ๊ณ ์กฐ๋ถํํ
๋ ๊ฐ๋ค. ๋๊น์ง ๊ฐ๋ค.
์ด๊ฑธ ์ ์๊ฐํด๋ณด๋ฉด ์ด์ ๊ทธ๋์ ์ฐ๋ฆฌ๊ฐ Array์์ .sort(), .map() ๋ฑ๋ฑ์ ๋ฉ์๋๋ฅผ ์ง์ ๋ฃ์ด์ค ๊ฒ ์๋๋ฐ ์ด๋ป๊ฒ ์ฌ์ฉํ ์ ์์์๊น ๋ฅผ ์ดํดํ ์ ์๊ฒ ๋๋ค.
const arr1=[1,2,3] // ๋ณดํต ์ฐ๋ฆฌ๊ฐ ํธํ๊ฒ ๋ฐฐ์ด ๋ง๋๋ ๋ฐฉ์
const arr1= new Array(1,2,3) // ๊ทผ๋ฐ ์ปดํจํฐ๋ ํญ์ ์ด๋ฐ์์ผ๋ก ์ดํดํจ
new ํค์๋ ์จ์ ๋ง๋๋ ๊ฑธ ๋ณด๋ ์ ๋ฐฉ๊ธ ์์์ ์ค๋ธ์ ํธ ์ฐ์ด๋ผ ๋ ์ฐ๋ ๊ฑฐ๋ ๋๊ฐ๋ค? ๋ผ๋ ๊ฑธ ์๊ฒ ๋๋ค. ๊ทธ๋ ๋ค. ์ฌ์ค ์ Array๋ผ๋ ๊ฒ์ prototype์๋ .filter(), .length(), .forEach(),...๋ฑ๋ฑ์ผ๋ก ๊ฐ๋์ฐจ์๊ณ , ๊ทธ๊ฒ์ ์์๋ค์ ์ฐ๋ฆฌ๊ฐ ์ฐ์ด๋ด๋ฉด ๋ค ์ ์ ์ ๋๋ฌธ์ ์ธ ์ ์์๋ ๊ฒ์ด๋ค.
๊ทธ๋์ mdn์ ๋์ค๋ prototype.์ ๊ฒ ์ด๋ฐ ๋ป์ด์๊ตฌ๋...ํ๋ ๊ฑธ ์ด์ ์ผ ์๊ฒ ๋๋ ์๊ฐ(!)
๊ทธ๋ผ ๋์ ๋ฌด์จ ์ฐจ์ด๊ฐ ์์๊น?
constructor ๋ก ์์์ํค๋ฉด ์์์ ์ง์ ๊ทธ ๊ฐ์ ์์ ํ ์ ์๊ฒ ๋๊ณ ,
prototype ์ผ๋ก ์์์ํค๋ฉด ์์์ ์ง์ ๊ทธ ๊ฐ์ ๊ฐ์ง์ง๋ ๋ชปํ๋ค. ๋ถ๋ชจ๊ฐ ๊ฐ์ง๊ณ ์๋ ๊ฑธ ์ฐธ์กฐํด์ ์ธ ์๋ ์๊ฒ ์ง๋ง.
prototype์ ์ผ๋ฐ object,array์๋ ์๊ธฐ๋ ๊ฒ ์๋๋ผ ์์์ ๋ณธ 'Student', 'Student1' 'Array' ์ด๋ ๊ฒ ์ฐ์ด๋ด๋ ๋ ์๋ค์๋ง ์๊ธฐ๋ ๊ฑฐ๋ค.์ผ๋ฐ object ๊ฐ์ ๊ฑฐ ์์์ํค๊ณ ์ถ์ผ๋ฉด constructor / class ๊ฐ์ ๊ฑฐ ์ฐ๋ฉด ๋๋ค.
Student.prototype.school='seoul'
Student๊ฐ ์๋ ํ์1์๊ฒ prototype ์ฐ๋ฉด ์๋นจ๊ฐ ์๋ฌ๋ฅผ ๋ด๋ฑ๋๋ค...ํฅ
ํ์1.prototype.school='seoul' //Error~!~!~!~!~!~!!!!!!!
๋ถ๋ชจ๋ก๋ถํฐ ์์ฑ๋ ์์๋ค์ __proto__
๋ผ๋ ์์ฑ์ด ์๊ธฐ๋๋ฐ, ์ด๊ฑธ ํด๋ฆญํ๋ฉด ๋ถ๋ชจ์ prototype์ ์ถ๋ ฅํด์ค๋ค.
console.log(ํ์1.__proto__) <-- ์ด๊ฑฐ๋
console.log(Student.prototype) <-- ์ด๊ฑฐ๊ฐ ๊ฐ์ ๋ง์ด๋ค.
์ด๊ฑธ ์ ์กฐ์ํ๋ฉด ์์๊ธฐ๋ฅ์ ๋ถ๋ชจ๋์ ์ธ๊ธํ์ง ์๊ณ ๋ ๋ค๋ฅธ ๋ฐฉ์์ผ๋ก๋ ๊ตฌํํ ์๊ฐ ์๊ฒ ๋๋ค.
์๋ฅผ ๋ค์ด
const score={
math: 100
}
๋ผ๋ ์ค๋ธ์ ํธ๋ฅผ ํ์1ํํ ์ ์ ์๋ก ์ฃผ๋ ๋๋ค๋ฅธ ๋ฐฉ๋ฒ์ ์๊ฐํ๊ฒ ๋ค.
ํ์1.__proto__ = score;
console.log(ํ์1.math) // 100
()์์ ์ค๋ธ์ ํธ๋ฅผ ๋ฃ์ผ๋ฉด ๊ทธ์ ๋ถ๋ชจ prototype์ ์ถ๋ ฅํด์ฃผ๋ ๊ฒ์ผ๋ก์, __proto__
์ ๋น์ทํ ์ญํ ์ ํ๋ค๊ณ ๋ณด๋ฉด ๋๋ค.
์ด์ class์์ ๋ง๋ ๊ฒ๊ณผ ์์ ๋๊ฐ์ง ์๊ณ ๋น์ทํ class๋ฅผ ํ๋ ๋ ๋ง๋ค๊ณ ์ถ์๋ฐ, class ์ฝ๋๋ฅผ ๋ค ๊ฐ์ ธ๋ค๊ฐ ๋ณต๋ถํ๋ ค๋ ์ฝ๋๊ฐ ๋๋ฌด ์ง์ ๋ถํ ๊ฒ์ด๋ค. ๊ทธ๋์ extends๊ฐ ํ์ํ๊ฒ ๋์๋๋ฐ..!
class ํ ์๋ฒ์ง{
constructor(์ด๋ฆ){
this.name=์ด๋ฆ
this.gender='๋จ์ฑ'
}
}
class ์๋ฒ์ง extends ํ ์๋ฒ์ง{
constructor(๋์ด){
this.age=๋์ด
}
}
์ด๋ ๊ฒ ํ๋ฉด ์๋ฒ์ง ํด๋์ค๋ ํ ์๋ฒ์ง ํด๋์ค๋ ๊ฐ์ ธ๋ค๊ฐ ์ธ์ ์๊ฒ ๋ ๊ฒ์ด๋ผ๊ณ ์๊ฐ์ด ๋ ๋ค. ํ๋ญํ๊ฒ const ์๋ฒ์ง1=new ์๋ฒ์ง()
๋ฅผ ๋ง๋ค๊ณ ์ฝ์์ ์ฐ์ด๋ณธ ๊ฒฐ๊ณผ..
super()๊ฐ ์๋ค๋ฉฐ ๋๋ฆฌ๋ฅผ ์น๋ค.
์ ๋ค์์ ๊ทธ๋ฅ ์๊ธฐ๋ค.
class ์๋ฒ์ง extends ํ ์๋ฒ์ง{
constructor(์ด๋ฆ,๋์ด){
super(์ด๋ฆ);
this.age=๋์ด
}
}
ํ ์๋ฒ์ง class์ constructor() ๋ฅผ ๊ฐ์ ธ๋ค๊ฐ ์ฐ๊ณ ์ถ์ผ๋ฉด super() ๋ฅผ ์จ์ผ ํ๋ค. ์ด๊ฑด ์ดํด๊ณ ์์๊ณ ๊ทธ๋ฅ ์ธ์ฐ๋ฉด ๋๋ค. ๊ทธ๋ผ ์ด์ ํธ์ํ๊ฒ ์๋ฌ๊ฐ ์ฌ๋ผ์ง๋ค. ์์์ ํ ์๋ฒ์ง class constructor์์ ์ฐ๋ ์ด๋ฆ
ํ๋ผ๋ฏธํฐ๋ ๊ณ ๋๋ก ์๋ฒ์ง constructor()์นธ์ ๋ฃ์ด์ฃผ๋ฉด ๋๋ค.
class ํ ์๋ฒ์ง{
constructor(์ด๋ฆ){
this.name=์ด๋ฆ
this.gender='๋จ์ฑ'
}
sayHi(){
console.log(`i'm your grandfather`)
}
}
class ์๋ฒ์ง extends ํ ์๋ฒ์ง{
constructor(์ด๋ฆ,๋์ด){
super(์ด๋ฆ);
this.age=๋์ด
}
}
const ์๋ฒ์ง1 = new ์๋ฒ์ง();
์๋ฒ์ง1.sayHi() //i'm your grandfather
๊ทผ๋ฐ ์ด sayHiํจ์๊ฐ ๋~~๋ฌด ์ ์ฉํ ๋๋จธ์ง ์๋ฒ์ง ํด๋์ค์ ๊ฐ์ ธ์์ ๊ทธ๋๋ก ์ฌ์ฉํ๊ณ ์ถ๋ค๋ฉด
class ์๋ฒ์ง extends ํ ์๋ฒ์ง{
constructor(์ด๋ฆ,๋์ด){
super(์ด๋ฆ);
this.age=๋์ด
}
sayHello(){
super.sayHi() //i'm your grandfather
console.log(`I'm your father`)
}
}
์๋ฒ์ง1.sayHello() // i'm your grandfather
// I'm your father ์ด๋ ๊ฒ ๋ ์ค์ด ๋์จ๋ค.
const hana = {
name: "hyewon",
age: 27,
nextAge() {
this.age + 1;
},
};
๋ด๋
๋์ด ๊ตฌํ๋๊ฑด hana.nextAge()๋ฅผ ์ฐ๋ hana.age+1 ๋ฅผ ์ฐ๋ ์ง๊ธ์ ๋ณ๋ฐ ์ฐจ์ด๊ฐ ์์ด๋ณด์ธ๋ค. ๊ทธ๋ฐ๋ฐ ๋ง์ฝ ๋ฐ์ดํฐ๊ฐ ์์ฒญ๋๊ฒ ๋ณต์กํ ๊ตฌ์กฐ์๋ค๋ฉด?
hana.age[3].age[6].์ด์ฉ๊ตฌ๋ก ๊บผ๋ด๋ ๊ตฌ์กฐ์์ผ๋ฉด ๊บผ๋ด์ฐ๋ ๊ฒ๋ณด๋ค ๋ฏธ๋ฆฌ ๋ง๋ค์ด๋์ ํจ์๋ฅผ ์ด์ฉํ๋ ๊ฒ ํจ์ฌ ํธํ ๊ฒ์ด๋ค. ๋ํ ์์ ๋ค์ ๋ฐ์ดํฐ ์์ ์ ๊ฐํ ๋ age๋ ๋ฑ ๋ด๋ ์ซ์๋ง ๋ฐ๋ ๋
์์ธ๋ฐ hana.age='28'์ด๋ผ๊ณ ํด๋ ์๋ฐ์คํฌ๋ฆฝํธ๋ ๊ตฌ๋ณ์์ด ๋ค ๋ฐ์์ค๋ค. ํจ์๋ฅผ ์ฌ์ฉํ๋ฉด ํ๋์ ์์ ์ฅ์น๋ฅผ ๋ง๋ค ์ ์๋ ๊ฒ์ด๋ค. ๋ค์ ์์์ฒ๋ผ.
const hana = {
name: "hyewon",
age: 27,
setAge(๋์ด) {
this.age = Number(๋์ด) // ๋ฌด์กฐ๊ฑด ์ซ์๋ง ์ถ๋ ฅ๋๊ฒ ํจ
},
};
hana.setAge('323') // 323 <- ์ซ์๋ฟ
!
์ผ์ผ์ด () ์ฐ๊ธฐ ๊ท์ฐฎ์ผ๋ฉด get/set
ํค์๋๋ฅผ ์ฌ์ฉํ๋ฉด ๋๋๋ฐ, ์ ์์๋ ๋ค ๋๊ฐ์๋ฐ ์ด์์ด๋ฉด class์์ ํ ๋ฒ ์ฌ์ฉํด๋ณด๊ฒ ๋ค.
const Hana {
constructor(){
name: "hyewon",
age: 27
}
set setAge(๋์ด) { //๋ฐ์ดํฐ๋ฅผ ์์ /์
๋ ฅํ๋ ํจ์
this.age = Number(๋์ด)
},
get nextAge(){ //๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ค๋/๋ฝ์์ค๋ ํจ์
return this.age+1
}
}
};
hana.setAge = 323
hana.nextAge;
set์ด ๋ถ์ ํจ์๋ค์ setter๋ผ๊ณ ํ๋ค. ๋ฐ์ดํฐ๋ฅผ set(์์ ํ๋) ํจ์.
setter
๋ ๋ฐ์ดํฐ๋ฅผ ์
๋ ฅํด์ ์์ ํด์ผ ํ๋ฏ๋ก ํ๋ผ๋ฏธํฐ๊ฐ ๋ฐ๋์ ํ๊ฐ ์กด์ฌ
ํด์ผํ๋ค.
get์ด ๋ถ์ ํจ์๋ค์ getter๋ผ๊ณ ํ๋ค. ๋ฐ์ดํฐ๋ฅผ get(๊ฐ์ ธ์ค๋) ํจ์.
getter
๋ ๊ทธ๋ฅ ์ ์ฅ๋์ด์๋๊ฑฐ ๊ทธ๋๋ก ๊ฐ์ ธ๋ง ์ฌ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ ๊ทธ ์ด๋ค ํ๋ผ๋ฏธํฐ๋ ํ์์๋ค. return๋ง ์ ํด๋๋ฉด ๋๋ค
.
์ค๋ ์๋กญ๊ฒ ์๊ฒ ๋ ๊ฒ
class๋ก ์ค๋ธ์ ํธ ์ฐ์ด๋ด๋ ๋ฒ์ ๋ํด ๋ฐฐ์ ๋ค.
prototype์ผ๋ก ๋ถ๋ชจ๋ ์ฐพ๊ธฐ์ ๋ํด ๋ฐฐ์ ๋ค.
extends, super๋ก ์ ์ฌํ ์ค๋ธ์ ํธ๋ฅผ ๋ ๋ง๋ค ์ ์๋ ๋ฒ์ ๋ํด ๋ฐฐ์ ๋ค.
getter๋ ๋ฆฌํด๋ง ์ํ๊ธฐ/ setter๋ ์์ ,์
๋ ฅํด์ผ ํ๋๊น ํ๋ผ๋ฏธํฐ ํ ๊ฐ ๊ผญ ์
๋ ฅํ๊ธฐ.
์ค๋ ๋ฐฐ์ด ๊ฒ๋ค ์ค ๊ถ๊ธํ๊ฑฐ๋ ๋ ์๊ณ ์ถ์ ๊ฒ
class๋ฅผ ์ฐ๊ณ ๋๋ ์ด์ this์ ๋ํด ์ ๋ฆฌํด์ผ๊ฒ ๋ค๋ ์๊ฐ์ด ๋ ๋ค.
getter/setter ๋ฅผ ๋ฐฐ์ฐ๋ immutability์ ๋ํด ๊ณต๋ถํด์ผ๊ฒ ๋ค๋ ์๊ฐ์ด ๋ ๋ค.
์ฐ์ต๋ฌธ์ ํ๋ฉด์ sort() ํจ์ ์ ๋ ฌํ๋ ๋ฒ์ ๋ํด ๋ค์ ๊ณต๋ถํด์ผ๊ฒ ๋ค๊ณ ์๊ฐํ๋ค.
์ค๋์ ์๊ฐ
์ธ์ธ ๊ฑฐ ์ค์ผ ๋ง๋๊ณ !!!~!~!~!! ๋ ์จ๋ ์ ์ข์ ๊ฑฐ๋๊ณ ~!~!!!!