상속(Inheritance)
객체 지향 프로그래밍의 핵심 원리 중 하나인 상속(Inheritance)은 기존의 클래스와 다른 클래스 사이에 부모 / 자식 관계를 맺어주어 새로운 클래스를 작성하는 것으로 코드의 재사용성을 높일 수 있다.
extends 키워드를 사용하는데 이는 상속 받은 멤버를 통해 새로운 클래스를 작성하여 점점 확장되는 것을 뜻한다.
상속의 특성
- 자식 클래스는 부모 클래스의 모든 멤버를 상속 받는다. (생성자, 초기화 블록 제외)
- 자식의 변경은 부모에 영향을 미치지 않는다.
위의 자식 클래스에서 자식이 보유한 계좌에 현재 자신의 돈과 부모의 돈을 합쳐 계좌에 저축했지만 부모의 계좌는 변하지 않는다.
- 부모의 멤버가 변경되면 자식까지 영향을 미친다.
부모 클래스에서 부모의 돈을 변경하면 상속 받는 자식의 돈도 변경된다.
많은 사람들은 성인이 되고 독립, 결혼 등 여러가지 이유로 부모님으로 부터 재산을 상속받게 된다.
상속 받은 재산을 내가 투자, 대출 등 여러 가지 방법으로 상승 시켰다면 나의 재산이 증가한 것이지 부모의 재산에 영향을 주지 않는다.
하지만 부모가 물려주는 재산은 여러 이유로 늘어나거나 줄어들 수 있기 때문에 내가 상속 받을 때 영향을 미칠 수 있다.
단일 상속
자바는 단일 상속만을 허용한다. 즉, 자식 클래스는 하나의 부모 클래스를 상속 받는다.
단일 상속이 아닌, 다중 상속은 왜 하지 못하는 걸까?
다중 상속의 문제는 같은 이름의 메서드가 있을 경우 어떤 것을 사용할지 모르기 때문에 메서드 간 충돌이 발생한다.
따라서 다중 상속과 같은 효과를 내고 싶으면 비중이 높은 클래스 하나만 상속관계로 맺어주고, 나머지는 포함관계로 구성한다.
Object 클래스 - 모든 클래스들의 조상
우리가 일반적으로 쓰는 클래스는 언듯 보면 상속을 받지 않은 클래스라고 생각할 수 있다.
하지만, 실제로는 부모가 없는 클래스는 자동적으로 Object 클래스를 상속받게 된다.
모든 클래스는 Object 클래스에 정의된 11개의 메서드를 상속받는다.
정부와 보호 아동으로 예시를 들어보자
만약 부모가 없는 보호 아동을 생각해보자
정부는 부모가 없는 모든 보호 아동을 지원하게 된다.
하지만 정부는 모든 걸 지원해 줄 수 없고 한정된 자원만 지원해주게 된다.
Object 클래스가 정부라고 생각하면 해당 클래스가 가지고 있는 11개의 한정된 메서드를 부모가 없는 class에 지원해 사용할 수 있게 해준다.
클래스의 관계 - 포함 관계
클래스의 관계 중에서 상속 관계 외에도 포함 관계가 있다.
위의 예시 처럼 Point 클래스가 따로 상속을 하지 않고 클래스의 멤버로 참조변수를 선언하여 사용한다.
포함 관계를 통해 작은 단위의 클래스를 만들고, 이 들을 조합해서 클래스를 만든다.
대부분은 포함 관계를 사용하고 꼭 필요한 경우에만 상속 관계를 사용한다.
상속 관계와 포함 관계 중 어느것을 선택해야 될지 고민될 때 사용하는 방법으로 is-a 와 has-a가 있다.
상속 -- ~은 ~이다. (is-a) ex) 원은 점이다.
포함 -- ~은 ~을 가지고 있다. (has-a) ex) 원은 점을 가지고 있다.
'자바' 카테고리의 다른 글
객체 지향 프로그래밍 - 제어자 (0) | 2023.08.16 |
---|---|
객체 지향 프로그래밍 - Super (0) | 2023.08.15 |
객체 지향 프로그래밍 - 생성자 & this (0) | 2023.08.06 |
객체 지향 프로그래밍 - 오버로딩(Overloading)과 오버라이딩(Overriding) (0) | 2023.08.06 |
객체 지향 프로그래밍 - 변수와 메서드 (0) | 2023.08.05 |