πŸ’°μƒμ†μ΄λž€ 무엇인가

Seunggyu JungΒ·2023λ…„ 5μ›” 6일
0
post-thumbnail

λͺ©μ°¨

1. 주제 μ„ μ • 이유

2. 상속

  • 2-1. μƒμ†μ˜ μ •μ˜ 및 μ’…λ₯˜
  • 2-2. ν”„λ‘œν† νƒ€μž…κ³Ό μƒμ†μ˜ 관계
  • 2-3. ν΄λž˜μŠ€μ™€ μƒμ†μ˜ 관계

3. μš”μ•½ 정리 및 λ©΄μ ‘ν˜• QnA

λ²ˆμ™Έ. λ³„λ„μ˜ ITμš©μ–΄

1. 주제 μ„ μ • 이유

코딩을 ν•˜λ‹€λ³΄λ©΄, μ’…μ’… μƒμ†μ΄λΌλŠ” μš©μ–΄λ₯Ό 많이 듀어봀을 것이닀. λ¬Όλ‘ , μƒμ†μ˜ 사전적인 κ°œλ…μΈ 'ν•˜μœ„μ‘΄μž¬κ°€ μƒμœ„μ‘΄μž¬λ‘œλΆ€ν„° 무언가λ₯Ό λ¬Όλ¦Όλ°›λŠ”λ‹€.' λŠ” 것 μ •λ„λŠ” μœ μΆ”ν•  수 μžˆμ„ 것이닀.
ν•˜μ§€λ§Œ, μ½”λ”©μ΄λ‚˜ ITμ—…κ³„μ—μ„œ μ–ΈκΈ‰ν•˜λŠ” 상속에 λŒ€ν•΄ μ œλŒ€λ‘œ μ•Œκ³  λ„˜μ–΄κ°€λŠ” 것이 μ‹€μ œλ‘œ ν”„λ‘œμ νŠΈμ— μ μš©ν•  λ•Œ, 보닀 μˆ˜μ›”ν•˜κ³  μ΅μˆ™ν•˜κ²Œ μ‚¬μš©ν•  수 μžˆμ„ 것이기에 μ„ μ •ν–ˆλ‹€.


2. 상속

2-1. μƒμ†μ˜ μ •μ˜ 및 μ’…λ₯˜

  • μžλ°”μŠ€ν¬λ¦½νŠΈμ—μ„œ μ‚¬μš©λ˜λŠ” 상속은 ν”„λ‘œν† νƒ€μž… 상속과 클래슀 상속 크게 두 κ°€μ§€λ‘œ λ‚˜λ‰œλ‹€.
  • ν”„λ‘œν† νƒ€μž… 상속 : 상속을 λ°›λ“  객체가 상속을 ν•΄μ£ΌλŠ” 객체의 ν”„λ‘œνΌν‹°λ‚˜ λ©”μ„œλ“œλ₯Ό μΆ”κ°€λ‘œ μ‚¬μš©ν•  수 있게 ν•΄μ£ΌλŠ” 체계λ₯Ό μ˜λ―Έν•œλ‹€.
  • 클래슀 상속 : 기쑴의 클래슀λ₯Ό ν™•μž₯μ‹œν‚€λŠ” κ°œλ…μœΌλ‘œ μ΄ν•΄ν•˜λ©΄ μ’‹λ‹€. 상속받은 기쑴의 클래슀λ₯Ό ν† λŒ€λ‘œ μƒˆλ‘œμš΄ κΈ°λŠ₯을 μΆ”κ°€ν•˜λŠ” μ‹œμŠ€ν…œμ„ μ˜λ―Έν•œλ‹€.

2-2. ν”„λ‘œν† νƒ€μž…κ³Ό μƒμ†μ˜ 관계

  • ν”„λ‘œν† νƒ€μž… (객체) : λ‹€λ₯Έ 객체에 λŒ€ν•œ μ°Έμ‘° ν•˜λŠ” λŒ€μƒμ„ μ˜λ―Έν•œλ‹€. λͺ¨λ“  κ°μ²΄λŠ” [[prototype]]μ΄λΌλŠ” λ‚΄λΆ€ ν”„λ‘œνΌν‹°λ₯Ό κ°–λŠ”λ‹€.
  • [[prototype]]λ₯Ό μ €μž₯창고라고 이해면 μ’‹λ‹€.
    예λ₯Ό λ“€μ–΄, μ•„λž˜μ˜ 경우, μ „λΆ€ 객체둜 μ΄λ£¨μ–΄μ ΈμžˆκΈ°μ— 객체의 ν”„λ‘œν† νƒ€μž…μ€, [[prototype]] : Object 즉, Object.prototype이닀.그리고 μƒμ†λ°›λŠ” 객체듀이 [[prototype]]μ•ˆμœΌλ‘œ λ“€μ–΄κ°„λ‹€.
  • __proto__ : 객체가 μžμ‹ μ˜ ν”„λ‘œν† νƒ€μž…μ— μ ‘κ·Όν•˜λ„λ‘ ν•΄μ£ΌλŠ” μ ‘κ·Όμž ν”„λ‘œνΌν‹°μ΄λ‹€. μΌμ’…μ˜ 닀리(bridge)라고 μ΄ν•΄ν•˜λ©΄ 쒋을 λ“―ν•˜λ‹€.
    ν•΄λ‹Ή ν”„λ‘œνΌν‹°λ₯Ό μ‚¬μš©ν•˜μ—¬ 상속받을 객체가 μžμ‹ μ˜ ν”„λ‘œν† νƒ€μž…μ— λ“€μ–΄κ°ˆ 수 μžˆλ„λ‘ μ—°κ²°ν•΄μ€€λ‹€.
  • 즉, __proto__ λ₯Ό μ‚¬μš©ν•˜μ—¬ μƒμœ„(λΆ€λͺ¨) 객체가 ν•˜μœ„(μžμ‹) 객체의 ν”„λ‘œν† νƒ€μž…μ— μΆ”κ°€λ˜λŠ” 과정을 상속이라고 ν•œλ‹€.

Q. 그런데 μ™œ ν”„λ‘œν† νƒ€μž… 상속을 ν•˜λŠ” κ²ƒμΈκ°€μš”??

  • μš°μ„ μ€ ν•œ 사둀λ₯Ό 톡해 μ‚΄νŽ΄λ³΄μž
  • μœ„ μ˜ˆμ‹œμ˜ 경우, foodλ₯Ό 상속받은 pasta 객체가 cookμ΄λΌλŠ” λ©”μ„œλ“œλ₯Ό 자유둭게 μ‚¬μš©ν•  수 μžˆλŠ” 사둀이닀.
    즉, pasta κ°μ²΄μ—μ„œ cookλ©”μ„œλ“œλ₯Ό 더 λ§Œλ“€μ§€ μ•Šκ³  상속받아 νŽΈν•˜κ²Œ μ‚¬μš©ν•  수 μžˆλ‹€λŠ” 것을 μ˜λ―Έν•œλ‹€.
    μ΄λŠ” 곧, μ½”λ“œμ˜ μž¬μ‚¬μš©μ„±μ„ 높이고 , 관리λ₯Ό μš©μ΄ν•˜κ²Œ ν•΄μ€€λ‹€λŠ” μž₯점을 κ°–κ³  μžˆλ‹€.

2-3. ν΄λž˜μŠ€μ™€ μƒμ†μ˜ 관계

  • 클래슀(class) : ν•˜λ‚˜μ˜ μƒμ„±μž ν•¨μˆ˜λ₯Ό μ—¬λŸ¬κ°œ 찍어낼 수 있게 ν•΄μ£ΌλŠ” λ¬Έλ²•μœΌλ‘œ ν”νžˆ λΆ•μ–΄λΉ΅ 틀에 λΉ„μœ ν•œλ‹€.
  • λ¨Όμ € 상속을 ν•  λΆ€λͺ¨ 클래슀λ₯Ό μƒμ„±ν•œλ‹€.
class Food {
    constructor (name) {
        this.name = name;
        this.won = 0;
    }

    price(won) {
        this.won = won;
        console.log(`${this.name}의 가격은 ${this.won}원 μž…λ‹ˆλ‹€.`)
    }

    pay(){
        console.log(`${this.won}원을 μ§€λΆˆν•˜μ…¨μŠ΅λ‹ˆλ‹€.`)
    }
}

const food = new Food("μŒμ‹");
  • extends : 이λ₯Ό 상속받을 μžμ‹ 클래슀λ₯Ό 생성할 λ•Œ, μžμ‹ 클래슀λͺ… μ˜†μ— μž‘μ„±ν•œλ‹€.
class Pasta extends Food {
    tasty(){
        console.log(`${this.name} λ§›μžˆλ„€μš”!`)
    }
}

const pasta = new Pasta("아라비따 νŒŒμŠ€νƒ€");
  • μœ„ μ˜ˆμ‹œλ₯Ό ν•©μΉ˜λ©΄
class Food {
    constructor (name) {
        this.name = name;
        this.won = 0;
    }

    price(won) {
        this.won = won;
        console.log(`${this.name}의 가격은 ${this.won}원 μž…λ‹ˆλ‹€.`)
    }

    pay(){
        console.log(`${this.won}원을 μ§€λΆˆν•˜μ…¨μŠ΅λ‹ˆλ‹€.`)
    }
}

const food = new Food("μŒμ‹");


class Pasta extends Food {
    tasty(){
        console.log(`${this.name} λ§›μžˆλ„€μš”!`)
    }
}

const pasta = new Pasta("아라비따 νŒŒμŠ€νƒ€");
  • pastaν΄λž˜μŠ€λŠ” food 클래슀λ₯Ό 상속받고 μžˆλ‹€λŠ” 것을 μ˜λ―Έν•œλ‹€. 그렇기에 food클래슀의 λ©”μ„œλ“œλ₯Ό μ‚¬μš©ν•  수 μžˆλ‹€.
pasta.price(12000; // 아라비따 νŒŒμŠ€νƒ€μ˜ 가격은 12000원 μž…λ‹ˆλ‹€.
pasta.pay(12000);  // 12000원을 μ§€λΆˆν•˜μ…¨μŠ΅λ‹ˆλ‹€.
pasta.tasty();  // 아라비따 νŒŒμŠ€νƒ€ λ§›μžˆλ„€μš”!

Q. 그런데 μ™œ 클래슀 상속을 ν•˜λŠ” κ²ƒμΈκ°€μš”??

  • ν”„λ‘œν† νƒ€μž…μ˜ 상속을 ν•˜λŠ” μ΄μœ μ™€ μœ μ‚¬ν•˜κ²Œ, 상속을 μ£Όκ³  받기에, μž‘μ„±ν•΄μ•Όν•  μ½”λ“œμ˜ 양이 쀄어든닀. 특히, 클래슀의 경우, μƒμ„±μž λ©”μ„œλ“œλ“± μž‘μ„±ν•΄μ•Όν•  λ‚΄μš©μ΄ λ§ŽκΈ°μ—, μƒμ†μ˜ μž₯점이 λ”μš± λΆ€κ°λœλ‹€.
  • μ½”λ“œμ˜ μž¬μ‚¬μš©μ„±μ„ 높이고 , 관리λ₯Ό μš©μ΄ν•˜κ²Œ ν•΄μ€€λ‹€λŠ” μž₯점이 있기 λ•Œλ¬Έμ— μ‚¬μš©ν•œλ‹€.

3. μš”μ•½ 정리 및 λ©΄μ ‘ν˜• QnA

QnA : μžλ°”μŠ€ν¬λ¦½νŠΈμ—μ„œ μ‚¬μš©ν•˜λŠ” 상속은 무엇이고, κ·Έ κΈ°λŠ₯이 λ¬΄μ—‡μΈκ°€μš”??

  • 상속은 μƒμ†λ°›λŠ” μžμ‹μš”μ†Œκ°€ μƒμ†ν•΄μ£ΌλŠ” λΆ€λͺ¨μš”μ†Œμ˜ ν”„λ‘œνΌν‹°λ‚˜ λ©”μ„œλ“œλ₯Ό μΆ”κ°€λ‘œ μ‚¬μš©ν•  수 μžˆλ„λ‘ ν™•μž₯ν•΄μ£ΌλŠ” κΈ°λŠ₯μž…λ‹ˆλ‹€.
  • μžλ°”μŠ€ν¬λ¦½νŠΈμ˜ 경우, ν”„λ‘œν† νƒ€μž… 상속, 클래슀 상속, μ΄λ ‡κ²Œ 두 가지 μœ ν˜•μ˜ 상속이 μžˆμŠ΅λ‹ˆλ‹€.
  • ν”„λ‘œν† νƒ€μž…μ˜ 상속은, 객체 μ•ˆμ˜ [[prototype]]λΌλŠ” λ‚΄λΆ€ ν”„λ‘œνΌν‹°μ•ˆμ— __proto__λΌλŠ” μ ‘κ·Όμž ν”„λ‘œνΌν‹°λ‘œ 객체듀을 상속받아 μ €μž₯ν•˜μ—¬ μ‚¬μš©ν•©λ‹ˆλ‹€.
  • 클래슀 상속은, λΆ€λͺ¨ 클래슀λ₯Ό extendsλΌλŠ” ν‚€μ›Œλ“œλ₯Ό μ‚¬μš©ν•˜μ—¬ μžμ‹ ν΄λž˜μŠ€κ°€ 상속받아 μ‚¬μš©ν•©λ‹ˆλ‹€.
  • 상속을 μ‚¬μš©ν•˜λŠ” μ΄μœ λŠ” μ½”λ“œμ˜ μž¬μ‚¬μš©μ„±μ„ 높이고, μœ μ§€λ³΄μˆ˜κ°€ ν•„μš”ν•œ 경우, νŠΉμ • λΆ€λΆ„λ§Œ μˆ˜μ •ν•΄λ„ λ˜κΈ°μ— 관리λ₯Ό μš©μ΄ν•˜λ‹€λŠ” μž₯점이 있기 λ•Œλ¬Έμž…λ‹ˆλ‹€.
profile
감동을 μ£Όκ³ ν”ˆ 개발자(쀀비생)

0개의 λŒ“κΈ€