본문 바로가기
Java

자바 상속(inheritance)의 개념 (부모클래스, 자식클래스, extends)

by 오늘이 내가 된다. 2022. 1. 5.

객체지향개념적 요소로 크게 상속, 다형성, 캡슐화, 추상화, 인터페이스 등이 있다.

그 중 상속은 이후에 다루게 될 다형성과도 많은 연관이 있다.

객체지향의 중요한 개념인 상속에 대해 알아보자

 


 

상속(inheritance)이란?

- 기존의 클래스를 재사용해서 새로운 클래스를 작성

- 두 클래스를 부모와 자식으로 관계를 맺음

- 자식과 부모의 모든 멤버를 상속(생성자, 초기화블록 제외)

- 자식의 멤버개수는 부모보다 같거나 많다

 

클래스 종류

부모클래스 : 부모클래스(parent), 상위클래스(super), 기반 클래스(base)
자식클래스 : 자식클래스(child), 하위클래스(sub), 파생된 클래스(derived)

 

상속 사용 방법

class 자식클래스 extends 부모클래스 {
...
}

출처 :  http://www.javachobo.com

자바는 단일 상속만을 허용한다.

자식 클래스가 변하더라도 부모 클래스는 변하지 않는다.

부모 클래스가 변하게 되면 모든 자식 클래스들이 영향을 받는다.

GrandChild가 Child를 상속하면서 Child2를 상속할 수 없다.

위의 오른쪽 그림처럼 상속을 받으면 자식 클래스는 부모클래스를 포함한다.

class GrandChild extends Child, Child2 { // 불가, 단일 상속만 허용
...
}

 

포함(composite)이란?

- 한 클래스의 멤버변수로 다른 클래스를 선언하는 것

- 작은 단위의 클래스를 먼저 만들고, 이 들을 조합해서 하나의 커다란 클래스를 만든다.

출처 :  http://www.javachobo.com

좌측의 코드는 기존 Circle 클래스이고,

우측은 Point 클래스를 Circle 클래스에서 int타입의 멤버변수 x, y를 선언하는 대신

Point c = new Point(); 를 통해 Point 클래스 타입의 참조변수 c를 선언해서 사용하였다.

 

상속 vs 포함

클래스를 정의할 때 관계를 통해 재사용성을 높이는 것이 중요하다.

상속과 포함 둘 중 어느 것을 사용할 거인지 파악하기는 쉽지 않다.

 

상속: 원은 점이다. (is-a 문장)

포함: 원은 점을 가지고 있다. (has-a 문장)

=> 좀 더 매끄러운 문장이 되게끔 만들어주면 된다.

 

기존의 클래스에 새로운 기능이 추가된 클래스를 만들 때 상속관계 그렇지 않은 경우 포함관계로 만든다.

댓글