ν΄λμ€λ class ν€μλλ₯Ό μ¬μ©νμ μ μνλ€. ν΄λμ€ μ΄λ¦μ μμ±μ ν¨μμ λ§μ°¬κ°μ§λ‘ νμ€μΉΌ μΌμ΄μ€λ₯Ό μ¬μ©νλ κ²μ΄ μΌλ°μ μ΄λ€. classλ μμ±μ ν¨μμ²λΌ μ μΈλ¬Έ νν νΉμ ννμ ννλ‘ νν ν μ μλ€. μ΄λ κ² μ μλ ν΄λμ€λ μμ±μ ν¨μμ΄λ©° new μ°μ°μμ ν¨κ» νΈμΆλμ΄ μΈμ€ν΄μ€λ₯Ό μμ±νλ€.
//ν΄λμ€ μ μΈλ¬Έ
class Person {};
//μ΅λͺ
ν΄λμ€ ννμ
const Animal = class {};
//κΈ°λͺ
ν΄λμ€ ννμ
//μΈμ€ν΄μ€λ₯Ό μμ±νλ €λ©΄ ν΄λμ€λ₯Ό κ°λ¦¬ν€λ μλ³μλ₯Ό μ¬μ©ν΄μΌ νλ€.
//MyClassλ ν΄λμ€ λͺΈμ²΄ λ΄λΆμμλ§ μ ν¨ν μλ³μλ€.
const Vegetable = class MyVegetable {};
ν΄λμ€λ₯Ό ννμμΌλ‘ νκΈ°κ° κ°λ₯
νλ€λ κ²μ ν΄λμ€κ° κ°μΌλ‘ μ¬μ©ν μ μλ μΌκΈ κ°μ²΄
λΌλ κ²μ μλ―Ένλ€.
ν΄λμ€ λͺΈμ²΄μλ 0κ° μ΄μμ λ©μλλ₯Ό μ μν μ μλ€.
constructor(μμ±μ)
: μΈμ€ν΄μ€λ₯Ό μμ±νκ³ μ΄κΈ°ννκΈ° μν νΉμ λ©μλ
μ΄λ€. 컨μ€νΈλν° λ΄λΆμμ thisμ μΆκ°ν νλ‘νΌν°λ μΈμ€ν΄μ€μ νλ‘νΌν°κ° λλ€. μ΄ λ 컨μ€νΈλν° λ΄λΆμ thisλ ν΄λμ€κ° μμ±ν μΈμ€ν΄μ€λ₯Ό κ°λ¦¬ν¨λ€.
νλ‘ν νμ λ©μλμ constructorμλ μ§μ μ μΈ κ΄λ ¨μ΄ μμΌλ©° constructorλ λ©μλλ‘ ν΄μλμ§ μκ³ ν¨μ κ°μ²΄ μ½λμ μΌλΆμ²λΌ λμνλ€.
컨μ€νΈλν°λ μλ΅μ΄ κ°λ₯νλ©° 컨μ€νΈλν°λ₯Ό μλ΅ν ν΄λμ€λ 컨μ€νΈλν°λ‘ μΈν΄ λΉ κ°μ²΄λ₯Ό μμ±νλ€.
컨μ€νΈλν°λ λ³λμ λ°νλ¬Έμ κ°μ§ μμΌλ©° new μ°μ°μλ₯Ό ν΅ν΄ ν΄λμ€κ° νΈμΆλλ©΄ μ묡μ μΌλ‘ thisλ₯Ό λ°ννλ€.
νλ‘ν νμ
λ©μλ
: μμ±μ ν¨μμ λ€λ₯΄κ² prototypeμ΄λΌλ ν€μλ μμ΄ ν΄λμ€ λͺΈμ²΄μ μ μλ λ©μλλ κΈ°λ³Έμ μΌλ‘ νλ‘ν νμ
λ©μλλ‘ λμ
νλ€.
function ν€μλλ₯Ό μλ΅ν λ©μλ μΆμ½ ννμ μ¬μ©
νλ€.μ μ λ©μλ
: λ©μλμ static ν€μλλ₯Ό λΆμ΄λ©΄ μ μ λ©μλκ° λλ€
. μ μ λ©μλλ ν΄λμ€μ λ°μΈλ©λ λ©μλλ‘ μΈμ€ν΄μ€μ λ€λ₯΄κ² λ³λ€λ₯Έ μμ± κ³Όμ μ΄ νμ μμΌλ©° μΈμ€ν΄μ€κ° μλ ν΄λμ€λ‘ νΈμΆν΄μΌ νλ€.
μ μ λ©μλμ νλ‘ν νμ λ©μλλ μμ μ΄ μν΄ μλ νλ‘ν νμ 체μΈμ΄ λ€λ₯΄λ€.
μ μ λ©μλλ μΈμ€ν΄μ€ νλ‘νΌν°λ₯Ό μ°Έμ‘°ν μ μμ§λ§ νλ‘ν νμ
λ©μλλ μΈμ€ν΄μ€ νλ‘νΌν°λ₯Ό μ°Έμ‘°ν μ μλ€.
1.μΈμ€ν΄μ€ μμ±κ³Ό this λ°μΈλ©
: new ν€μλλ₯Ό ν΅ν΄ classκ° νΈμΆλλ©΄ μ묡μ μΌλ‘ λΉ κ°μ²΄κ° μμ±λλ©° μμ±λ μΈμ€ν΄μ€κ° thisλ‘ λ°μΈλ© λλ€.
2.μΈμ€ν΄μ€ μ΄κΈ°ν
: 컨μ€νΈλν° λ΄λΆ μ½λκ° μ€νλλ©° μΈμ€ν΄μ€μ νλ‘νΌν°λ₯Ό μΆκ°νλ λ± μμ±λ μΈμ€ν΄μ€λ₯Ό μ΄κΈ°ννλ€.
3.μΈμ€ν΄μ€ λ°ν
: ν΄λμ€μ λͺ¨λ μ²λ¦¬κ° λλλ©΄ μμ±λ μΈμ€ν΄μ€κ° λ°μΈλ©λ thisκ° μ묡μ μΌλ‘ λ°νλλ€.
λ€λ₯Έ κ°μ²΄μ§ν₯ μΈμ΄μ²λΌ private, public, protected ν€μλμ κ°μ μ κ·Ό μ νμλ₯Ό μ§μνμ§ μλλ€. λ°λΌμ μΈμ€ν΄μ€λ μΈμ λ publicνλ€.
μΈλΆμ κ°μ μ¬μ©νμ¬ μΈμ€ν΄μ€λ₯Ό μ΄κΈ°νν νμκ° μλ κ²½μ°μλ constructor λ΄λΆμμ thisλΌλ ν€μλλ₯Ό μ¬μ©νμ¬ μ΄κΈ°νν΄μΌ νλ€.
μΈλΆμ κ°μ μ¬μ©νμ§ μκ³ ν΄λμ€ λͺΈμ²΄μ ν΄λμ€ νλλ₯Ό μ μνλ κ²½μ°, thisμ ν΄λμ€ νλλ₯Ό λ°μΈλ©νμ§ μκ³ ν΄λμ€ νλμ μ΄κΈ°κ°μ ν λΉν μλ μλ€.(νμ¬ μ μ νμ€ μ¬μμΌλ‘ μΉκΈλμ§λ μμμΌλ μ΅μ λΈλΌμ°μ , node.jsλ μ μ μ μΌλ‘ ꡬνν΄λμλ€.)
ν΄λμ€ νλμ λ©μλλ ν λΉν (ν¨μ μ μΈ) μ μμΌλ μ΄λ νλ‘ν νμ
λ©μλκ° μλ ν¨μμ νλ‘νΌν°λ‘ λμνλ―λ‘ ν΄λμ€νλμ ν¨μλ₯Ό ν λΉνλ κ²μ κΆμ₯νμ§ μλλ€.
μλ°μ€ν¬λ¦½νΈλ μΊ‘μνλ₯Ό μμ νκ² μ§μνμ§ μμ λ€λ₯Έ κ°μ²΄ μ§ν₯ μΈμ΄μμ μ§μνλ μ κ·Ό μ νμ ν€μλλ₯Ό μ§μνμ§ μλλ€. λ€λ§ μλ‘μ΄ νμ€ μ¬μμ΄ μ μλμ΄ μμ΄ μλμ ν€μλλ₯Ό μ μ μ μΌλ‘ μ¬μ©ν μ μλ€.
class Animal {
//private νλλ ν΄λμ€ λͺΈμ²΄μ μ μν΄μΌ νλ€.
//μ΄κΈ°κ°μ μ μνμ§ μμΌλ©΄ undefinedλ₯Ό κ°λλ€.
#age = 0;
constructor(age) {
this.#age = age;
}
//μ κ·Όμ νλ‘νΌν°λ‘ νλ‘νΌν°λ₯Ό μ½μ μ μλ€.
get age() {
return this.#age;
}
//μ κ·Όμ νλ‘νΌν°λ‘ νλ‘νΌν° κ°μ λ³κ²½ν μ μλ€.
set age(newAge) {
this.#age = newAge;
}
}
let animal = new Animal(10);
console.log(animal.age); // 10
//μ κ·Όμ νλ‘νΌν°λ ν¨μ μ μΈλ¬Έ ννμ΄μ§λ§ νλ‘νΌν°λ₯Ό λ€λ£¨λ κ²μ²λΌ μ¬μ©νλ€.
animal.age = 20;
console.log(animal.age); // 20
μμμ μν ν΄λμ€ νμ₯μ κΈ°μ‘΄ ν΄λμ€λ₯Ό μμλ°μ μλ‘μ΄ ν΄λμ€λ₯Ό νμ₯(extends)νμ¬ μ μνλ κ²μ΄λ€.
ν΄λμ€λ μμμ ν΅ν΄ κΈ°μ‘΄ ν΄λμ€λ₯Ό νμ₯ν μ μλ λ¬Έλ²μ΄ κΈ°λ³Έμ μΌλ‘ μ 곡λμ§λ§ μμ±μ ν¨μλ κ·Έλ μ§ μλ€. μμμΌλ‘ νμ₯λ ν΄λμ€λ₯Ό μλΈ ν΄λμ€ λλ μμ ν΄λμ€λΌκ³ λΆλ₯΄κ³ μλΈ ν΄λμ€μ μμλ ν΄λμ€λ₯Ό μνΌ ν΄λμ€ λλ λΆλͺ¨ ν΄λμ€λΌκ³ λΆλ₯Έλ€.
extends ν€μλλ ν΄λμ€λΏλ§ μλλΌ μμ±μ ν¨μλ₯Ό μμλ°μ ν΄λμ€λ₯Ό νμ₯ν μλ μλ€.
λμ μΌλ‘ μμλ°μ λμλ₯Ό κ²°μ νμ¬ ν΄λμ€λ₯Ό νμ₯ν μλ μλ€.
super ν€μλλ ν¨μμ²λΌ νΈμΆν μλ μκ³ thisμ κ°μ΄ μλ³μμ²λΌ μ°Έμ‘°ν μ μλ νΉμν ν€μλμ΄λ€.
super νΈμΆ
: superλ₯Ό νΈμΆνλ©΄ μνΌν΄λμ€μ 컨μ€νΈλν°λ₯Ό νΈμΆνλ€.
//μνΌ ν΄λμ€
class Base {
constructor(a, b) {
this.a = a;
this.b = b;
}
}
//μλΈ ν΄λμ€
class Derived extends Base {
constructor(a, b, c) {
//μλΈ ν΄λμ€μμ 컨μ€νΈλν°λ₯Ό μλ΅νμ§ μλ κ²½μ°, λ°λμ superλ₯Ό νΈμΆν΄μΌ νλ€.
//super ν€μλλ λ°λμ μλΈν΄λμ€ μ»¨μ€νΈλν° μμμλ§ νΈμΆν΄μΌ νλ€.
super(a, b);
//superλ₯Ό νΈμΆνκΈ° μ μλ this ν€μλλ₯Ό μ¬μ©ν μ μλ€.
this.c = c;
}
}
const derived = new Derived(1, 2, 3);
console.log(derived) //Derived {a: 1, b: 2, c: 3}
super μ°Έμ‘°
: super ν΄λμ€λ₯Ό μ°Έμ‘°νλ©΄ μλΈ ν΄λμ€ λ©μλ λ΄μμ μνΌ ν΄λμ€ λ¨Έμλλ₯Ό νΈμΆν μ μλ€. μ£Όμν κ²μ λ©μλ μΆμ½ ννμΌλ‘ μ μλ ν¨μλ§μ΄ HomeObjectλ₯Ό κ°μ§λ©°, μ΄λ‘ μΈν΄ superλ₯Ό μ°Έμ‘°ν μ μλ€λ κ²μ΄λ€.μΆμ²: λͺ¨λ μλ° μ€ν¬λ¦½νΈ Deep Dive-μ΄μ λͺ¨