본문으로 이동
메뉴 여닫기
환경 설정 메뉴 여닫기
개인 메뉴 여닫기
로그인하지 않음
지금 편집한다면 당신의 IP 주소가 공개될 수 있습니다.

상속(Inheritance)은 객체지향 프로그래밍에서 이미 정의된 클래스(상위 클래스)의 속성과 메서드를 새 클래스(하위 클래스)가 물려받아, 필요한 부분만 더하거나 다시 정의해 쓰게 하는 클래스 간 관계이다.

상속은 객체지향의 핵심 개념 가운데 하나로, 공통 기능을 상위 클래스에 한 번만 두고 하위 클래스들이 그것을 재사용하게 한다. 자바에서는 class B extends A 처럼 쓰며, 하위 클래스는 상위 클래스의 public·protected 멤버를 물려받고 생성자는 물려받지 않는다. 하위 클래스의 생성자는 첫 줄에서 상위 클래스 생성자를 부른다(super(...), 생략하면 인자 없는 생성자가 불린다).[1] 파이썬은 class B(A): 처럼 괄호 안에 상위 클래스를 적고, 하위 클래스에 같은 이름의 메서드가 있으면 그것이 상위 클래스의 것보다 먼저 찾아진다.[2]

상속 관계는 "B 는 A 의 한 종류이다(is-a)"가 성립할 때 쓴다. 상위 클래스를 일반화(generalization), 하위 클래스를 특수화(specialization)라고도 한다.

클래스 다이어그램에서 상속은 일반화 관계로 그린다. 하위 클래스에서 상위 클래스 쪽으로 실선을 긋고, 상위 클래스 끝에 속이 빈 삼각형 화살촉을 단다. 하위 클래스가 여럿이면 화살촉 하나에 선을 모아 그리기도 한다.

부분-전체 관계인 집합(aggregation)은 전체 쪽 끝에 속이 빈 마름모를 단다. 삼각형과 마름모를 혼동하면 상속을 집합으로 잘못 읽게 된다.

상속과 함께 나타나는 개념

편집 원본 편집
  • 오버라이딩 - 상위 클래스의 메서드를 하위 클래스가 같은 이름·같은 매개변수로 다시 정의한다. 상속이 있어야 성립한다
  • 오버로딩 - 같은 클래스 안에 이름은 같고 매개변수가 다른 메서드·생성자를 여러 개 둔다. 상속과 무관하게 성립한다. 생성자 A() 와 A(int) 를 함께 두는 것이 대표적인 예이다
  • 다형성 - 상위 클래스 타입의 변수가 하위 클래스 객체를 가리키고, 호출된 메서드는 실제 객체의 오버라이딩된 것이 실행된다
  • 추상 클래스 - 상속을 전제로 만든 미완성 클래스. 자바에서는 추상 클래스로 객체를 만들 수 없다

형변환 규칙(자바)

편집 원본 편집

상속 관계에서 하위 클래스 객체는 상위 클래스 타입 변수에 그대로 대입할 수 있다(업캐스팅). 반대로 상위 클래스 타입의 객체를 하위 클래스 타입 변수에 넣는 것은 명시적 캐스트 없이는 컴파일 오류이고, 캐스트를 써도 실제 객체가 그 하위 타입이 아니면 실행 중 ClassCastException 이 난다 → 자바 다형성

class A { }
class B extends A { }
A x = new B();   // 가능: 하위 객체를 상위 타입으로
B y = new A();   // 컴파일 오류: 상위 객체를 하위 타입 변수에

단일 상속과 다중 상속

편집 원본 편집
구분 단일 상속 다중 상속
상위 클래스 수 하나 둘 이상
언어 자바, C# (클래스) C++, 파이썬
문제 계층이 깊어질 수 있다 같은 이름 멤버가 겹치는 다이아몬드 문제

자바는 클래스 다중 상속을 막는 대신 인터페이스를 여러 개 구현하게 한다.[1]

상속과 집합(포함) 구별하기

편집 원본 편집
구분 상속(일반화) 집합·구성(포함)
관계 is-a(종류) has-a(부분)
UML 화살촉 속이 빈 삼각형 속이 빈 마름모(집합), 속이 찬 마름모(구성)
예 자동차 → 탈것 자동차 ◇ 바퀴
재사용 방식 상위 클래스의 구현을 물려받음 다른 객체를 멤버로 두고 위임
  1. ↑ 1.0 1.1 「Inheritance」, The Java Tutorials, Oracle, https://docs.oracle.com/javase/tutorial/java/IandI/subclasses.html, 확인일: 2026-11-04.
  2. ↑ 「9. Classes - 9.5 Inheritance」, The Python Tutorial, Python Software Foundation, https://docs.python.org/3/tutorial/classes.html, 확인일: 2026-11-04.