[Java] 상속(inheritance)에 대한 이야기

상속(inheritance)에 대한 이야기




  상속 ?

기존의 클래스 재사용하여 새로운 클래스를 작성하는 것.

 

 

  장점 ?

코드의 재사용성을 높이고 코드의 중복을 제거하여 

프로그램의 생산성과 유지보수에 크게 기여한다.

 

 

구현하는 것은 새로 작성하고자 하는 클래스의 이름뒤에 상속받고자 하는 클래스의 이름을 키워드 'extends'와 함께 써 주기만 하면 된다.

 

class Child extends Parent

{
}

 

조상 클래스 - 부모 (parent) 클래스 , 상위(super) 클래스,  기반(base)클래스

자손 클래스 - 자식(child)클래스,       하위(sub)클래스,      파생된(derived) 클래스

 



상속을 받는다는 뜻은 조상 클래스를 확장(extends)한다는 의미한다.

  • 생성자 초기화 블은 상속되지 않는.

  • 자손 클래스의 멤버 개수는 조상 클래스보다 항상 같거나 많다.

 

 

참고.

접근제어자(access modifier)로 private 또는 default가 사용된 멤버들은 상속되지 않는다기보다는

상속은 받지만 자손 클래스로부터의 접근이 제한되는 것으로 보는것이 옳다.

 

 



Tip.

Parent 클래스, Child 클래스 , Child2 클래스가 있다.

 

만일 Child클래스와 Child2클래스에 공통적으로 추가되어야 하는 멤버(멤버변수나 메서드)가 있다면, 이 두 클래스에 각각 따로 추가해주는 것보다는

이들의 공통조상인 Parent클래스에 추가하는 것이 좋다.

 

코드를 한 곳에서 관리함으로써 코드의 중복이 줄어든다는 것이다.

 

하나 이상의 클래스에 중복적으로 추가해야하는 경우에는 상속관계를 이용해서 코드의 중복을 최소화해야한다.

 

상속이외에도 클래스를 재사용하는 또 다른 방법

그것은!

클래스 간에 '포함(Composite)관계'를 맺어 주는 것이다.

 

 



포함관계


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



class Circle
{
    int x ;
    int y ;
    int r ;
}
 
class Point
{
    int x;
    int y;
}
 
class Circle
{
    Point c = new Point(); //원점
    int r ;
}


 

요렇게 포함관계를 만들수 있어요.

 

하나의 거대한 클래스를 작성하는 것보다 단위별로 여러 개의 클래스를 작성한 다음, 이 단위 클래스들을 포함관계로 재사용하면 보다 간결하고 손쉽게 클래스를 작성할 수 있다.


 

 

상속 : ' ~은  ~이다.'

포함 : ' ~은 ~을 가지고 있다.'

 

Ex >

원(Circle)은 점(Point)이다. - Circle is a Point

원(Circle)은 점(Point)을 가지고 있다. - Circle has a Point

 

여기서 보면 두번째 문장이 더 옳다는것을 알수 있으므로 포함관계!