2023/12/13(μ)
ν΄λμ€λ 무μμΈκ°
ν΄λμ€λ νΉμ ν κ°μ²΄λ₯Ό λ§λ€κΈ° μν μΌμ’
μ ν
νλ¦Ώκ³Ό κ°μ κ°λ
μΌλ‘ λ³Ό μ μλ€.
μ¦ , νΉμ ν ννμ κ°μ²΄λ₯Ό λ°λ³΅μ μΌλ‘ λ§λ€κΈ° μν΄ μ¬μ©λλ κ²μ΄ λ°λ‘ ν΄λμ€λ€.
ν΄λμ€λ₯Ό νμ©νλ©΄ κ°μ²΄λ₯Ό λ§λλ λ° νμν λ°μ΄ν°λ μ΄λ₯Ό μ‘°μνλ μ½λλ₯Ό μΆμνν΄ κ°μ²΄ μμ±μ λμ± νΈλ¦¬νκ² ν μ μλ€.
μμ μ½λλ₯Ό 보면μ μ΄λ»κ² ν΄λμ€λ₯Ό μ¬μ©νλμ§ μ΄ν΄λ³΄μ
<script>
class Car {
// constructorλ μμ±μλ€.μ²μ μμ±ν λ μ΄λ€ μΈμλ₯Ό λ°μμ§ κ²°μ ν μ μλ€.
// κ°μ²΄λ₯Ό μ΄κΈ°ν νλ μ©λλ‘λ μ¬μ©λλ€.
constructor(name){
this.name = name
}
//λ©μλ
honk(){
console.log(`${this.name}μ΄ κ²½μ μ μΈλ¦½λλ€!`)
}
// μ μ λ©μλ
static hello(){
console.log('μ λ μλμ°¨μ
λλ€')
}
//setter
set age(value){
this.carAge = value
}
//getter
get age(){
return this.carAge
}
//Car ν΄λμ€λ₯Ό νμ©ν΄ car κ°μ²΄λ₯Ό μμ±ν¨
const myCar = new Car('μλμ°¨')
}
//λ©μλ νΈμΆ
myCar.honk()
//μ μ λ©μλλ ν΄λμ€μμ μ§μ νΈμΆν¨
Car.hello()
//μ μ λ©μλλ ν΄λμ€λ‘ λ§λ κ°μ²΄μμλ νΈμΆ λΆκ°λ₯
//Uncaught TypeError: myCar.hello is not a function
MyCar.hello()
//setterλ₯Ό λ§λ€λ©΄ κ°μ ν λΉν μ μλ€.
MyCar.age = 32
//getterλ‘ κ°μ κ°μ Έμ¬ μ μλ€.
console.log(myCar.age , myCar.name)// 32 , μλμ°¨
</script>
constructor = μμ±μ
μ΄λ¦μμ μ μ μλ κ²μ²λΌ κ°μ²΄λ₯Ό μμ±νλ λ° μ¬μ©νλ νμν λ©μλλ€.
λ¨ νλλ§ μ‘΄μ¬ν μ μμΌλ©°, μ¬λ¬ κ°λ₯Ό μ¬μ©νλ€λ©΄ μλ¬κ° λ°μνλ€.
κ·Έλ¬λ μμ±μμμ λ³λ€λ₯΄κ² μνν μμ
μ΄ μλ€λ©΄ μλ΅λ ν μ μλ€.
<script>
// X
class Car {
constructor(name){
this.name = name
}
constructor(name){
this.name = name
} // SyntaxError : A class may only have one constructor
// O
class Car{
// constructorλ μμ΄λ κ°λ₯νλ€.
}
</script>
νλ‘νΌν°λ ν΄λμ€λ‘ μΈμ€ν΄μ€λ₯Ό μμ±ν λ λ΄λΆμμ μ μν μ μλ μμ±κ°μ μλ―Ένλ€.
<script>
class Car {
constructor(name){
this.name = name
}
const myCar = new Car('μλμ°¨')//νλ‘νΌν° κ°μ λ겨주μλ€.
</script>
μΈμ€ν΄μ€ μμ± μ constructor λ΄λΆμλ λΉ κ°μ²΄κ° ν λΉλΌ μλλ° λ°λ‘ μ΄ λΉ κ°μ²΄μ νλ‘νΌν°μ ν€μ κ°μ λ£μ΄μ νμ©ν μ μκ² λμμ€λ€.
getter
: ν΄λμ€μμ 무μΈκ° κ°μ κ°μ Έμ¬ λ μ¬μ©λλ€.
getterμ μ¬μ©νλ €λ©΄ μμ getμ΄λΌλ ν€μλλ₯Ό λΆμ¬μΌνκ³ ,λ€μ΄μ΄μ getterμ μ΄λ¦μ μ μΈν΄μΌνλ€.
<script>
//getter
get age(){
return this.carAge
}
</script>
setter
: ν΄λμ€ νλμ κ°μ ν λΉν λ μ¬μ©νλ€.
μ¬μ©λ°©λ²μ getκ³Ό λμΌνλ€.
ν΄λμ€ λ΄λΆμμ μ μΈν λ©μλλ₯Ό μΈμ€ν΄μ€ λ©μλλΌκ³ νλ€.
μλ°μ€ν¬λ¦½νΈμ prototypeμ μ μΈλλ―λ‘ νλ‘ν νμ
λ©μλλΌκ³ λΆλ¦¬κΈ°λ νλ€.
κ°μ²΄μ§ν₯μΈμ΄μμ νν μ¬μ©λλ ν΄λμ€(Class)κ° μλ°μ€ν¬λ¦½νΈμμλ νλ‘ν νμ
(prototype)μ΄λ©° μμ±μ ν¨μκ° μ¬μ©λλ€. λ€μ λ§ν΄ ν΄λμ€λ νλ‘ν νμ
μ μ¬μ©νμ¬ λ§λ€μ΄ λΈ κ²μ΄ κ²°κ³Όλ¬Όμ΄ μΈμ€ν΄μ€λΌκ³ ν μ μλ€.
μ΄λ κ² μμ±λ μΈμ€ν΄μ€λ μλμ κ°μ²΄μΈ ν΄λμ€λ νλ‘ν νμ
μ΄ κ°μ§κ³ μλ νλ‘νΌν°(property)μ λ©μλ(method)λ₯Ό λͺ¨λ μμ(inheritance)λ°λλ€.
μ μ λ©μλλ νΉμ΄νκ² ν΄λμ€μ μΈμ€ν΄μ€κ° μλ μ΄λ¦μΌλ‘ νΈμΆν μ μλ λ©μλλ€.
<script>
class Car {
static hello(){
console.log('λ°κ°μ΅λλ€~')
}
}
const myCar = new Car()
myCar.hello()// TypeError: myCar.hello is not a function
Car.hello()//λ°κ°μ΅λλ€~
</script>
μ μ λ©μλ λ΄λΆμ thisλ ν΄λμ€λ‘ μμ±λ μΈμ€ν΄μ€κ° μλλ€.
ν΄λμ€ μμ μ κ°λ¦¬ν€κΈ° λλ¬Έμ λ€λ₯Έ λ©μλμμ
μΌλ°μ μΌλ‘ μ¬μ©νλ thisλ₯Ό μ¬μ©ν μ μλ€.
νμ§λ§ μΈμ€ν΄μ€λ₯Ό μμ±νμ§ μμλ μ μ λ©μλλ μ¬μ©ν μ μκ³ ,
μμ±νμ§ μμλ μ κ·Ό κ°λ₯ν΄μ κ°μ²΄λ₯Ό μμ± μν΄λ μ¬λ¬ κ³³μμ
μ¬μ¬μ©μ΄ κ°λ₯νλ€λ μ₯μ μ΄ μλ€.
μ΄λ¬ν μ₯μ μ μ΄μ©νμ¬ μ ν리μΌμ΄μ
μ μμμ μ¬μ©νλ μ νΈ ν¨μλ₯Ό
μ μ λ©μλλ‘ λ§μ΄ νμ©νλ νΈμ΄λ€.
리μ‘νΈμμ ν΄λμ€ν μ»΄ν¬λνΈλ₯Ό λ§λ€κΈ° μν΄μ extends React.Componet λλ
extends React.pureComponentλ₯Ό μ μΈν κ²μ λ³Έ μ μ΄ μμκ²μ΄λ€.
μ΄ extendsλ κΈ°μ‘΄ ν΄λμ€λ₯Ό μμ
λ°μμ μμ ν΄λμ€μμ μ΄ μμλ°μ
ν΄λμ€λ₯Ό κΈ°λ°μΌλ‘ νμ₯νλ κ°λ
μ΄λΌ λ³Ό μ μλ€.
μ΄ extendsλ₯Ό νμ©νλ€λ©΄ κΈ°λ³Έ ν΄λμ€λ₯Ό κΈ°λ°μΌλ‘ λ€μνκ² μ¬λ¬Όμ΄ μ΄λ€ 주체λ‘λΆν° κ°λ € λμ μκΈ°λ ν΄λμ€λ₯Ό λ§λ€ μ μλ€.
β‘οΈ λ€μ κΈ μμλ ν΄λμ€μ ν¨μμ κ΄κ³μ λν΄ μ΄ν΄λ³΄μ.