BuNa_
IT Story
BuNa_
전체 방문자
였늘
μ–΄μ œ
  • λΆ„λ₯˜ 전체보기 (117)
    • CS (14)
      • 운영체제 (8)
      • λ„€νŠΈμ›Œν¬ (0)
      • Design Pattern (1)
      • OOP (4)
    • λŒ€μ™Έν™œλ™ (24)
      • μš°μ•„ν•œν…Œν¬μ½”μŠ€ (14)
      • DND 동아리 (4)
      • UMC 동아리 (5)
      • 해컀톀 (1)
    • Android (29)
      • MVVM (2)
      • μŠ€ν„°λ”” (11)
      • Compose (3)
      • Unit Test (1)
    • Project (5)
      • μ–΄λ”°μ„Έμ›Œ (5)
      • DnD κ³Όμ™Έ μ„œλΉ„μŠ€ (0)
    • Programming (11)
      • Kotlin (4)
      • 파이썬 (7)
    • Git (1)
    • 인곡지λŠ₯ (22)
    • λ°±μ€€ (8)
    • 기타 (3)
      • IntelliJ (1)
      • 일상 (0)

λΈ”λ‘œκ·Έ 메뉴

  • ν™ˆ

곡지사항

인기 κΈ€

νƒœκ·Έ

  • Ai
  • λ‹€μ΄λ‚˜λ―Ή ν”„λ‘œκ·Έλž˜λ°
  • 컴곡선배
  • k-means++
  • Compose
  • ViewModel
  • λ°±μ€€
  • 인곡지λŠ₯ λΆ„λ₯˜
  • μ›μ‹œκ°’ 포μž₯
  • μ™ΈλΆ€ λ‹¨νŽΈν™”
  • UMC
  • μ…€λ ˆλ‹ˆμ›€
  • μ–΄λ”°μ„Έμ›Œ
  • MVVM
  • Baekjoon
  • μ•ˆλ“œλ‘œμ΄λ“œ
  • Android
  • K-means
  • 객체지ν–₯ μƒν™œμ²΄μ‘°
  • RecyclerView
  • 인곡지λŠ₯
  • μš°ν…Œμ½” 5κΈ°
  • μš°ν…Œμ½” ν”„λ¦¬μ½”μŠ€
  • μš°μ•„ν•œν…Œν¬μ½”μŠ€
  • 운영체제
  • μ„ ν˜•νšŒκ·€
  • 파이썬
  • λ”₯λŸ¬λ‹
  • μš°ν…Œμ½”
  • External fragmentation

졜근 λŒ“κΈ€

졜근 κΈ€

ν‹°μŠ€ν† λ¦¬

hELLO Β· Designed By μ •μƒμš°.
BuNa_

IT Story

객체지ν–₯ ν”„λ‘œκ·Έλž˜λ° - OOP 상속(Inheritance) μ΄λž€?
CS/OOP

객체지ν–₯ ν”„λ‘œκ·Έλž˜λ° - OOP 상속(Inheritance) μ΄λž€?

2022. 11. 1. 17:04

πŸ‘€β€‹   Study Goal

  • 객체지ν–₯ ν”„λ‘œκ·Έλž˜λ°(OOP) 상속 κ°œλ…μ„ μ΄ν•΄ν•©λ‹ˆλ‹€.
  • μƒμ†μ˜ ν•„μš”μ„±μ„ μ•Œμ•„λ΄…λ‹ˆλ‹€.
  • 상속이 μ‚¬μš©λ˜λŠ” 사둀λ₯Ό μ½”λ“œλ‘œ μž‘μ„±ν•΄λ΄…λ‹ˆλ‹€.

 

✏️   μƒμ†(Inheritance) μ΄λž€?

 

상속(Inheritance)은 λΆ€λͺ¨(Super) 클래슀의 κΈ°λŠ₯을 μž¬μ‚¬μš©(Reuse)ν•˜κ³  κΈ°λŠ₯을 ν™•μž₯(Expansion)ν•  수 μžˆλŠ” 객체지ν–₯ ν”„λ‘œκ·Έλž˜λ°(OOP)의 νŠΉμ§•μž…λ‹ˆλ‹€.


πŸ’‘  상속은 μ™œ(Why) ν•„μš”ν• κΉŒ?

 

상속은 Super 클래슀의 κΈ°λŠ₯을 μž¬μ‚¬μš©ν•˜κ³ , ν™•μž₯ν•  수 μžˆλŠ” νŠΉμ§•μ„ κ°€μ§€κ³  μžˆμŠ΅λ‹ˆλ‹€.

 

상속이 ν•„μš”ν•œ μ΄μœ λŠ” λ°”λ‘œ μž¬μ‚¬μš©κ³Ό ν™•μž₯μ΄λΌλŠ” κ°•λ ₯ν•œ μž₯점 λ•Œλ¬Έμž…λ‹ˆλ‹€.

λ§Œμ•½ μƒμ†μ΄λΌλŠ” κ°œλ…μ΄ μ‘΄μž¬ν•˜μ§€ μ•ŠλŠ”λ‹€λ©΄, λΉ„μŠ·ν•œ κΈ°λŠ₯을 κ΅¬ν˜„ν•  λ•Œλ§ˆλ‹€ λ™μΌν•œ μ½”λ“œλ₯Ό μž‘μ„±ν•΄μ£Όμ–΄μ•Ό ν•©λ‹ˆλ‹€.

 

 

객체지ν–₯적인 ν”„λ‘œκ·Έλž˜λ°μ— λŒ€ν•΄ 처음 μ ‘ν•΄λ³΄μ‹œλŠ” 뢄듀은 μ•„λž˜μ™€ 같은 생각을 ν•˜μ‹€ 수 μžˆμŠ΅λ‹ˆλ‹€.

 

Ctrl+C / V 만 ν•˜λ©΄ μž¬μ‚¬μš©ν•˜λŠ” κ±° μ•„λ‹ˆμ•Ό? - ꡳ이 상속을 써야 ν•΄?
Ctrl+C / V ν•˜κ³  μ½”λ“œ 쑰금만 μˆ˜μ •ν•˜λ©΄ ν™•μž₯ν•˜λŠ” κ±° μ•„λ‹ˆμ•Ό?

 

객체지ν–₯적인 섀계λ₯Ό 쑰금 더 κ³΅λΆ€ν•˜λ‹€ 보면 곡톡적인 νŠΉμ§•μ΄ ν•˜λ‚˜ μžˆμŠ΅λ‹ˆλ‹€.

λ°”λ‘œ, 'κΈ°μ‘΄ μ½”λ“œλ₯Ό μˆ˜μ •ν•˜μ§€ μ•Šκ³  κΈ°λŠ₯을 ν™•μž₯ν•˜λΌ' λΌλŠ” 개방 폐쇄 원칙 OCP κ°œλ…μž…λ‹ˆλ‹€.

 

λ‹¨μˆœνžˆ μœ„μ™€ 같은 μƒκ°μœΌλ‘œ, κΈ°λŠ₯을 μΆ”κ°€ν•  λ•Œλ§ˆλ‹€ Copy & Pasteλ₯Ό λ°˜λ³΅ν•˜λ‹€ 보면, ν”„λ‘œμ νŠΈμ˜ 규λͺ¨κ°€ μ»€μ‘Œμ„ λ•Œ 단 ν•˜λ‚˜μ˜ 곡톡 κΈ°λŠ₯(method)을 μˆ˜μ •ν•˜κΈ° μœ„ν•΄ κ΄€λ ¨λœ λͺ¨λ“  클래슀λ₯Ό μˆ˜μ •ν•΄μ•Ό ν•˜λŠ” λΆˆμƒμ‚¬κ°€ λ°œμƒν•©λ‹ˆλ‹€.

 

Ex) 곡톡 κΈ°λŠ₯을 κ°€μ§€κ³  μžˆλŠ” 100개의 ν΄λž˜μŠ€κ°€ μžˆλ‹€λ©΄ 이 클래슀λ₯Ό λͺ¨λ‘ 곡톡적이고 νšμΌν™”λ˜κ²Œ μˆ˜μ •ν•΄μ•Ό ν•©λ‹ˆλ‹€.

 

이둠상 κ³΅ν†΅μ μœΌλ‘œ μˆ˜μ •ν•  수 μžˆλ‹€λ©΄ 문제 λ˜μ§€ μ•Šκ² μ§€λ§Œ, μ‚¬λžŒμ΄ ν”„λ‘œκ·Έλž˜λ°ν•˜λŠ” 것이기 λ•Œλ¬Έμ— μ‹€μˆ˜κ°€ λ°œμƒν•  κ°€λŠ₯성이 μžˆμŠ΅λ‹ˆλ‹€.

 

μ½”λ“œλ₯Ό μˆ˜μ •ν•˜λŠ” κ³Όμ •μ—μ„œ 곡톡적이지 λͺ»ν•˜λ©΄ 예기치 λͺ»ν•œ 였λ₯˜κ°€ λ°œμƒν•  수 있으며,

100개λ₯Ό λͺ¨λ‘ μˆ˜μ •ν•œλ‹€λŠ” μž‘μ—… μžμ²΄κ°€ 생산성과 μœ μ§€λ³΄μˆ˜μ„±μ΄ ꡉμž₯히 λ–¨μ–΄μ§„λ‹€λŠ” 것을 증λͺ…ν•˜κ²Œ λ©λ‹ˆλ‹€.

 

ν•˜μ§€λ§Œ 이 λͺ¨λ“  λ¬Έμ œμ μ„ ν•΄κ²°ν•΄μ£ΌλŠ” κ°œλ…μ΄ λ°”λ‘œ 상속(Inheritance)μž…λ‹ˆλ‹€.

 

λ™μΌν•œ κΈ°λŠ₯을 κ°€μ§€κ³  μžˆλŠ” Super 클래슀λ₯Ό μƒμ†ν•˜κ³ , κΈ°λŠ₯의 μˆ˜μ •μ΄ ν•„μš”ν•  λ•Œ Super 클래슀만 μˆ˜μ •ν•΄μ£Όμ–΄λ„ ν•΄λ‹Ή 클래슀λ₯Ό μƒμ†ν•˜κ³  μžˆλŠ” Sub ν΄λž˜μŠ€λ“€μ€ 수만 개의 클래슀라 할지라도 μ½”λ“œμ˜ μˆ˜μ •μ΄ λΆˆν•„μš”ν•˜κ²Œ 되기 λ•Œλ¬Έμž…λ‹ˆλ‹€.

 

πŸ’‘  상속(Inheritance)을 μ μš©ν•œ μ½”λ“œ

 

'Super 클래슀(Car)와 Sub ν΄λž˜μŠ€λ“€'

 

BMW, λ²€μΈ , μ œλ„€μ‹œμŠ€ 3 μ’…λ₯˜μ˜ μžλ™μ°¨κ°€ μžˆλ‹€κ³  κ°€μ •ν•΄λ³΄κ² μŠ΅λ‹ˆλ‹€.

이 μžλ™μ°¨μ˜ 곡톡적인 νŠΉμ§•μ„ CarλΌλŠ” 클래슀둜 κ΅¬ν˜„ν•œ μ½”λ“œλŠ” μ•„λž˜μ™€ κ°™μŠ΅λ‹ˆλ‹€.

 

// Super class
public abstract class Car {
    private int wheelCount = 4; // μžλ™μ°¨μ˜ 바퀴 수 4개
    private String engine = "λ―Έκ΅­μ‚° μ—”μ§„";

    public int getWheelCount() {
        return wheelCount;
    }

    public String getEngine() {
        return engine;
    }

    public abstract void move();
}

 

μžλ™μ°¨μ˜ 바퀴가 4개이고, 엔진은 λ―Έκ΅­μ‚° 엔진을 μ‚¬μš©ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€. (λͺ¨λ‘ λ™μΌν•œ 엔진을 μ‚¬μš©ν•œλ‹€κ³  κ°€μ •)

λ˜ν•œ, 좔상 클래슀둜 move() λΌλŠ” λ©”μ„œλ“œλ₯Ό Sub ν΄λž˜μŠ€μ—μ„œ κ΅¬ν˜„ν•˜λ„λ‘ ν•˜μ˜€μŠ΅λ‹ˆλ‹€.

 

 


 

μ•„λž˜λŠ” Super 클래슀인 Carλ₯Ό 상속받은 3 μ’…λ₯˜μ˜ μžλ™μ°¨μž…λ‹ˆλ‹€.

 

public class Bmw extends Car {
    
    @Override
    public void move() {
        System.out.println("BMW 뢀릉뢀릉");
    }   
}

 

public class Benz extends Car {

    @Override
    public void move() {
        System.out.println("λ²€μΈ  뢀릉뢀릉");
    }
}

 

public class Genesis extends Car {

    @Override
    public void move() {
        System.out.println("μ œλ„€μ‹œμŠ€ 뢀릉뢀릉");
    }
}

 

이 μ½”λ“œλ§Œ 봐도 3 μ’…λ₯˜μ˜ μžλ™μ°¨κ°€ 바퀴(Wheel)의 κ°œμˆ˜μ™€ μ–΄λ–€ 엔진을 μ‚¬μš©ν•˜λŠ”μ§€μ— λŒ€ν•œ ν•„λ“œλ₯Ό λ”°λ‘œ μž‘μ„±ν•΄μ£Όμ§€ μ•Šμ•„λ„ λœλ‹€λŠ” 사싀을 μ•Œ 수 μžˆμŠ΅λ‹ˆλ‹€.

즉, 상속(Inheritance)만으둜 보일러 ν”Œλ ˆμ΄νŠΈ μ½”λ“œλ₯Ό 쀄일 수 있게 λ˜μ—ˆμŠ΅λ‹ˆλ‹€.

 


 

κ·ΈλŸ¬λ‹€ 문득 λ―Έκ΅­μ‚° μ—”μ§„μ—μ„œ 이 3μ’…λ₯˜μ˜ μ°¨ λͺ¨λ‘ κ΅­μ‚° μ—”μ§„μœΌλ‘œ λ³€κ²½ν•˜κ³ , λ°”ν€΄μ˜ μˆ˜κ°€ 3개둜 μ€„μ—¬μ§€λŠ” μ‹œλŒ€κ°€ μ™”λ‹€κ³  κ°€μ •ν•΄λ³΄κ² μŠ΅λ‹ˆλ‹€.

λ§Œμ•½ 상속을 μ‚¬μš©ν•˜μ§€ μ•Šμ•˜λ‹€λ©΄, 3개의 클래슀 λͺ¨λ‘ μˆ˜μ •ν•΄μ£Όμ–΄μ•Ό ν–ˆκ² μ§€λ§Œ, 상속을 μ μš©ν•œ μ½”λ“œλŠ” Super 클래슀인 Car 클래슀만 λ³€κ²½ν•΄μ£Όλ©΄ ν•΄κ²°λ©λ‹ˆλ‹€.

 

// Super class
public abstract class Car {
    private int wheelCount = 3; // μžλ™μ°¨μ˜ 바퀴 수 3개둜 λ³€κ²½!
    private String engine = "ν•œκ΅­μ‚° μ—”μ§„";

    public int getWheelCount() {
        return wheelCount;
    }

    public String getEngine() {
        return engine;
    }

    public abstract void move();
}

 

 

⭐  κ²°λ‘ 

  • 객체지ν–₯ ν”„λ‘œκ·Έλž˜λ°(OOP)의 상속(Inheritance)의 κ°œλ…μ„ κ³΅λΆ€ν•¨μœΌλ‘œμ¨, μ½”λ“œλ₯Ό μž¬μ‚¬μš©ν•˜κ³  ν™•μž₯ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
  • ν”„λ‘œμ νŠΈμ˜ 생산성, μœ μ§€λ³΄μˆ˜μ„±, μž¬μ‚¬μš©μ„±μ„ 높일 수 μžˆμŠ΅λ‹ˆλ‹€.

 

 

github : https://github.com/tmdgh1592

 

tmdgh1592 - Overview

λŠλ¦¬λ”λΌλ„ 천천히..!! 😁. tmdgh1592 has 21 repositories available. Follow their code on GitHub.

github.com

 

 

μ €μž‘μžν‘œμ‹œ λΉ„μ˜λ¦¬ λ³€κ²½κΈˆμ§€ (μƒˆμ°½μ—΄λ¦Ό)

'CS > OOP' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€

[Programming] μ›μ‹œκ°’κ³Ό μ»¬λ ‰μ…˜μ„ 포μž₯ν•΄μ•Ό ν•˜λŠ” 이유 - 래퍼 클래슀, 일급 μ»¬λ ‰μ…˜(Wrapper class, First-class Collection)  (2) 2023.02.17
객체지ν–₯ ν”„λ‘œκ·Έλž˜λ° - OOP μΊ‘μŠν™”(Encapsulation) μ΄λž€?  (1) 2022.10.20
객체지ν–₯ ν”„λ‘œκ·Έλž˜λ° - OOP 좔상화(Abstraction) μ΄λž€?  (2) 2022.10.17
    'CS/OOP' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€
    • [Programming] μ›μ‹œκ°’κ³Ό μ»¬λ ‰μ…˜μ„ 포μž₯ν•΄μ•Ό ν•˜λŠ” 이유 - 래퍼 클래슀, 일급 μ»¬λ ‰μ…˜(Wrapper class, First-class Collection)
    • 객체지ν–₯ ν”„λ‘œκ·Έλž˜λ° - OOP μΊ‘μŠν™”(Encapsulation) μ΄λž€?
    • 객체지ν–₯ ν”„λ‘œκ·Έλž˜λ° - OOP 좔상화(Abstraction) μ΄λž€?
    BuNa_
    BuNa_
    μ•ˆλ“œλ‘œμ΄λ“œ 개발자λ₯Ό ν–₯ν•΄ 달리고 μžˆλŠ” κ³΅λŒ€μƒμž…λ‹ˆλ‹€! πŸ§‘ Android, Kotlin, Java, Python λ“± ν•™μŠ΅ν•˜κ³  μžˆλŠ” λ‚΄μš©κ³Ό ν”„λ‘œμ νŠΈλ₯Ό 주둜 μ—…λ‘œλ“œν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€. 지적과 쑰언은 μ–Έμ œλ‚˜ ν™˜μ˜μž…λ‹ˆλ‹€!😊 github : https://github.com/tmdgh1592

    ν‹°μŠ€ν† λ¦¬νˆ΄λ°”