상속

기술노트
Admin (토론 | 기여)님의 2025년 9월 6일 (토) 05:05 판 (Gemini 벌크 업로더로 자동 업로드)
(차이) ← 이전 판 | 최신판 (차이) | 다음 판 → (차이)

👨‍👩‍👧‍👦 상속 (Inheritance)

상속은 객체 지향 프로그래밍(OOP)의 핵심 특징 중 하나로, 부모 클래스(Superclass)의 속성과 메서드를 자식 클래스(Subclass)가 그대로 물려받아 사용할 수 있게 하는 기능입니다. 이를 통해 코드의 중복을 줄이고 재사용성을 높일 수 있습니다.


🤔 상속은 왜 사용하는가?

여러 클래스에 공통적으로 포함되는 속성과 기능이 있다면, 이 공통적인 부분을 부모 클래스로 정의하고, 각 클래스는 이 부모 클래스를 상속받아 자신만의 고유한 특징만 추가하도록 구현할 수 있습니다.

  • 코드 재사용성 : 공통 코드를 부모 클래스에서 한 번만 작성하면 되므로, 코드의 중복이 사라지고 생산성이 향상됩니다.
  • 유지보수 용이성 : 공통 기능을 수정해야 할 때, 부모 클래스만 수정하면 모든 자식 클래스에 변경 사항이 적용되므로 유지보수가 용이합니다.
  • 계층적 구조 : 클래스들을 'is-a' 관계 (A는 B의 한 종류이다)의 계층 구조로 만들어, 시스템의 구조를 더 명확하게 이해할 수 있습니다. (예: `개`는 `동물`이다)

⚙️ 상속의 구현 (Java 예시)

`extends` 키워드를 사용하여 상속을 구현합니다.

```java // 부모 클래스 class Animal {

   void cry() {
       System.out.println("동물이 웁니다.");
   }

}

// 자식 클래스 class Dog extends Animal {

   // cry() 메서드를 상속받음
   void bark() {
       System.out.println("멍멍!");
   }

}

Dog myDog = new Dog(); myDog.cry(); // 부모 클래스의 메서드 호출 myDog.bark(); // 자신의 메서드 호출 ```

  • 메서드 오버라이딩 (Method Overriding) : 자식 클래스는 부모로부터 물려받은 메서드를 자신의 상황에 맞게 재정의하여 사용할 수 있습니다.

💡 개발자 핵심 Point

  • 상속은 객체 지향 프로그래밍에서 코드 재사용을 위한 강력한 도구입니다.
  • 하지만 상속은 부모 클래스와 자식 클래스 간의 강한 결합(Tightly Coupled)을 만듭니다. 부모 클래스가 변경되면 모든 자식 클래스가 영향을 받기 때문입니다.
  • 이 때문에 최근에는 "상속보다는 컴포지션(조합)을 사용하라(Composition over inheritance)"는 설계 원칙이 강조되기도 합니다. 무분별한 상속보다는, 필요한 기능을 가진 객체를 포함(has-a 관계)하여 사용하는 것이 더 유연한 설계를 만들 수 있다는 의미입니다.
  • Java와 같은 언어는 클래스의 다중 상속을 지원하지 않지만, 인터페이스의 다중 구현을 통해 비슷한 효과를 낼 수 있습니다.