자바 고급(JAVA)

객체지향 프로그래밍의 4가지 핵심 개념 - 상속(Inheritance)

beginner-development 2026. 5. 12. 20:45

1. 상속이란

상속은 기존 클래스(상위 클래스)의 멤버(필드, 메서드 등)를 새로운 클래스(하위 클래스)가 물려받는 것을 말한다. 이 떄, 하위 클래스는 상위 클래스의 기능을 그대로 사용하거나, 필요에 따라 확장하거나 재정의(Override)가 가능하다. 자바에서는 extends 키워드를 사용하여 상속을 구현한다.

1 - 1. 상속의 장점과 단점

- 장점

  1. 코드의 재사용성 증가
    • 공통 코드를 상위 클래스에 작성하고 하위 클래스에서 재사용할 수 있다.
  2. 계층적 구조 설계 가능
    • 클래스 간 관계를 명확하게 표현이 가능하다.(is-a 관계)
  3. 다형성(polymorphism)의 기반 제공
    • 부모 타입으로 다양한 자식 객체를 처리할 수 있다.

- 단점

  1. 높은 결합도(coupling)
    • 하위 클래스가 상위 클래스의 변경에 민감해진다.
  2. 유연성 저하
    • 자바는 단일 상속만 지원한다.(하위 클래스는 하나의 상위 클래스만 가질 수 있다.)
  3. 상속 계층이 깊어질 경우 유지보수가 어렵다.
    • 중첩 상속이 많아지면 코드 흐름 파악과 오류 추적이 어려워진다.

2. 다형성과 상속의 관계

  - 상속은 다형성을 가능하게 하는 기초가 된다. 아래의 그림은 상속으로 다형성을 구현한 예시이다.

다형성과 상속의 관계

  그림을 보면 "Programmer는 Person이다." 라는 관계가 성립된다. 이처럼 Programmer, Dancer, Singer의 공통 속성을 하나로 묶어서 상위타입(Person)으로 두고 하위타입이 상속을 받게 하여 통합적으로 처리할 수 있는 것이 다형성이다.

 

3. 생성자와 상속

  - 생성자는 상속되지 않는다. 하위 클래스는 상위 클래스의 생성자를 명시적으로 정의하거나, 상위 클래스의 생성자를 super()로 호출할 수 있다.

class Animal {
      Animal(String name) {
              System.out.println(name + "이(가) 태어났습니다.");
      }
}

class Dog extends Animal {
     Dog() {
            super("강아지"); // 상위 클래스 생성자 호출
    }
}

 

4. 상속의 남용

  - 상속은 공통 속성을 묶어서 관리할 수 있다는 관점에선 편리하지만 남용하면 오히려 유지보수가 어려워질 수 있다. 상위 클래스가 변경되면 하위 클래스 전체에 영향을 미치게 되고 하위 클래스가 상위 클래스의 구현에 너무 의존하게 될 수도 있기 때문이다. 따라서 하위 클래스가 상위 클래스의 구현에 너무 의존하지 않도록 주의해야 한다.

  - 상속은 반드시 "is - a" 관계가 성립할 때만 사용

 

 

상속을 정리하자면 다음과 같다.

항목 설명
상속이란? 상위 클래스의 멤버를 하위 클래스가 물려받는 기능
문법 class A extends B 형태로 사용
장점 코드의 재사용성, 구조화, 다형성 표현 가능
단점 결합도 상승, 단일 상속 제한, 유지보수 어려움
자바 상속 특징 단일 상속만 허용. 인터페이스로 다중 상속 유사 구현 가능