[๐Ÿฑ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ] ๊ฐ์ฒด ์ง€ํ–ฅ OOP

dsfasdยท2022๋…„ 9์›” 21์ผ
0

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์™€ ๊ฐ์ฒด ์ง€ํ–ฅ

JavaScript๋Š” ๊ฐ์ฒด์ง€ํ–ฅ, ์ ˆ์ฐจ์ง€ํ–ฅ ๋‘ ๊ฐ€์ง€ ํ˜•ํƒœ๋กœ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” ์–ธ์–ด์ด๋‹ค.

์ ˆ์ฐจ ์ง€ํ–ฅ์  ํ”„๋กœ๊ทธ๋ž˜๋ฐ : ์ˆœ์ฐจ์ ์ธ ๋ช…๋ น์˜ ์กฐํ•ฉ

๊ฐ์ฒด ์ง€ํ–ฅ์  ํ”„๋กœ๊ทธ๋ž˜๋ฐ : ๋ชจ๋“  ๊ฒƒ์ด ๊ฐ์ฒด๋กœ ๊ทธ๋ฃนํ™” ๋˜๋ฉฐ, ์žฌ์‚ฌ์šฉ์„ฑ์„ ์–ป์„ ์ˆ˜ ์žˆ๋‹ค.
-> JavaScript์—์„œ๋Š” ์€๋‹‰ํ™”๋ฅผ ๋•๊ธฐ ์œ„ํ•ด์„œ ์ผ๋ฐ˜์ ์œผ๋กœ ํด๋กœ์ € ๋ชจ๋“ˆ ํŒจํ„ด์„ ์‚ฌ์šฉํ•œ๋‹ค.


๊ฐ์ฒด์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์˜ ์ฃผ์š” ๊ฐœ๋… 4๊ฐ€์ง€

๊ฐ์ฒด์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ์˜ ๊ฐœ๋…์œผ๋กœ ์บก์Šํ™”, ์ƒ์†, ์ถ”์ƒํ™”, ๋‹คํ˜•์„ฑ์ด ์žˆ๋‹ค.

๐ŸŽ 1. ์บก์Šํ™” (์€๋‹‰ํ™”):

๋ฐ์ดํ„ฐ์™€ ๊ธฐ๋Šฅ์„ ํ•˜๋‚˜์˜ ๊ฐ์ฒด ์•ˆ์— ๋„ฃ์–ด ๋‹จ์œ„๋กœ ๋ฌถ๋Š” ๊ฒƒ

  • ๋Š์Šจํ•œ ๊ฒฐํ•ฉ -> ์‰ฌ์šด ์ˆ˜์ •
    ์ฝ”๋“œ ์‹คํ–‰์— ๋งž์ถฐ ์ ˆ์ฐจ์ ์œผ๋กœ ์ž‘์„ฑํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹Œ ์ฝ”๋“œ๊ฐ€ ์ƒ์ง•ํ•˜๋Š” ๋ชจ์Šต๊ณผ ๋‹ฎ๊ฒŒ ์ฝ”๋“œ๋ฅผ ๋ชจ์•„ ๊ฒฐํ•ฉํ•˜๋Š” ๊ฒƒ
    ( ์ ˆ์ฐจ์ ์œผ๋กœ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๊ฒŒ ๋˜๋ฉด ์ฝ”๋“œ ์ˆ˜์ •์‹œ ์ฝ”๋“œ์˜ ํ๋ฆ„์— ํฐ ์˜ํ–ฅ์„ ๋ผ์น˜๋ฏ€๋กœ ์ˆ˜์ •์ด ์–ด๋ ต๋‹ค. )
  • ์€๋‹‰
    ์™ธ๋ถ€ ๋ฐ์ดํ„ฐ๋‚˜ ๋‚ด๋ถ€ ๊ตฌํ˜„์ด ์™ธ๋ถ€๋กœ ๋…ธ์ถœ๋˜์ง€ ์•Š๋„๋ก ๋งŒ๋“œ๋Š” ๊ฒƒ.
    ( ์ž…๋ ฅ ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๊ฒŒ๋˜๋ฉด ์ž…๋ ฅ์ด๋ผ๋Š” ๋™์ž‘์ด ์ˆ˜ํ–‰๋˜์ง€๋งŒ, ๋‚ด๋ถ€ ๊ตฌํ˜„์ด ์–ด๋–ป๊ฒŒ ๋˜์—ˆ๋Š”์ง€๋Š” ์•Œ์ง€ ๋ชปํ•œ๋‹ค.)
  • ๋‚ด๋ถ€ ์ธํ„ฐํŽ˜์ด์Šค, private : ๋™์ผํ•œ ํด๋ž˜์Šค ๋‚ด์˜ ๋‹ค๋ฅธ ๋ฉ”์„œ๋“œ์—์„œ๋Š” ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ํด๋ž˜์Šค ๋ฐ–์—์„œ๋Š” ์ ‘๊ทผ์ด ๋ถˆ๊ฐ€๋Šฅํ•œ ํ”„๋กœํผํ‹ฐ์™€ ๋ฉ”์„œ๋“œ
  • ์™ธ๋ถ€ ์ธํ„ฐํŽ˜์ด์Šค, public : ํด๋ž˜์Šค ๋ฐ–์—์„œ๋„ ์ ‘๊ทผ ๊ฐ€๋Šฅํ•œ ํ”„๋กœํผํ‹ฐ์™€ ๋ฉ”์„œ๋“œ
  • getter(ํš๋“์ž)'์™€ โ€˜setter(์„ค์ •์ž)โ€™ ํ‚ค์›Œ๋“œ๋ฅผ ํ†ตํ•ด ๊ตฌํ˜„
  • ์ฝ๊ธฐ ์ „์šฉ์˜ ๊ฒฝ์šฐ getter๋งŒ ๊ตฌํ˜„

์บก์Šํ™” ์˜ˆ์ œ

class CoffeeMachine {
  _waterAmount = 0;

  set waterAmount(value) {
    if (value < 0) throw new Error("๋ฌผ์˜ ์–‘์€ ์Œ์ˆ˜๊ฐ€ ๋  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.");
    this._waterAmount = value;
  }

  get waterAmount() {
    return this._waterAmount;
  }

  constructor(power) {
    this._power = power;
  }

}

// ์ปคํ”ผ ๋จธ์‹  ์ƒ์„ฑ
let coffeeMachine = new CoffeeMachine(100);

// ๋ฌผ ์ถ”๊ฐ€
coffeeMachine.waterAmount = -10; // Error: ๋ฌผ์˜ ์–‘์€ ์Œ์ˆ˜๊ฐ€ ๋  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

๐ŸŽ 2. ์ถ”์ƒํ™”

๋‚ด๋ถ€ ๊ตฌํ˜„์€ ์•„์ฃผ ๋ณต์žกํ•œ๋ฐ, ์‹ค์ œ๋กœ ๋…ธ์ถœ๋˜๋Š” ๋ถ€๋ถ„์€ ๋‹จ์ˆœํ•˜๊ฒŒ ๋งŒ๋“ ๋‹ค

์™ธ๋ถ€์—์„œ๋Š” ๋‚ด๋ถ€์˜ ๋™์ž‘ ๋ฐฉ์‹์„ ์ „ํ˜€ ์•Œ์ง€ ๋ชปํ•œ๋‹ค. ํ•˜์ง€๋งŒ ์™ธ๋ถ€ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ํ†ตํ•ด์„œ ๊ฐ์ฒด๋งŒ ๊ฐ–๊ณ ๋„ ๋‚ด๋ถ€ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๋™์ž‘ ์‹œํ‚ฌ ์ˆ˜ ์žˆ๋‹ค.

์ถ”์ƒํ™”๋Š” ๋‚ด๋ถ€ ๋ฐ์ดํ„ฐ์™€ ๋‚ด๋ถ€ ๋™์ž‘ ๋ฐฉ์‹์ด ์™ธ๋ถ€์— ๋…ธ์ถœ๋˜์ง€ ์•Š๋Š”๋‹ค๋Š” ์ ์—์„œ ์บก์Šํ™”์™€ ์œ ์‚ฌํ•˜๋‹ค.

์บก์Šํ™”๊ฐ€ ์ฝ”๋“œ๋‚˜ ๋ฐ์ดํ„ฐ์˜ ์€๋‹‰์— ํฌ์ปค์Šค๊ฐ€ ๋งž์ถฐ์ ธ์žˆ๋‹ค๋ฉด,
์ถ”์ƒํ™”๋Š” ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์‚ฌ๋žŒ์ด ํ•„์š”ํ•˜์ง€ ์•Š์€ ๋ฉ”์„œ๋“œ ๋“ฑ์„ ๋…ธ์ถœ์‹œํ‚ค์ง€ ์•Š๊ณ , ๋‹จ์ˆœํ•œ ์ธํ„ฐํŽ˜์ด์Šค๋กœ ์ •์˜ํ•˜๋Š” ๊ฒƒ์— ํฌ์ปค์Šค๊ฐ€ ๋งž์ถฐ์ ธ ์žˆ๋‹ค.


๐ŸŽ 3. ์ƒ์†

๋ถ€๋ชจ ํด๋ž˜์Šค์˜ ํŠน์ง•์„ ์ž์‹ ํด๋ž˜์Šค๊ฐ€ ๋ฌผ๋ ค๋ฐ›๋Š” ๊ฒƒ

๋™์ผํ•œ ๋ถ€๋ชจ ํด๋ž˜์Šค์—์„œ ์†์„ฑ๊ณผ ๋ฉ”์„œ๋“œ๋ฅผ ์ถ”๊ฐ€ํ•˜์—ฌ ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

๋น„์Šทํ•œ ๊ธฐ๋Šฅ์—์„œ ์†์„ฑ๊ณผ ๋ฉ”์„œ๋“œ๋ฅผ ๋ช‡ ๊ฐœ๋งŒ ์ถ”๊ฐ€ํ•˜๊ณ  ์‹ถ์€ ์ƒํ™ฉ์„ ๊ฐ€์ •ํ•ด๋ณด์ž.
์ด๋Š” ์ฝ”๋“œ๋ฅผ ์ƒˆ๋กœ ๊ตฌํ˜„ํ•ด์•ผ ํ•œ๋‹ค๋Š” ์ ์—์„œ ๋ถ„๋ช… ๋น„ํšจ์œจ์ ์ด๋‹ค.

ํ•˜์ง€๋งŒ ์ƒ์†์„ ์‚ฌ์šฉํ•˜๊ฒŒ ๋˜๋ฉด ๋‹ค๋ฅธ ๊ฐ์ฒด์˜ ํ”„๋กœํผํ‹ฐ๋ฅผ ๋ฐ›์•„์™€์„œ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜, ์†์„ฑ ๋ฐ ๋ฉ”์„œ๋“œ๋ฅผ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ๋‹ค.

์ƒ์† ์˜ˆ์ œ

let animal = {
  eats: true
};
let rabbit = {
  jumps: true
};

rabbit.__proto__ = animal; // (*)

// ํ”„๋กœํผํ‹ฐ eats๊ณผ jumps๋ฅผ rabbit์—์„œ๋„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
alert( rabbit.eats ); // true (**)
alert( rabbit.jumps ); // true

rabbit.__proto__ = animal ๋ฅผ ํ†ตํ•ด animal์ด rabbit์˜ ํ”„๋กœํ† ํƒ€์ž…์ด ๋˜๋„๋ก ์„ค์ •ํ•˜์˜€๋‹ค.
ํ”„๋กœํผํ‹ฐ eats๊ณผ jumps๋ฅผ rabbit์—์„œ๋„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜์—ˆ๋‹ค.


๐ŸŽ 4.๋‹คํ˜•์„ฑ(Polymorphism)

๋‹คํ˜•์„ฑ(Polymorphism)์€ Poly - ๋งŽ์€, morph - ํ˜•ํƒœ ์ฆ‰, ๋‹ค์–‘ํ•œ ํ˜•ํƒœ๋ผ๋Š” ์˜๋ฏธ๋ฅผ ๋‹ด๊ณ  ์žˆ๋‹ค.

ํ•˜๋‚˜์˜ ๋ฉ”์†Œ๋“œ๋‚˜ ํด๋ž˜์Šค๊ฐ€ ์žˆ์„ ๋•Œ ์ด๊ฒƒ๋“ค์ด ๋‹ค์–‘ํ•œ ๋ฐฉ๋ฒ•์œผ๋กœ ๋™์ž‘ํ•˜๋Š” ๊ฒƒ
( ๋™์ผํ•œ ์กฐ์ž‘๋ฐฉ๋ฒ•์œผ๋กœ ๋™์ž‘์‹œํ‚ค์ง€๋งŒ ๋™์ž‘๋ฐฉ๋ฒ•์€ ๋‹ค๋ฅธ ๊ฒƒ์„ ์˜๋ฏธ )

profile
๊ธฐ๋ก์„ ์ •๋ฆฌํ•˜๋Š” ๊ณต๊ฐ„!

0๊ฐœ์˜ ๋Œ“๊ธ€