[🐱 μžλ°”μŠ€ν¬λ¦½νŠΈ] ν΄λž˜μŠ€μ™€ μΈμŠ€ν„΄μŠ€

dsfasdΒ·2022λ…„ 9μ›” 21일
0

μžλ°”μŠ€ν¬λ¦½νŠΈ ν΄λž˜μŠ€μ™€ μΈμŠ€ν„΄μŠ€

🍎 ν΄λž˜μŠ€μ™€ μΈμŠ€ν„΄μŠ€λž€?

ν”νžˆ ν΄λž˜μŠ€μ™€ μΈμŠ€ν„΄μŠ€λ₯Ό μ„€λͺ…ν•  λ•Œ λΆ•μ–΄λΉ΅κ³Ό λΆ•μ–΄λΉ΅ 틀에 λΉ„κ΅ν•˜κ³€ ν•œλ‹€.
ν΄λž˜μŠ€λŠ” λΆ•μ–΄λΉ΅μ˜ 틀에 ν•΄λ‹Ήν•˜κ³ , μΈμŠ€ν„΄μŠ€ 객체(μΈμŠ€ν„΄μŠ€)λŠ” ν‹€λ‘œ λ§Œλ“€μ–΄μ§„ 뢕어빡에 ν•΄λ‹Ήν•œλ‹€.

즉, 클래슀λ₯Ό μ‚¬μš©ν•˜μ—¬ λ™μΌν•œ ν‹€(κΈ°λŠ₯,μš”μ†Œ)을 κ°–λŠ” 객체 μ—¬λŸ¬κ°œλ₯Ό 생성할 수 μžˆλ‹€.


🍎 클래슀λ₯Ό μ‚¬μš©ν•˜λŠ” 이유

클래슀λ₯Ό μ‚¬μš©ν•˜λŠ” μ΄μœ λŠ” λ‹€μ–‘ν•œ 객체λ₯Ό λ§Œλ“€κ³ , μ‚¬μš©ν•˜κΈ° μœ„ν•¨μ΄λ‹€. 즉 μœ μ—°μ„±μ— μ΄ˆμ μ„ λ‘”λ‹€.

μ•„λž˜ μ½”λ“œμ™€ 같이 ν•˜λ‚˜μ˜ λ³€μˆ˜μ— λŒ€ν•΄μ„œλ§Œ λ©”μ„œλ“œ 호좜이 κ°€λŠ₯해진닀면 λ™μΌν•œ κΈ°λŠ₯을 μˆ˜ν–‰ν•˜λŠ” λ‹€λ₯Έ λ³€μˆ˜λ₯Ό
λ§Œλ“€ 경우 일일히 μƒˆλ‘œ λ³€μˆ˜λ₯Ό λ§Œλ“€κ³  λ³€μˆ˜μ— λ©”μ„œλ“œλ₯Ό ν• λ‹Ήν•΄μ•Ό ν•˜λŠ” λΆˆμƒμ‚¬κ°€ 생긴닀.

let counter1 = {
  value: 0,
  increase: function() {
    this.value++ 
  },
  decrease: function() {
    this.value--
  },
  getValue: function() {
    return this.value
  }
}

🍎 ν΄λ‘œμ € λͺ¨λ“ˆ νŒ¨ν„΄

μ•„λž˜λŠ” ν΄λ‘œμ € λͺ¨λ“ˆ νŒ¨ν„΄μ˜ μ˜ˆμ΄λ‹€.

이제 일일히 λ³€μˆ˜μ— λ©”μ„œλ“œλ₯Ό μ„ μ–Έν•  ν•„μš” 없이 λ³€μˆ˜μ— makeCounter ν•¨μˆ˜μ˜ ν˜ΈμΆœλ¬Έμ„ ν• λ‹Ήν•˜λ©΄
μ—¬λŸ¬κ°œμ˜ λ³€μˆ˜λ₯Ό 생성함과 λ™μ‹œμ— μ‚¬μš©ν•  수 있게 λœλ‹€.

ν΄λž˜μŠ€λŠ” λ‹€μŒκ³Ό 같은 κΈ°λŠ₯을 μˆ˜ν–‰ν•œλ‹€.
ν•˜μ§€λ§Œ μ•„λž˜μ˜ μ˜ˆμ‹œλŠ” ν΄λž˜μŠ€λŠ” μ•„λ‹ˆλ©° 클래슀의 κΈ°λŠ₯을 λΉ„μŠ·ν•˜κ²Œ κ΅¬ν˜„ν•˜λŠ” ν•¨μˆ˜μ˜ μ˜ˆμ‹œμ΄λ‹€.

function makeCounter() {
  let value = 0;
  return {
    increase: function() {
      value++;
    },
    decrease: function() {
      value--;
    },
    getValue: function() {
      return value;
    }
  }
}

let counter1 = makeCounter()
counter1.increase()
counter1.getValue() // 1

let counter2 = makeCounter()
counter2.decrease()
counter2.decrease()
counter2.getValue() // -2

ν΄λž˜μŠ€μ™€ μΈμŠ€ν„΄μŠ€μ˜ 생성

🍎 μƒˆλ‘œμš΄ 클래슀 μƒμ„±ν•˜κΈ°

ν΄λž˜μŠ€λŠ” μΌμ’…μ˜ ν•¨μˆ˜μ΄λ©°, class선언을 톡해 μƒμ„±ν•œλ‹€.

μƒˆλ‘­κ²Œ λ„μž…λœ ES6μ—μ„œ 클래슀λ₯Ό μƒμ„±ν•˜λŠ” 방법은 λ‹€μŒκ³Ό κ°™λ‹€.

  • class ν‚€μ›Œλ“œλ₯Ό μž‘μ„± ν›„, 클래슀의 이름을 μ„ μ–Έν•΄μ€€λ‹€.
  • constructor ν‚€μ›Œλ“œμ˜ parameter둜 λ„˜μ–΄μ˜¨ height, width은 μΈμŠ€ν„΄μŠ€ 생성 μ‹œ μ§€μ •ν•˜λŠ” 값이닀.
  • this에 ν• λ‹Ήν•œλ‹€λŠ” 것은 λ§Œλ“€μ–΄μ§„ μΈμŠ€ν„΄μŠ€μ— height, width을 λΆ€μ—¬ν•˜κ² λ‹€λŠ” μ˜λ―Έμ΄λ‹€.
class Rectangle {
  constructor(height, width) {
    this.height = height;
    this.width = width;
  }
 }
}

🍎 μƒˆλ‘œμš΄ μΈμŠ€ν„΄μŠ€ μƒμ„±ν•˜κΈ°

let rectangle1 = new Rectangle(100,150);

new ν‚€μ›Œλ“œλ₯Ό 톡해 μƒμ„±μž ν•¨μˆ˜κ°€ μ‹€ν–‰λ˜λ©° λ³€μˆ˜μ— 클래슀의 섀계λ₯Ό 가진 μΈμŠ€ν„΄μŠ€κ°€ ν• λ‹Ήλœλ‹€.

  • ν΄λž˜μŠ€λŠ” 보톡 λŒ€λ¬Έμžλ‘œ μ‹œμž‘ν•˜λ©° 일반 λͺ…μ‚¬λ‘œ λ§Œλ“ λ‹€.
  • 일반적인 ν•¨μˆ˜λŠ” μ μ ˆν•œ 동사λ₯Ό ν¬ν•¨ν•˜κ³  μ†Œλ¬Έμžλ‘œ μ‹œμž‘ν•œλ‹€.

μœ„μ™€ 같이 let rectangle1 = new Rectangle(100,150); λ₯Ό μž‘μ„±ν•˜λ©΄
Rectangle 클래슀의 μƒˆλ‘œμš΄ μΈμŠ€ν„΄μŠ€λ₯Ό μƒμ„±ν•˜μ—¬ λ³€μˆ˜ rectangle1에 ν• λ‹Ήν•œλ‹€.
이 λ•Œ μΈμŠ€ν„΄μŠ€μ˜ width,height 값은 각각 100, 150이닀.


μΈμŠ€ν„΄μŠ€ 속성 & λ©”μ„œλ“œ μ •μ˜

각각의 μΈμŠ€ν„΄μŠ€λŠ” 클래슀의 κ³ μœ ν•œ 속성과 λ©”μ„œλ“œλ₯Ό κ°–λŠ”λ‹€.

🍎 μΈμŠ€ν„΄μŠ€ 속성 μ •μ˜

class Rectangle {
  constructor(height, width) {
    this.height = height;
    this.width = width;
  }
 }
}

사싀 μœ„μ—μ„œ 이미 클래슀 속성은 μ •μ˜λ₯Ό ν•΄ λ‘” μƒνƒœμ΄λ‹€.

  • constructor λ©”μ„œλ“œλŠ” class 둜 μƒμ„±λœ 객체λ₯Ό μƒμ„±ν•˜κ³  μ΄ˆκΈ°ν™”ν•˜κΈ° μœ„ν•œ νŠΉμˆ˜ν•œ λ©”μ„œλ“œμ΄λ‹€.
    constructor λ©”μ„œλ“œμ˜ parameter값인 height, widthκ°€ μΈμŠ€ν„΄μŠ€μ˜ 속성에 ν•΄λ‹Ήν•œλ‹€.
    ("constructor" λΌλŠ” 이름을 가진 νŠΉμˆ˜ν•œ λ©”μ„œλ“œλŠ” 클래슀 μ•ˆμ— ν•œ 개만 μ‘΄μž¬ν•  수 μžˆλ‹€.)

  • this에 ν• λ‹Ήν•œλ‹€λŠ” 것은 λ§Œλ“€μ–΄μ§„ μΈμŠ€ν„΄μŠ€μ— height, width을 λΆ€μ—¬ν•˜κ² λ‹€λŠ” μ˜λ―Έμ΄λ‹€.


🍎 클래슀 λ©”μ„œλ“œ μ •μ˜

클래슀 body 내뢀에 λ©”μ„œλ“œλ₯Ό μ •μ˜ν•  수 μžˆλ‹€.
λ©”μ„œλ“œλŠ” 클래슀 내뢀에 μ •μ˜λœ ν•¨μˆ˜λΌκ³  μƒκ°ν•˜λ©΄ 쉽닀.

  • get ν‚€μ›Œλ“œλŠ” 객체의 속성을 κΊΌλ‚΄κΈ° μœ„ν•΄μ„œ μ‚¬μš©ν•œλ‹€.

  • set ν‚€μ›Œλ“œλŠ” μ‚¬μš©μžκ°€ 속성에 값을 μ €μž₯ν• λ•Œ μ‹€ν–‰ν•œλ‹€. μ €μž₯ 값에 μ œμ•½μ„ 두기 μœ„ν•΄μ„œ 많이 μ‚¬μš©ν•œλ‹€.

  • Rectangle 클래슀 내뢀에 calcArea λ©”μ„œλ“œκ°€ μ„ μ–Έλ˜μ–΄ μžˆλ‹€. Rectangle 클래슀의 속성 값을 λ°›μ•„ κ²°κ³Όλ₯Ό return ν•΄μ£Όκ³  μžˆλ‹€.
    클래슀 λ©”μ„œλ“œμ˜ ν˜ΈμΆœμ€ 클래슀 μΈμŠ€ν„΄μŠ€κ°€ ν• λ‹Ήλœ λ³€μˆ˜.λ©”μ„œλ“œλ‘œ μ‚¬μš©ν•œλ‹€.

class Rectangle {
  constructor(height, width) {
    this.height = height;
    this.width = width;
  }
  // Getter
  get area() {
    return this.calcArea();
  }
  // λ©”μ„œλ“œ
  calcArea() {
    return this.height * this.width;
  }
}

const square = new Rectangle(10, 10);

console.log(square.area); // 100

μžλ°”μŠ€ν¬λ¦½νŠΈ 클래슀 κ΄€λ ¨ μš©μ–΄

prototype

λͺ¨λΈμ˜ 청사진을 λ§Œλ“€ λ•Œ μ“°λŠ” μ›ν˜• 객체

[κ΄€λ ¨ ν¬μŠ€νŒ…]
https://velog.io/@bommy5799/%EC%9E%90%EB%B0%94%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8-%ED%94%84%EB%A1%9C%ED%86%A0%ED%83%80%EC%9E%85-prototype

constructor

μΈμŠ€ν„΄μŠ€κ°€ μ΄ˆκΈ°ν™”λ  λ•Œ μ‹€ν–‰ν•˜λŠ” μƒμ„±μž ν•¨μˆ˜

this

ν•¨μˆ˜κ°€ 싀행될 λ•Œ ν•΄λ‹Ή scope λ§ˆλ‹€ μƒμ„±λ˜λŠ” κ³ μœ ν•œ μ‹€ν–‰.

profile
기둝을 μ •λ¦¬ν•˜λŠ” 곡간!

0개의 λŒ“κΈ€