[Java기초이론] 상속

1 minute read

상속이란?

기존 클래스를 재사용하여 새로운 클래스를 작성하는 것이다. 상속을 통해서 클래스를 작성하면 보다 적은 양의 코드로 새로운 클래스를 작성할 수 있고 코드를 공통적으로 관리할 수 있기 때문에 코드의 추가 및 변경이 매우 용이하다. 이러한 특징은 코드의 재사용성을 높이고 코드의 중복을 제거하여 프로그램의 생산성과 유지보수에 크게 기여한다.

class Child extends parent{

}

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

자손 클래스에 새로운 코드가 추가되어도 조상 클래스는 아무런 영향을 받지 않는다. 하지만 조상 클래스가 변경되면 자손 클래스는 자동적으로 영향을 받게 된다.

그래서 상속을 받는다는 것은 조상 클래스를 확장(extend)한다는 의미로 해석할 수도 있으며 이것이 상속에 사용되는 키워드가 extends인 이유이기도 하다.

클래스간의 관계 - 포함관계

상속이외에도 클래스를 재사용하는 또 다른 방법은 클래스간에 포함(Composite)관계를 맺어 주는 것이다. 포함관계를 맺어 주는 것은 한 클래스의 멤버변수로 다른 클래스 타입의 참조변수를 선언하는 것을 뜻한다.

class Circle{
  Point c = new Point();
  int r;
}

class Point{
  int x;
  int y;
}

클래스간의 관계 결정하기

클래스를 작성하는데 있어서 상속관계를 맺어 줄 것인지 포함관계를 맺어 줄 것인지 결정하는 것은 때때로 혼돈스러울 수 있다.

상속관계 : ~은 ~이다. (is-a)
포함관계 : ~은 ~을 가지고 있다. (has-a)

단일 상속(single inheritance)

C++에서는 여러 조상 클래스로부터 상속받는 것이 가능한 다중 상속(multiple inheritance)을 허용하지만 자바에서는 단일 상속만을 허용한다.

Object클래스 - 모든 클래스의 조상

Object클래스는 모든 클래스 상속계층도의 최상위에 있는 조상클래스이다. 다른 클래스로부터 상속 받지 않는 모든 클래스들은 자동적으로 Object클래스로부터 상속받게 함으로써 이것을 가능하게 한다.

class TV extends Object{

}

그동안 toString()이나 equals(Object o)와 같은 메서드를 따로 정의하지 않고도 사용할 수 있었던 이유는 이 메서드들이 Object클래스에 정의된 것들이기 때문이다.