๐ŸŽ๊ฐ์ฒด ์ง€ํ–ฅ ํ”„๋กœ๊ทธ๋ž˜๋ฐ (6) Inheritance ์ƒ์†

๐Ÿ’ฐ์ƒ์†

์ผ๋‹จ ์–ด๋ ค์šด ๋ง๋กœ๋Š” Javascript ์—์„œ ํด๋ž˜์Šค๋ฅผ ์ƒ์†ํ•ด์„œ ์„œ๋ธŒํด๋ž˜์Šค๋ฅผ ๋งŒ๋“œ๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค.

1. โž•ํด๋ž˜์Šค์— ๋‹ค๋ฅธ ๊ธฐ๋Šฅ ์ถ”๊ฐ€ํ•˜๊ธฐ (์ฝ”๋“œ๋ฅผ Update ํ•˜๋Š” ๋ฐฉ์‹)

class Person {
  constructor(name, first, second) {
    this.name = name
    this.first = first
    this.second = second
  }
  sum() {
    return this.first + this.second
  }
}

์ ์ˆ˜ ํ•ฉ๊ณ„ ๊ตฌํ•˜๋Š” ๊ธฐ๋Šฅ ๋ง๊ณ  ์ ์ˆ˜ ํ‰๊ท  ๊ตฌํ•˜๋Š” ๊ธฐ๋Šฅ๋„ ๋„ฃ๊ณ  ์‹ถ๋‹จ ๋ง์ด์ง€.

๊ทธ๋ž˜์„œ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ–ˆ๋‹ค.

class Person {
  constructor(name, first, second) {
    this.name = name
    this.first = first
    this.second = second
  }
  sum() {
    return this.first + this.second
  }
  avg() {
    return (this.first + this.second) / 2
  }
}

let kim = new Person('kim', 2, 4)

kim.sum()
6
kim.avg()
3

์ž˜ ๋œ๋‹ค.

๐Ÿค”์œ„์˜ ์ฝ”๋“œ์˜ ๋‹จ์ 

๋งŒ์•ฝ Person ์ด๋ผ๋Š” ํด๋ž˜์Šค๊ฐ€ ๋‚ด๊ฐ€ ๋งŒ๋“  ๊ฒƒ์ด ์•„๋‹Œ ๊ฐ€์ ธ๋‹ค ์“ฐ๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋ผ๋ฉด ๋‚ด๊ฐ€ ์ž‘์—…ํ•œ ๊ฒƒ์ด ์›๋ณธ์„ ๋ฎ์–ด์“ฐ๊ฒŒ ๋˜๊ฑฐ๋‚˜ ์ˆ˜์ •์‚ฌํ•ญ ๋•Œ๋ฌธ์— ์—…๋ฐ์ดํŠธ๋ฅผ ๋ชปํ•˜๊ฒŒ ๋˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ์ƒ๊ธฐ๊ณ  ๋งŒ๋‹ค.

๋˜ Person() ์ด๋ผ๋Š” ํด๋ž˜์Šค์˜ ๊ธฐ๋Šฅ์„ ์ตœ์†Œํ•œ์œผ๋กœ ์œ ์ง€ํ•˜๋ฉด์„œ avg() ๊ฐ™์€ ๊ธฐ๋Šฅ์„ ๋ฐ”๋กœ ์ถ”๊ฐ€ํ•˜๊ธฐ์—๋Š” ๋ถ€๋‹ด? ์Šค๋Ÿฌ์šด ๊ฒฝ์šฐ ๋ผ๊ณ  ํ•œ๋‹ค.

๋งˆ์ง€๋ง‰์œผ๋กœ ๊ทธ๋Ÿฐ ์ˆ˜์ •์‚ฌํ•ญ ๋•Œ๋ฌธ์— ์—…๋ฐ์ดํŠธ๋ฅผ ๋ชปํ•˜๊ฒŒ ๋˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ์ƒ๊ธธ ์ˆ˜๋„ ์žˆ๋‹ค๊ณ  ํ•œ๋‹ค.

2. โž•ํด๋ž˜์Šค์— ๋‹ค๋ฅธ ๊ธฐ๋Šฅ ์ถ”๊ฐ€ํ•˜๊ธฐ - ํด๋ž˜์Šค๋ฅผ ํ•˜๋‚˜ ๋˜ ๋งŒ๋“ค๊ธฐ

์œ„์˜ ์ฝ”๋“œ๋ฅผ ๊ณ ๋Œ€๋กœ ๋ณต๋ถ™ํ•ด์„œ ํด๋ž˜์Šค ์ด๋ฆ„๋งŒ ๋‹ค๋ฅด๊ฒŒ ๋งŒ๋“œ๋Š” ๊ฑฐ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์‹ ๊ธฐ์ˆ  avg() ๋ฅผ ์ถ”๊ฐ€ํ•ด ์ฃผ๋Š” ๊ฑฐ๋‹ค.

class Person {
  constructor(name, first, second) {
    this.name = name
    this.first = first
    this.second = second
  }
  sum() {
    return this.first + this.second
  }
}

class PersonPlus {
  constructor(name, first, second) {
    this.name = name
    this.first = first
    this.second = second
  }
  sum() {
    return this.first + this.second
  }
  avg() {
    return (this.first + this.second) / 2
  }
}

๊ฒฐ๊ณผ๋Š” ์›ํ•˜๋Š” ๋Œ€๋กœ ๊ฐ’์„ ์–ป์„ ์ˆ˜ ์žˆ๊ฒ ์ง€๋งŒ ์—ฌ๊ธฐ์—๋Š” ์น˜๋ช…์ ์ธ ๋ฌธ์ œ๊ฐ€ ์กด์žฌํ•œ๋‹ค.

๐Ÿ˜ฑ๋ฌธ์ œ์ ? ใ…ˆ ใ…œ ใ…‡ ใ…‚ ใ…— ใ„ฑ

๊ทธ๊ฑฐ์Šจ ๋ฐ”๋กœ ์ค‘๋ณต ์ด๋‹ค.

์ด ์ค‘๋ณต ์ œ๊ฑฐ๋ฅผ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•ด์ฃผ๋ฉด์„œ ์ฝ”๋“œ์˜ ์–‘์„ ์ค„์ด๋Š” ๋ฐฉ๋ฒ•์€ ๋ญ˜๊นŒ?

๐Ÿ‘ฟ์ƒ์† (Inheritance) ์ฒซ๋ฒˆ์งธ. ์ค‘๋ณต ๋‚ ๋ฆฌ๊ธฐ.

PersonPlus ํด๋ž˜์Šค์—์„œ ์ผ๋‹จ ์ค‘๋ณต์„ ๋‹ค ์ง€์›Œ ๋ฒ„๋ฆฐ๋‹ค.

class Person {
  constructor(name, first, second) {
    this.name = name
    this.first = first
    this.second = second
  }
  sum() {
    return this.first + this.second
  }
}

class PersonPlus {
  avg() {
    return (this.first + this.second) / 2
  }
}

ํ•˜์ง€๋งŒ ์•„์ง ํ•˜๋‚˜ ๋‚จ์•˜๋‹ค.

๊ทธ๊ฒƒ์€ class Person ์„ ์ƒ์†๋ฐ›์•„ ์˜ค๋Š” ๊ณผ์ •์ด๋‹ค.

๐Ÿ‘ฟ์ƒ์† (Inheritance) ๋‘๋ฒˆ์งธ. ์ƒ์† ์—ฐ๊ฒฐ ์‹œํ‚ค๊ธฐ

๋ถ€๋ชจ๋‹˜์˜ ๋ชจ๋“  ๊ณ„์ขŒ๋ฅผ ์ด์ œ ๋‚ด๊ป„๋กœ ํ๋ฅด๊ฒŒ ๋งŒ๋“ค์ž.

class Person {
  constructor(name, first, second) {
    this.name = name
    this.first = first
    this.second = second
  }
  sum() {
    return this.first + this.second
  }
}

class PersonPlus extends Person {
  avg() {
    return (this.first + this.second) / 2
  }
}

extends Person ์„ ํ†ตํ•ด ๋ถ€๋ชจ๋‹˜์˜ ๊ณ„์ขŒ๋ฅผ ๋‚ด ํ˜ธ์ฃผ๋จธ๋‹ˆ๋กœ ์—ฐ๊ฒฐํ–ˆ๋‹ค!

์ด์ œ ๋‚จ์€ ๊ฒƒ์€ ๋ถ€๋ชจ์˜ ์š”์†Œ๋ฅผ ์จ๋จน๋Š”๊ฑฐ๋‹ค!(??)

ํด๋ž˜์Šค Person ์ด ๊ฐ€์ง€๊ณ  ์žˆ๋˜ ์š”์†Œ๋“ค์ด ์ด์ œ PersonPlus ์— ๋กœ๋”ฉ๋œ๋‹ค.

๐Ÿ’ƒ๐Ÿป์ƒ์†์˜ ํšจ๊ณผ

  1. ์ค‘๋ณต๋˜๋Š” ์ฝ”๋“œ๋ฅผ ์ œ๊ฑฐํ•จ
  2. ์ค‘๋ณต ์ฝ”๋“œ ์ œ๊ฑฐ๋ฅผ ํ†ตํ•ด ์ฝ”๋“œ์˜ ์–‘์„ ์ค„์ด๋ฉฐ, ์ค‘๋ณตํ•ด์„œ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋Š” ๋ถ€๋ชจ ํด๋ž˜์Šค์˜ ์š”์†Œ๋ฅผ ๋ฐ”๊พธ๋ฉด
  3. Person ์„ ์ƒ์†๋ฐ›๊ณ  ์žˆ๋Š” ๋ชจ๋“  ํด๋ž˜์Šค ์—์„œ ๋™์‹œ ๋‹ค๋ฐœ์ ์œผ๋กœ ๋ณ€๊ฒฝ์ด ์ผ์–ด๋‚˜๋ฉฐ
  4. 3์„ ํ†ตํ•ด ์œ ์ง€ ๋ณด์ˆ˜์˜ ํŽธ์˜์„ฑ์„ ๋„๋ชจํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค.

๐Ÿ‘จโ€๐Ÿ‘ฉโ€๐Ÿ‘ง๋‹ค์‹œ ํ•œ๋ฒˆ ๋” ์ƒ์†.

1. ์ƒ์†์ด ๋ญ˜๊นŒ์š”?

class๋กœ ๋งŒ๋“  ํ•˜๋‚˜์˜ ๊ฐ์ฒด ์ƒ์„ฑ์ž(๋ถ€๋ชจ)์— ๊ธฐ๋Šฅ ๋“ฑ์„ ์ถ”๊ฐ€ํ•˜๋ ค๊ณ  ํ•  ๋•Œ, ์ž์‹ ์ƒ์„ฑ์ž๋ฅผ ๋งŒ๋“ค์–ด ๋“ค์–ด์˜ฌ ๊ฐ’์„ ๋ถ€๋ชจ๋กœ ๋ถ€ํ„ฐ ์ƒ์†๋ฐ›์•„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

2. ์ƒ์†์ด ์—†์œผ๋ฉด ๋ญ๊ฐ€ ๋ถˆํŽธํ•œ๊ฐ€์š”?

๋‹ค๋ฅธ ์‚ฌ๋žŒ์ด ๋งŒ๋“  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋“ฑ์„ ์œ ์ง€๋ณด์ˆ˜๋ฅผ ์œ„ํ•ด ์ง์ ‘ ์ˆ˜์ •์‹œ ์˜ค๋ฅ˜๊ฐ€ ๋‚  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ๋ณต์ œํ•ด์„œ ์‚ฌ์šฉํ•˜๊ฒŒ ๋˜๋ฉด ์ค‘๋ณต์ด ๋งŽ์•„์ ธ ์œ ์ง€๋ณด์ˆ˜์— ์ข‹์ง€์•Š๊ณ  ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ์‹œ ํšจ์œจ์ด ๋–จ์–ด์ง‘๋‹ˆ๋‹ค.

3. ์ƒ์†๋ฐ›๋Š” ์ž์‹ ํด๋ž˜์Šค๋Š” ์–ด๋–ป๊ฒŒ ๊ตฌํ˜„?

(extends ๋ถ€๋ชจํด๋ž˜์Šค๋ช… - ๋ถ€๋ชจ๋กœ๋ถ€ํ„ฐ ๋ฐ›์•„์™€์„œ ํ™•์žฅํ•œ๋‹ค.)

์ž์‹ํด๋ž˜์Šค๋Š”

class ์ž์‹ํด๋ž˜์Šค๋ช… extends ๋ถ€๋ชจํด๋ž˜์Šค๋ช… {
  ์ถ”๊ฐ€ํ• ํ•จ์ˆ˜๋ช…() {}
}

Written by@[DotoriMook]
ํ”„๋ก ํŠธ์—”๋“œ ์ฃผ๋‹ˆ์–ด ๊ฐœ๋ฐœ์ž ๋„ํ† ๋ฆฌ๋ฌต์˜ ๊ธฐ์ˆ ๊ฐœ๋ฐœ ๋ธ”๋กœ๊ทธ ์ž…๋‹ˆ๋‹ค.

GitHubMediumTwitterFacebook