κ°μ²΄ μ§ν₯ νλ‘κ·Έλλ° (OOP; Object-oriented programming)= λ°μ΄ν°μ κΈ°λ₯μ ν κ³³μ λ¬Άμ΄μ μ²λ¦¬νλ€.
μμ±κ³Ό λ©μλκ° νλμ 'κ°μ²΄'λΌλ κ°λ μ ν¬ν¨λλ©°, μ΄λ js λ΄μ₯ νμ μΈ objectμλ λ€λ₯΄κ², ν΄λμ€λΌλ μ΄λ¦μΌλ‘ λΆλ₯Έλ€.
λ©μλ νΈμΆνλ λ°©λ² // νμ΄ν ν¨μλ₯Ό μ°μ§ μλλ€.
** νμ΄ν ν¨μ **
thisλ superμ λν λ°μΈλ©μ΄ μλ€.
λ©μλλ‘ μ¬μ©λ μ μλ€.
new.target ν€μλκ° μλ€.
λͺ¨λνλ?
μ½λμ μ¬νμ©μ±μ λμ΄κ³ , μ μ§λ³΄μλ₯Ό μ½κ² ν μ μλ λ€μν κΈ°λ²λ€μ΄ μ¬μ©λλ€.
==> κ·Έ μ€ νλκ° μ½λλ₯Ό μ¬λ¬κ°μ νμΌλ‘ λΆλ¦¬νλ κ²μ΄λ€. (λͺ¨λν)
1. μμ£Ό μ¬μ©λλ μ½λλ₯Ό λ³λμ νμΌλ‘ λ§λ€μ΄μ νμν λλ§λ€ μ¬νμ©ν μ μλ€.
2. μ½λλ₯Ό κ°μ νλ©΄ μ΄λ₯Ό μ¬μ©νκ³ μλ λͺ¨λ μ ν리μΌμ΄μ μ λμμ΄ κ°μ λλ€.
3. μ½λ μμ μ νμν λ‘μ§μ λΉ λ₯΄κ² μ°Ύμ μ μλ€.
4. νμν λ‘μ§λ§λ€ λ‘λν΄μ λ©λͺ¨λ¦¬μ λλΉλ₯Ό μ€μΌ μ μλ€.
5. νλ² λ€μ΄λ‘λλ λͺ¨λμ μΉλΈλΌμ°μ μ μν΄ μ μ₯λκΈ° λλ¬Έμ λμΌν λ‘μ§μ λ‘λν λ μκ°κ³Ό λ€νΈμν¬ νΈλν½μ μ μ½ ν μ μλ€.
κ°μ²΄ μ§ν₯ νλ‘κ·Έλλ°(OOP; Object-oriented programming) μ¬μ΄ μ€λͺ
=> νλμ λͺ¨λΈμ΄ λλ μ²μ¬μ§μ λ§λ€κ³ (class), κ·Έ μ²μ¬μ§μ λ°νμΌλ‘ ν κ°μ²΄(object)λ₯Ό λ§λλ (instance) νλ‘κ·Έλλ° ν¨ν΄
μΈμ€ν΄μ€(instance) = 'μ²μ¬μ§'μ λ°νμΌλ‘ ν κ°μ²΄ (κ·Έλ₯ κ°μ²΄x)
// μΈμ€ν΄μ€ λ§λ€ λ new ν€μλλ₯Ό μ¨μ λ§λ λ€.
=> μ¦μ μμ±μ ν¨μκ° μ€νλλ©°, λ³μμ ν΄λμ€μ μ€κ³λ₯Ό κ°μ§ μλ‘μ΄ κ°μ²΄ μ¦ μΈμ€ν΄μ€κ° ν λΉλλ€.
// κ°κ°μ μΈμ€ν΄μ€λ ν΄λμ€μ κ³ μ ν μμ±κ³Ό λ©μλλ₯Ό κ°κ² λ©λλ€.
ν΄λμ€(class) = μ²μ¬μ§
// λλ¬Έμλ‘, μΌλ°λͺ μ¬λ‘ λ§λ λ€.
// ν΄λμ€μ μμ±κ³Ό λ©μλλ₯Ό μ μνκ³ , μΈμ€ν΄μ€μμ μ΄μ©νλ€.
**μμ±κ³Ό λ©μλ
μμ±: λΈλλ, μ°¨ μ΄λ¦, μμ, μ΅κ³ μλ ₯ λ±λ±
λ©μλ: κ°μ²΄μ λΈλ¦° ν¨μ ex) μ°λ£ μ£Όμ , μλ ₯ μ€μ , μ΄μ
"νμ"μ΄λΌλ ν΄λμ€λ₯Ό λ§λ λ€κ³ κ°μ νλ€λ©΄!
μμ±: νκ΅λͺ , λ°, λ²νΈ, μ΄λ¦, κ³Όλͺ©λ³ μ±μ
λ©μλ: μ£Όμ€ κΈ°μ μκ°, μ·¨μΉ¨ μκ°, νμ 곡λΆλ
ES5λ°©λ² : ν΄λμ€λ ν¨μλ‘ μ μν μ μλ€.
function Car(brand, name, color){
// μΈμ€ν΄μ€κ° λ§λ€μ΄μ§ λ μ€νλλ μ½λ
}
ES6λ°©λ² : classλΌλ ν€μλλ₯Ό μ΄μ©ν΄μ μ μν μλ μλ€. (μ΅κ·Όμλ ES6λ°©λ² μ£Όλ‘ μ¬μ©)
κ°μ²΄μ§ν₯ νλ‘κ·Έλλ°μμ μμ±μ ν¨μ (constructor) ==> μΈμ€ν΄μ€κ° λ§λ€μ΄μ§ λ μ€νλλ μ½λλ€.
class Car {
constructor(brand, name, color){
// μΈμ€ν΄μ€κ° λ§λ€μ΄μ§ λ μ€νλλ μ½λ
}
}
ν΄λμ€: μμ± μ μ
ES6μμλ this λΌλ μλ‘μ΄ ν€μλ μ¬μ©! (κ°μ²΄μ§ν₯ νλ‘κ·Έλλ°μμ μμ£Ό λμ¨λ€. )
class Car {
constructor(brand,name,color){
this.brand = brand;
this.name = name;
this.color = color;
}
}
thisλ μΈμ€ν΄μ€ κ°μ²΄λ₯Ό μλ―Ένλ€.
parameterλ‘ λμ΄μ¨ λΈλλ, μ΄λ¦, μμ λ±μ μΈμ€ν΄μ€ μμ± μ μ§μ νλ κ°μ΄λ€.
μλμ²λΌ thisμ ν λΉνλ€λ κ²μ λ§λ€μ΄μ§ μΈμ€ν΄μ€μ ...μ λΆμ¬νκ² λ€λ κ²μ΄λ€.
ν΄λμ€: λ©μλμ μ μ
ES5 => prototypeμ΄λΌλ ν€μλλ₯Ό μ¬μ©ν΄μ λ©μλλ₯Ό μ μν μ μλ€.
function Car(brand, name, color){//μλ΅}
Car.prototype.refuel = function(){
//μ°λ£ 곡κΈμ ꡬννλ μ½λ
}
Car.prototype.drive = function() {
//μ΄μ μ ꡬννλ μ½λ
}
ES6=> μμ±μ ν¨μμ ν¨κ» class ν€μλ μμͺ½μ λ¬Άμ΄μ μ μνλ€.
class Car {
constructor(brand,name,color) {// μλ΅}
refuel() {
}
drive() {
}
}
- prototype = λͺ¨λΈμ μ²μ¬μ§μ λ§λ€ λ μ°λ μν κ°μ²΄
- constructor = μΈμ€ν΄μ€κ° μ΄κΈ°νλ λ μ€ννλ μμ±μ ν¨μ
- this = ν¨μκ° μ€νλ λ, ν΄λΉ scopeλ§λ€ μμ±λλ κ³ μ ν μ€ν context( execution context) κ·Έλ¦¬κ³ new ν€μλλ‘ μΈμ€ν΄μ€λ₯Ό μμ±νμ λμλ, ν΄λΉ μΈμ€ν΄μ€κ° λ°λ‘ thisμ κ°μ΄ λλ€.
class Car {
constructor(brand,name,color){
this.brand = brand;
this.name = name;
this.color = color;
drive() {
console.log(this.name + 'κ° μ΄μ μ μμν©λλ€');
}
}
}
let avante = new Car ('hyundai', 'avante', 'black');
avante.color; // 'black'
avante.drive; // avanteκ° μ΄μ μ μμν©λλ€.
λ°°μ΄μ λͺ¨λ Arrayμ μΈμ€ν΄μ€μ΄λ€.
let arr = ['code', 'states', 'pre'];
arr.length; //3
arr.push('course') // μλ‘μ΄ element μΆκ°
λ°°μ΄ λ©μλ (push, filter, forEach λ±λ±) λͺ¨λ λ©μλλ ν΄λμ€μ μν κ°μ²΄ (prototype)μ μ μλμ΄ μλ€.
let arr = new Array['code', 'states', 'pre'];
arr.length; //3
arr.push('course') // μλ‘μ΄ element μΆκ°
'πLanguage > JavaScript' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
TIL) νλ‘ν νμ μ 리 (0) | 2022.05.26 |
---|---|
TIL) κ°μ²΄ μ§ν₯ νλ‘κ·Έλλ°, OOP, μΊ‘μν, μΆμν, μμ, λ€νμ± (0) | 2022.05.25 |
TIL) κ³ μ°¨ν¨μ, λ΄μ₯κ³ μ°¨ν¨μ, map, filter, reduce (0) | 2022.05.25 |
TIL) λ¬Έμμ΄κ³Ό λ°°μ΄μ 곡ν΅μ (0) | 2022.05.24 |
TIL) innerHTML λ©μλμ textContent λ©μλμ μ°¨μ΄μ λν΄μ μ€λͺ ν΄μ£ΌμΈμ. (0) | 2022.05.23 |