본문 바로가기
JAVA

상속과 포함

by winteringg 2022. 8. 28.

1. 상속 (Inheritance)
1) extends 키워드를 사용하여 기존의 클래스를 확장하여 새로운 클래스를 작성하는 것. (코드의 재사용)
2) 두 클래스를 부모와 자식으로 관계를 맺어주는 것.
  - 상속하는 클래스 (상위 클래스, parent class, base class, super class)
  - 상속받는 클래스 (하위 클래스, child class, derived class, subclass)
3) 자식은 조상(부모의 부모도 가능)의 모든 멤버와 메서드를 상속받음. (단 생성자, 초기화 블럭 제외)
4) 자식의 변경은 조상 클래스에 영향을 미치지 않음. 자식 클래스에서 어떤 기능이 생기든 조상 클래스에는 변화가 없음. 하지만 조상 클래스에서 변경이 있을 경우 자식 클래스에 영향을 미침.
5) 자식의 멤버 개수가 부모 보다 적을 수 없음. (같거나 많음) -- 다형성 개념 적용
  - 이미 구현된 클래스보다 더 구체적인 기능을 가진 클래스를 구현할 때 기존 클래스를 상속함.
6) is a 관계 : ~은 ~이다. (자식 클래스는 부모 클래스이다.)

2. 상속의 구현과 장점과 제한
1) 상위 클래스는 하위 클래스보다 더 일반적인 개념과 기능을 가짐.
2) 하위 클래스는 상위 클래스보다 더 구체적인 개념과 기능을 가짐.
3) 하위 클래스가 상위 클래스의 속성과 기능을 확장(extends) 한다는 의미.
4) 장점 
  - 코드의 재사용성을 높이고, 중복을 제거하여 유지보수의 편리성 제공.
  - 코드를 공통으로 관리할 수 있어 추가, 수정이 쉬움.
  - 부모 클래스를 재사용해서 자식 클래스를 빨리 개발할 수 있음.
  - 객체의 다형성을 구현할 수 있음.
    * 다형성 : 하나의 참조변수로 여러 클래스의 인스턴스를 저장하는 것.
    * 상속 관계에서만 저장이 가능하며, 부모 클래스의 참조 변수로 자식 클래스의 인스턴스를 저장할 수 있음.
5) 제한 
  - 부모 클래스의 private 접근을 갖는 필드와 메서드는 제외됨.
  - 부모 클래스가 다른 패키지에 있을 경우, default 접근 필드와 메서드도 제한됨.

상속 구현

3. 단일 상속 (Single Inheritance)
1) 자바는 단일 상속만 허용함.
  - 자바에서는 다중상속, 즉 부모클래스를 여러개 두는 것을 허용하지 않음 ( ex. class A extends B, C, D...{ } )
  - 가장 비중이 높은 클래스 하나만 상속하고 나머지는 포함관계로 표현.
2) is a 관계 : ~은 ~이다. (자식 클래스는 부모 클래스이다.)

4. 포함 관계 (composite)
1) 클래스의 멤버 변수로 다른 클래스의 객체를 만들어주는 것.
2) 다중 상속을 대체하는 방법.
3) A클래스에 B클래스의 기능을 이용하고 싶을 때, A의 멤버 변수로 B를 넣어주는 방법.
4) 규모가 적은 클래스를 먼저 만들고, 이것을 조합하여 규모가 큰 클래스가 만들어짐.
5) has a 관계 : ~은 ~를 가지고 있다.
  - 보조적인 것은 포함관계로 정의.

class Car {
    //int x, int y; 를 쓰는 대신 Wheel 클래스를 멤버 변수로 사용하면,
    //Wheel 클래스의 기능을 사용할 수 있다.
    
    Wheel wh = new Wheel();
    int r;
}

class Wheel {
    int x;
    int y;
}

6) 상속을 사용할 지, 포함을 사용할 지 헷갈린다면 'is a'(상속), 'has a'(포함) 관계를 사용해보면 됨.
       *사람은 동물이다. (is~a)
       *사람은 동물을 가지고 있다.(포함한다) (has~a)
       => 이 경우 '사람은 동물이다' 가 맞으므로 상속 관계로 표현함.

       *자동차는 기어이다. (is~a)
       *자동차는 기어를 가지고 있다.(포함한다) (has~a)
       => 이 경우 '자동차는 기어를 가지고 있다.' 가 맞으므로 포함 관계로 표현함.

5. Object 클래스 (모든 클래스의 조상)
1) 조상이 없는 클래스는 기본적으로 최고 조상인 Object클래스를 상속받음. 컴파일러가 자동으로 클래스 이름 옆에
< extends Object > 를 추가해 주는 것. (Object는 모든 클래스의 조상 클래스 이므로)
2) 모든 클래스는 Object 클래스에 정의된 11개의 메서드를 상속 받음. (ex: toString(), equals(), hashCode(), ....)

 

 

 

참고 : [한빛미디어] 이것이 자바다 (신용권의 Java 프로그래밍 정복) Chapter 7.상속
참고 : [도우출판] JAVA의 정석(3ND EDITION)-자바의 정석 최신 Java 8.0 포함 Chapter 7.상속

댓글