[자바의 정석] 상속 (inheritance)

강신현·2022년 5월 23일
0

자바의 정석

목록 보기
9/15

✅ 상속 ✅ 포함 ✅ 단일 상속 ✅ 다중 상속 ✅ Object 클래스

상속

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

  • 크드의 추가 및 변경이 매우 용이
  • 코드의 재사용성을 높이고 중복을 제거하여 프로그램의 생산성과 유지보수에 크게 기여
  • 클래스 이름을 키워드 'extends' 와 함께 써주면 됨
class Child extends Parent{
	// ...
}

- 조상 클래스

  1. 부모 클래스 (parent)
  2. 상위 클래스 (super)
  3. 기반 클래스 (base)

- 자손 클래스

  1. 자식 클래스 (child)
  2. 하위 클래스 (sub)
  3. 파생된 클래스 (derived)
  • 자손 클래스는 조상 클래스의 모든 멤버를 상속받기 때문에, child 클래스는 parent 클래스의 멤버들을 포함한다고 할 수 있다.
  • 만약 parent 클래스에 멤버변수를 추가하면, child 클래스는 자동적으로 멤버변수가 추가된다.
  • 생성자와 초기화 블럭은 상속되지 않는다. 멤버만 상속된다.
  • 자손 클래스의 멤버 개수는 조상 클래스보다 항상 같거다 많다.
  • 자손 클래스의 인스턴스를 생성하면 조상 클래스의 멤버도 함께 생성되기 때문에 따로 조상 클래스의 인스턴스를 생성하지 않고도 조상 클래스의 멤버들을 사용할 수 있다.

포함

한 클래스의 멤버변수로 다른 클래스 타입의 참조변수를 선언하는 것

  • 상속이외에 클래스를 재사용하는 또 다른 방법
  • 하나의 거대한 클래스를 작성하는 것보다 단위별로 여러 개의 클래스를 작성한 다음, 이 단위 클래스를 재사용하면 더 간결하고 손쉽게 클래스를 작성할 수 있다.
class Point{
	int x; // 원점의 x좌표
    int y; // 원점의 y좌표
}
class Circle{
	int x; // 원점의 x좌표
    int y; // 원점의 y좌표
    int r; // 반지름
}
  1. 상속 관계 사용
class Point{
	int x; // 원점의 x좌표
    int y; // 원점의 y좌표
}
class Circle extends Point{
    int r; // 반지름
}
  1. 포함 관계 사용
class Point{
	int x; // 원점의 x좌표
    int y; // 원점의 y좌표
}
class Circle{
	Point c = new point(); // 원점
    int r; // 반지름
}

상속관계 vs 포함관계

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

위 예시에 적용시켜보면
1. 원(Circle)은 점(Point)이다.
2. 원(Circle)은 점(Point)을 가지고 있다.

원(Circle)은 원점(Point)과 반지름으로 구성되어 있으므로 2가 더 옳다.
따라서 원과 점은 상속관계 보다 포함관계를 맺어 주는 것이 더 옳다.

만약 도형(Shape)이라는 클래스가 있다면 원은 클래스이므로 상속관계가 더 적절할 것이다.

단일 상속

(single inheritance)

다른 객체지향언어인 C++ 에서는 다중 상속(multiple inheritance)을 허용하지만 자바에서는 단일 상속만을 허용한다.

  • 장점 : 클래스 간의 관계가 명확하며 코드를 더 신뢰할 수 있게 만들어준다.
  • 단점 : 다중상속의 장점을 포기해야 한다.

다중 상속

(multiple inheritance)

  • 장점 : 여러 클래스로부터 상속받을 수 있기 때문에 복합적인 기능을 가진 클래스를 쉽게 작성할 수 있다.
  • 단점 : 클래스간의 관계가 매우 복잡해지며, 서로 다른 클래스로부터 상속받은 멤버간의 이름이 같은 경우 구별할 수 있는 방법이 없다.

Object 클래스

  • 모든 클래스 상속계층도의 최상위에 있는 조상클래스
  • 다른 클래스로부터 상속 받지 않았다면 컴파일러가 자동적으로 extends Object를 추가한다.

따라서 toString(), equals() 같은 기본적인 11개의 메서드를 따로 정의하지 않고 사용할 수 있는 것이다.

profile
땅콩의 모험 (server)

0개의 댓글