상속 Inheritance
상속은 "is a kind of" 관계를 지정해주는 것이다.
위 그림을 예시로 [Car] is a kind of [Vehicle] 관계가 형성된 것이다.
이 때, Vehicle 클래스는 슈퍼(Super) 클래스, 기본(Base) 클래스, 부모(Parent) 클래스라고 하며, 서브 클래스의 일반화된 클래스이다.
Car 클래스는 서브(Sub) 클래스, 파생(Derived) 클래스, 자식(Child) 클래스라고 하며, 슈퍼 클래스의 전문화된 클래스이다.
서브 클래스는 슈퍼 클래스로부터 모든 것을 상속 받는다.
예를 들어 Vehicle 클래스에서 drive() 라는 메소드가 있다면, Car 클래스는 drive()라는 멤버 메소드를 갖게 된다.
하나의 슈퍼 클래스는 하나의 서브 클래스만 있지 않고, 얼마든지 여러 개의 서브 클래스를 만들(상속해줄) 수 있다.
슈퍼 클래스는 여러 서브 클래스들의 공통점을 모아놓은 것이라 생각하면 편하다.
Vehicle 클래스의 서브 클래스 AirPlane, Car, Bike 클래스가 있다하면, 공통점은 이동, 정지 등이 있다.
그렇다면 Vehicle 클래스에 이동, 정지 기능을 구현하고 그 서브 클래스들은 해당 기능을 오버라이딩(Override) 하여 자신에게 알맞게 더 구체적인 기능으로 구현할 수도 있다.
또, 서브 클래스는 또 다른 클래스의 슈퍼 클래스가 될 수도 있다.
예를 들어 Electric Car 라는 서브 클래스가 Car 클래스를 상속 받을 수 있다.
이렇게 형성되는 클래스 그룹은 클래스 계층 구조(Class Hierarchy)를 형성하며, 계층 구조의 위쪽은 일반화된, 아래쪽은 전문화된 개념을 나타낸다.
이 클래스 계층 구조의 깊이는 계층 구조의 상속 수준 수가 된다.
(더 깊은 클래스 계층일수록 얕은 계층보다 사용과 구현이 어려워, 깊이를 5 ~ 7개의 클래스로 권장된다고 한다.)
단일 Single / 다중 Multiple 상속
- 단일 상속: 슈퍼 클래스가 하나 있을 때
- 다중 상속: 슈퍼 클래스가 여럿 있을 때
Java에서 클래스는 단일 상속만 가능하지만, 여러 인터페이스를 상속하는 것은 가능하다.
'Java' 카테고리의 다른 글
[Java] 메소드와 파라미터 (2) - 재귀 메소드, 메소드 오버로딩, 메소드 시그니처 (0) | 2024.02.22 |
---|---|
[Java] 메소드와 파라미터 (1) (0) | 2024.02.22 |
[Java] 문과 표현식 (3) (0) | 2024.02.20 |
[Java] 문과 표현식 (2) (2) | 2024.02.20 |
[Java] 문과 표현식 (1) (0) | 2024.02.20 |