ν΄λμ€
λ¬Έλ²μ μ€ν(Syntactic Sugar)
- μλ°μ€ν¬λ¦½νΈλ νλ‘ν νμ
κΈ°λ°μ κ°μ²΄μ§ν₯ μΈμ΄λ₯Ό μ§μν©λλ€.
- es6μμ λμ
λ ν΄λμ€λ ν΄λμ€ κΈ°λ° κ°μ²΄ μ§ν₯ νλ‘κ·Έλλ° μΈμ΄μ λ§€μ° ν‘μ¬ν κ°μ²΄ μμ± λ©μ»€λμ¦μ μ μν©λλ€.
- μ¬μ€ ν΄λμ€λ κ°μ²΄ μ§ν₯ λͺ¨λΈμ μ 곡νλ κ²μ΄ μλ ν¨μμ΄λ©° νλ‘ν νμ
κΈ°λ° ν¨ν΄μ ν΄λμ€ κΈ°λ° ν¨ν΄ μ²λΌ μ¬μ©ν μ μκ² νλ λ¬Έλ²μ μ€ν(
Syntactic Sugar
) μ΄λΌκ³ λ³Ό μ μλ€.
- ν΄λμ€λ μμ±μ ν¨μμ λ§€μ° μ μ¬νκ² λμνμ§λ§ λͺ κ°μ§ μ°¨μ΄κ° μλ€.
- ν΄λμ€λ₯Ό
new
ν€μλ μμ΄ νΈμΆ νλ©΄ μλ¬, μμ±μ ν¨μλ μΌλ° ν¨μλ‘ νΈμΆλ¨
- ν΄λμ€λ μμμ μ§μνλ
extends
μ super
ν€μλλ₯Ό μ 곡
- ν΄λμ€λ νΈμ΄μ€ν
μ΄ λ°μνμ§ μλ κ² μ²λΌ λμ, (ν¨μλ ν¨μ μ μΈλ¬Έ μΌλ‘ μ μ λ μμ±μν¨μλ ν¨μ νΈμ΄μ€ν
, ν¨μ ννμμΌλ‘ μ μν μμ±μ ν¨μλ λ³μ νΈμ΄μ€ν
λ°μ)
- ν΄λμ€ λ΄μ λͺ¨λ μ½λμλ μ묡μ μΌλ‘
strict mode
- ν΄λμ€μ λ©μλλ μ΄κ±°λμ§ μλλ€.
- ν΄λμ€λ₯Ό λ¨μν λ¬Έλ²μ μ€νμΌλ‘ 보기 보λ€λ μλ‘μ΄ κ°μ²΄ μμ± λ©μ»€λμ¦ μΌλ‘ 보λ κ²μ΄ ν©λΉ
ν΄λμ€μ μ μ
- ν΄λμ€λ
class
ν€μλλ₯Ό μ¬μ©νμ¬ μ μν¨
- ν΄λμ€λ μΌκΈ κ°μ²΄ μ΄λ©° ν¨μ
- ν΄λμ€ λͺΈμ²΄μ μ μν μ μλ λ©μλλ 3κ°μ§
- constructor(μμ±μ)
- νλ‘ν νμ
λ©μλ
- μ μ λ©μλ
ν΄λμ€ νΈμ΄μ€ν
- ν΄λμ€λ ν¨μλ‘ νκ° λλ€.
- ν΄λμ€ μ μΈ λ¬ΈμΌλ‘ μ μν ν΄λμ€λ ν¨μ μ μΈλ¬Έκ³Ό κ°μ΄ λ°νμ μ΄μ μ μμ€μ½λ νκ° κ³Όμ μ κ±°μ³ ν¨μ κ°μ²΄λ₯Ό μμ±ν¨
| class Person {} |
| |
| console.log(typeof Person); |
- μ΄λ μμ±λ μμ±μλ
constructor
( μμ±μμ νλ‘ν νμ
μ μμΌλ‘ μ‘΄μ¬νκΈ° λλ¬Έμ μ΄λ νλ‘ν νμ
λ μμ±λ¨)
- λ¨, ν΄λμ€λ μ μ μ΄μ μ μ°Έμ‘° ν μ μλ€.
- νΈμ΄μ€ν
μ΄ λμ§ μμ κ² μ²λΌ 보μ΄λ μ΄λ
let
, const
μ²λΌ TDZ
κ°λ
μ΄ μ‘΄μ¬νκΈ° λλ¬Έ
μΈμ€ν΄μ€ μμ±
- ν΄λμ€λ μμ±μ ν¨μ μ΄λ―λ‘
new
μ°μ°μμ ν¨κ» νΈμΆλμ΄ μΈμ€ν΄μ€λ₯Ό μμ±
| class Person {} |
| |
| const me = new Person(); |
- κΈ°λͺ
ν¨μ ννμκ³Ό λ§μ°¬κ°μ§λ‘ ν΄λμ€ ννμμ μγ
μ©ν ν΄λμ€ μ΄λ¦μ μΈλΆ μ½λμμ μ κ·Ό λΆκ°λ₯
| const Person = class MyClass {}; |
| |
| |
| const me = new Person(); |
| |
| |
| console.log(MyClass); |
| |
| const you = new MyClass(); |
λ©μλ
- ν΄λμ€ λͺΈμ²΄μμ μ μν μ μλ λ©μλ 3κ°μ§
constructor
(μμ±μ)
- νλ‘ν νμ
λ©μλ
- μ μ λ©μλ
constructor
- μΈμ€ν΄μ€λ₯Ό μμ±νκ³ μ΄κΈ°ννκΈ° μν νΉμν λ©μλ(μ΄λ¦ λ³κ²½ λΆκ°)
constructor
λ΄λΆμ this
λ μμ±μ ν¨μμ λ§μ°¬κ°μ§λ‘ ν΄λμ€κ° μμ±ν μΈμ€ν΄μ€λ₯Ό κ°λ¦¬ν¨λ€.
constructor
λ λ©μλλ‘ ν΄μλλ κ²μ΄ μλλΌ, ν΄λμ€κ° νκ°λμ΄ μμ±λ ν¨μ κ°μ²΄μ μ½λμ μΌλΆκ° λ¨ν΄λμ€ μ μκ° νκ°λλ©΄ constructorμ κΈ°μ λ λμμ νλ ν¨μ κ°μ²΄κ° μμ±
ν΄λμ€μ constructor λ©μλμ νλ‘ν νμ
μ constructor νλ‘νΌν°λ μ§μ μ μΈ κ΄λ ¨ μλ€.
νλ‘ν νμ
μ constructor νλ‘νΌν°λ λͺ¨λ νλ‘ν νμ
μ΄ κ°μ§κ³ μλ νλ¬νΌν° μ΄λ©°, μμ±μ ν¨μλ₯Ό κ°λ¦¬ν¨λ€.
constructorλ μμ±μ ν¨μμ μ μ¬νμ§λ§ μ°¨μ΄κ° μλ€.
- constructorλ ν΄λμ λ΄μ μ΅λ ν κ°λ§ μ‘΄μ¬ κ°λ₯
- constructorλ μλ΅ κ°λ₯ (μλ΅μ λΉ constructorκ° μ묡μ μΌλ‘ μ μ λ¨)
- constructorλ μΈμ€ν΄μ€λ₯Ό μμ±κ³Ό λμμ νλ‘νΌν°λ₯Ό μ΄κΈ°ν ν©λλ€.
곡ν΅μ : λ³λμ λ°ν(return
) μ κ°μ§ μμμΌν¨, μ묡μ μΌλ‘ this λ°ν
νλ‘ν νμ
λ©μλ
- ν΄λμ€ λͺΈμ²΄μμ μ μν λ©μλλ μμ±μ ν¨μ λ°©μκ³Ό λ¬λ¦¬ ν΄λμμ
prototype
νλ‘νΌν°μ λ©μλλ₯Ό μΆκ°νμ§ μμλ κΈ°λ³Έμ μΌλ‘ νλ‘ν νμ
λ©μλκ° λλ€.
| class Person { |
| |
| constructor(name) { |
| |
| this.name = name; |
| } |
| |
| |
| sayHi() { |
| console.log(`Hi! My name is ${this.name}`); |
| } |
| } |
| |
| const me = new Person('Lee'); |
| me.sayHi(); |
- μμ±μ ν¨μμ λ§μ°¬κ°μ§λ‘ ν΄λμ€κ° μμ±ν μΈμ€ν΄μ€ νλ‘ν νμ
체μΈμ μΌμμ΄ λλ€.
- μ 리 : ν΄λμ€λ μμ±μ ν¨μμ κ°μ΄ μΈμ€ν΄μ€λ₯Ό μμ±νλ μμ±μ ν¨μλΌκ³ λ³Ό μ μλ€. μ¦, ν΄λμ€λ νλ‘ν νμ
κΈ°λ°μ κ°μ²΄ μμ± λ©μ»€λμ¦ μ΄λ€.
μ μ λ©μλ
- μ μ (
static
)λ©μλλ μΈμ€ν΄μ€λ₯Ό μμ±νμ§ μμλ νΈμΆ ν μ μλ λ©μλλ₯Ό λ§νλ€.
- μμ±μ ν¨μ κ²½μ° μ μ λ©μλλ₯Ό μμ±νκΈ° μν΄ λͺ
μμ μΌλ‘ μμ±μ ν¨μμ λ©μλλ₯Ό μΆκ°νμ¬μΌ ν©λλ€.
- ν΄λμ€μμλ λ©μλμ
static
ν€μλλ₯Ό λΆμ΄λ©΄ μ μ λ©μλ(ν΄λμ€ λ©μλ)κ° λλ€.
| class Person { |
| |
| constructor(name) { |
| |
| this.name = name; |
| } |
| |
| |
| static sayHi() { |
| console.log('Hi!'); |
| } |
| } |
- μ μ λ©μλλ ν΄λμ€μ λ°μΈλ©λ λ©μλκ° λλ€.
μ μ λ©μλμ νλ‘ν νμ
λ©μλμ μ°¨μ΄
- μ μ λ©μλμ νλ‘ν νμ
λ©μλλ μμ μ΄ μν΄ μλ νλ‘ν νμ
체μΈμ΄ λ€λ₯΄λ€
- μ μ λ©μλλ ν΄λμ€λ‘ νΈμΆνκ³ νλ‘ν νμ
λ©μλλ μΈμ€ν΄μ€λ‘ νΈμΆ
- μ μ λ©μλλ μΈμ€ν΄μ€ νλ‘νΌν°λ₯Ό μ°Έμ‘°ν μ μμ§λ§ νλ‘ν νμ
λ©μλλ μΈμ€ν΄μ€ νλ‘νΌν°λ₯Ό μ°Έμ‘°ν μ μλ€.this λ°μΈλ© μ리μ λ°λΌ μ μ λ©μλλ ν΄λμ€λ‘ νΈμΆ νκΈ° λλ¬Έμ λ΄λΆμ μΈμ€ν΄μ€ νλ‘νΌν°λ₯Ό μ°Έμ‘° ν μ μμ΅λλ€.
thisλ₯Ό μ¬μ©νμ§ μλλ€λ©΄ μ μ λ©μλλ‘ μ μνλ κ²λ μ’μ
ν΄λμ€μμ μ μν λ©μλμ νΉμ§
function
ν€μλλ₯Ό μλ΅ν λ©μλ μΆμ½ νν μ¬μ©.
- κ°μ²΄ 리ν°λ΄κ³Ό λ€λ₯΄κ² μ½€λ§κ° νμ μμ.
- μ묡μ μΌλ‘
strict mode
λ‘ μ€ν.
for ... in
λ¬Έμ΄λ Object.keys
λ©μλ λ±μΌλ‘ μ΄κ±°ν μ μμ.
- λ΄λΆ λ©μλ
[[Construct]]
λ₯Ό κ°μ§ μλ non-constructor
. λ°λΌμ new
μ°μ°μμ ν¨κ» νΈμΆ λΆκ°.
ν΄λμ€ μΈμ€ν΄μ€ μμ± κ³Όμ
- μΈμ€ν΄μ€ μμ±κ³Ό this λ°μΈλ©
new
μ°μ°μμ ν¨κ» ν΄λμ€λ₯Ό νΈμΆνλ©΄ constructor
λ΄λΆ μ½λκ° μ€νλκΈ°μ μμ μ묡μ μΌλ‘ λΉ κ°μ²΄ μμ±.
- μ΄ λΉ κ°μ²΄κ° ν΄λμ€κ° μμ±ν μΈμ€ν΄μ€κ° λ¨.
- μ΄λ, ν΄λμ€κ° μμ±ν μΈμ€ν΄μ€μ νλ‘ν νμ
μΌλ‘ ν΄λμ€μ
prototype
νλ‘νΌν°κ° κ°λ¦¬ν€λ κ°μ²΄ μ€μ .
- μ묡μ μΌλ‘ μμ±λ λΉ κ°μ²΄. μ¦, μΈμ€ν΄μ€λ
this
μ λ°μΈλ©.λ°λΌμ constructor
λ΄λΆμ this
λ ν΄λμ€κ° μμ±ν μΈμ€ν΄μ€λ₯Ό κ°λ¦¬ν΄.
- μΈμ€ν΄μ€ μ΄κΈ°ν
constructor
μ λ΄λΆ μ½λκ° μ€ν this
μ λ°μΈλ©λμ΄ μλ μΈμ€ν΄μ€ μ΄κΈ°ν
constructor
κ° μλ΅ λμλ€λ©΄ μ΄ κ³Όμ λ μλ΅ λ¨
- μΈμ€ν΄μ€ λ°ν
- ν΄λμ€μ λͺ¨λ μ²λ¦¬κ° λλλ§ μΈμ€ν΄μ€κ° λ°μΈλ© λ
this
κ° μ묡 μ μΌλ‘ λ°ν
νλ‘νΌν°
μΈμ€ν΄μ€ νλ‘νΌν°
- μΈμ€ν΄μ€ νλ‘νΌν°λ
constructor
λ΄λΆμ μ μ κ°λ₯
- μλ°μ€ν¬λ¦½νΈμμλ μ κ·Όμ νμλ₯Ό μ§μνμ§ μκΈ° λλ¬Έμ μΈμ€ν΄μ€ νλ‘νΌν°λ
public
μ κ·Όμ νλ‘νΌν°
μ κ·Όμ νλ‘νΌν°λ?
μ체μ μΌλ‘ κ°([[ Value ]]
λ΄λΆμ¬λ‘―)μ κ°μ§ μκ³ λ°μ΄ν° νλ‘νΌν°μ κ°μ μ½κ±°λ μ μ₯ν λ μ¬μ©νλ μ κ·Όμ ν¨μλ‘ κ΅¬μ±λ νλ‘νΌν°
| |
| const person = { |
| |
| firstName : 'homie', |
| lastName : 'kim', |
| |
| |
| get fullName() { |
| return `${this.fristname} ${this.lastName}`; |
| }, |
| set fullName(name) { |
| [this.firstName, this.lastName] = name.split(' '); |
| } |
| }; |
| |
| |
| class Person { |
| |
| constructor(firstName, lastName) { |
| this.firstName =firstName; |
| this.lastName = lastName; |
| } |
| |
| get fullName() { |
| return `${this.fristname} ${this.lastName}`; |
| } |
| set fullName(name) { |
| [this.firstName, this.lastName] = name.split(' '); |
| } |
| }; |
| const me = new Person('Homie Kim'); |
- ν΄λμ€μ λ©μλλ κΈ°λ³Έμ μΌλ‘ νλ‘ν νμ
λ©μλκ° λ©λλ€. μ κ·Όμ νλ‘νΌν° λν νλ‘ν νμ
νλ‘νΌν°μ΄λ€.
private νλ μ μ μ μ
- μλ°μ€ν¬λ¦½νΈμ ν΄λμ€μ νλ‘νΌν°λ κΈ°λ³Έμ μΌλ‘
public
μ
λλ€.
- μ΅μ μλ°μ€ν¬λ¦½νΈμμλ
private
λ₯Ό μ μ ν μ μλ νμ€ μ¬μμ΄ μλ‘κ² μ μ λμμ΅λλ€.
| class Person { |
| |
| #name = ''; |
| |
| constructor(name) { |
| this.#name = name; |
| } |
| |
| |
| get name() { |
| |
| return this.#name.trim(); |
| } |
| } |
| |
| const me = new Person(' Lee '); |
| console.log(me.name); |
μμμ μν ν΄λμ€ νμ₯
- νλ‘ν νμ
κΈ°λ°μ μμμ νλ‘ν νμ
체μΈμ ν΅ν΄ λ€λ₯Έ κ°μ²΄μ μμ°μ μμλ°λ κ°λ
- μμμ μν ν΄λμ€ νμ₯μ κΈ°μ‘΄ ν΄λμ€λ₯Ό μμλ°μ μλ‘μ΄ ν΄λμ€λ₯Ό νμ₯νμ¬ μ μνλ κ²
extends
ν€μλλ₯Ό μ 곡νμ¬ μμμ ꡬνν©λλ€.
extends ν€μλ
| |
| class Base {} |
| |
| |
| class Derived extends Base {} |
- ν΄λμ€λ λ΄λΆμ μΌλ‘λ νλ‘ν νμ
μ ν΅ν΄ μμ κ΄κ³λ₯Ό ꡬνν©λλ€.
- μνΌν΄λμ€μ μλΈν΄λμ€λ μΈμ€ν΄μ€μ νλ‘ν νμ
μ²΄μΈ λΏ μλλΌ ν΄λμ€κ°μ νλ‘ν νμ
체μΈλ μμ±ν©λλ€.
- μ΄λ₯Ό ν΅ν΄ νλ‘ν νμ
λ©μλ, μ μ λ©μλ λͺ¨λ μμμ΄ κ°λ₯
λμ μμ
extends
ν€μλλ ν΄λμ€ λΏλ§ μλλΌ μμ±μ ν¨μλ₯Ό μμλ°μ ν΄λμ€λ₯Ό νμ₯ν μλ μλ€.
| |
| function Base(a) { |
| this.a = a; |
| } |
| |
| |
| class Derived extends Base {} |
| |
| const derived = new Derived(1); |
| console.log(derived); |
extends
ν€μλ λ€μμλ ν΄λμ€ λΏλ§ μλλΌ, [[Construct]]
λ΄λΆ λ©μλλ₯Ό κ°λ ν¨μ κ°μ²΄λ‘ νκ°λ μ μλ λͺ¨λ ννμ μ¬μ© κ°λ₯.
| function Base1() {} |
| |
| class Base2 {} |
| |
| let condition = true; |
| |
| |
| class Derived extends (condition ? Base1 : Base2) {} |
| |
| const derived = new Derived(); |
| console.log(derived); |
| |
| console.log(derived instanceof Base1); |
| console.log(derived instanceof Base2); |
μλΈ ν΄λμ€μ constructor
- ν΄λμ€μμ
constructor
λ₯Ό μλ΅νλ©΄ μ묡μ μΌλ‘ μμ±μ΄ λ©λλ€.
- μλΈ ν΄λμ€μμ constructorλ₯Ό μλ΅νλ©΄ μνΌ ν΄λμ€μ constructorλ₯Ό νΈμΆνμ¬ μΈμ€ν΄μ€λ₯Ό μμ±ν©λλ€.
| |
| class Base {} |
| |
| |
| class Derived extends Base { |
| |
| constructor(...args) { super(...args); } |
| } |
super ν€μλ
super
ν€μλλ ν¨μμ²λΌ νΈμΆν μλ μκ³ this
μ κ°μ΄ μλ³μ μ²λΌ μ°Έμ‘°ν μ μλ νΉμν ν€μλμ΄λ€.
- superλ₯Ό νΈμΆνλ©΄ μνΌν΄λμ€μ constructorλ₯Ό νΈμΆ νλ€.
superλ₯Ό μ°Έμ‘°νλ©΄ μνΌν΄λμ€μ λ©μλλ₯Ό νΈμΆ ν μ μλ€.
- super νΈμΆμ μ£Όμ μ¬ν
- μλΈν΄λμ€μμ constructorλ₯Ό μλ΅νμ§ μλ κ²½μ° μλΈν΄λμ€μ constructorμμλ λ°λμ superλ₯Ό νΈμΆ ν΄μΌ νλ€.
- μλΈν΄λμ€μ constructorμμ superλ₯Ό νΈμΆνκΈ° μ μλ thisλ₯Ό μ°Έμ‘°ν μ μλ€.
- superλ λ°λμ μλΈν΄λμ€μ constructorμμλ§ νΈμΆνλ€. μλΈ ν΄λμ€κ° μλ ν΄λμ€μ constructorλ ν¨μμμ superλ₯Ό νΈμΆνλ©΄ μλ¬
- superλ₯Ό μ°Έμ‘°νλ©΄ μνΌν΄λμ€μ λ©μλλ₯Ό νΈμΆν μ μλ€.
μμ ν΄λμ€μ μΈμ€ν΄μ€ μμ± κ³Όμ
- μλΈ ν΄λμ€μ
super
νΈμΆ
- μλ°μ€ν¬λ¦½νΈ μμ§μ ν΄λμ€λ₯Ό νκ°ν λ μνΌν΄λμ€μ μλΈν΄λμ€λ₯Ό ꡬλΆνκΈ° μν΄
base
λλ derived
λ₯Ό κ°μΌλ‘ κ°λ λ΄λΆμ¬λ‘― [[ ConstructorKind ]]
λ₯Ό κ°λλ€.
- λ€λ₯Έ ν΄λμ€λ₯Ό μμλ°μ§ μλ ν΄λμ€λ λ΄λΆ μ¬λ‘―
[[ConstructorKind]]
μ κ°μ΄ "base".
- λ€λ₯Έ ν΄λμ€λ₯Ό μμ λ°λ μλΈ ν΄λμ€λ λ΄λΆ μ¬λ‘―
[[ConstructorKind]]
μ κ°μ΄ "derived".
- μλΈν΄λμ€λ μμ μ΄ μ§μ μΈμ€ν΄μ€λ₯Ό μμ±νμ§ μκ³ , μνΌν΄λμ€μκ² μΈμ€ν΄μ€ μμ±μ μμνλ€.μλΈν΄λμ€μ constructorμμ λ°λμ super λ₯Ό νΈμΆν΄μΌ νλ μ΄μ
- μλΈν΄λμ€μμ superκ° νΈμΆλλ©΄ μνΌ ν΄λμ€μ
constructor
νΈμΆ
- μνΌν΄λμ€μ μΈμ€ν΄μ€ μμ±κ³Ό
this
λ°μΈλ©
- μνΌν΄λμ€μ
constructor
λ΄λΆ μ½λ μ€ν λκΈ° μ΄μ μ μ묡μ μΌλ‘ λΉ κ°μ²΄ μμ±
- μνΌν΄λμ€κ° μμ±ν λΉ κ°μ²΄κ° μ¦, μΈμ€ν΄μ€λ thisμ λ°μΈλ©λ¨
- μμ±λ μΈμ€ν΄μ€λ μνΌν΄λμ€κ° μμ±ν κ² μ΄μ§λ§
new
μ°μ°μμ νΈμΆλ ν΄λμ€κ° μλΈ ν΄λμ€μ΄λ―λ‘ new μ ν¨κ» νΈμΆλ ν¨μλ₯Ό κ°λ¦¬ν€λ new.targetμ μλΈν΄λμ€λ₯Ό κ°λ¦¬ν΄
- μνΌν΄λμ€μ μΈμ€ν΄μ€ μ΄κΈ°ν
- μνΌν΄λμ€μ
constructor
κ° μ€ν λμ΄ μΈμ€ν΄μ€μ νλ‘νΌν°λ₯Ό μ΄κΈ°ν
- μλΈν΄λμ€ constructorλ‘μ 볡κ·μ this λ°μΈλ©
super
μ νΈμΆμ΄ μ’
λ£λκ³ λ€μ μλΈν΄λμ€μ constructor
λ‘ λμμ΄
- μ΄λ
super
κ° λ°νν μΈμ€ν΄μ€κ° this
μ λ°μΈλ© λ¨
- μλΈν΄λμ€λ λ³λμ μΈμ€ν΄μ€λ₯Ό μμ±νμ§ μκ³
super
κ° λ°νν μΈμ€ν΄μ€λ₯Ό this
μ λ°μΈλ©νμ¬ κ·Έλλ‘ μ¬μ©
- μλΈν΄λμ€μ μΈμ€ν΄μ€ μ΄κΈ°ν
- μλΈν΄λμ€μ
constructor
κ° μ€νλλ©΄μ μΈμ€ν΄μ€μ νλ‘νΌν° μ΄κΈ°ν
- μΈμ€ν΄μ€ λ°ν
- λ°μΈλ© λ
this
κ° μ묡μ μΌλ‘ λ°ν
λκΈ