본문 바로가기

Java

Java 클래스간의 관계 - 상속(Inheritance), 포함(Composite) 관계

 

클래스를 재사용하는 방법 
1) 상속: ~은 ~이다.(is-a)
2) 포함관계: ~은 ~을 가지고 있다.(hsa-a)

 

1. 상속(Inheritance)

 

1) 상속이란?

- 기존의 클래스를 재사용하여 새로운 클래스를 작성하는 것(코드의 재사용)

- 두 클래스를 부모와 자식으로 관계를 맺어주는 것

- 자손은 조상의 모든 멤버를 상속 받음(생성자, 초기화 블럭 제외)

- 자손의 멤버 개수는 조상보다 같거나 많음

- 자손의 변경은 조상에 영향을 미치지 않음

 

 

2) 상속을 구현하는 방법: 키워드 'extends' 사용

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

 

3) 단일 상속(single inheritance)

- Java는 단일 상속만 허용(c++은 다중상속 허용)

- 다중 상속을 허용하면 복합적인 기능을 가진 클래스를 쉽게 작성할 수 있지만 클래스간 관계가 복잡해지고 상속받은 멤버 이름이 같은 경우 구별할 수 있는 방법이 없음

- 따라서 단일 상속은 클래스 간의 관계가 명확하고, 다중 상속보다 코드 신뢰성이 더 높음

- 비중이 높은 클래스 하나를 상속관계, 나머지는 포함관계로하여 다중 상속과 같은 효과를 낼 수 있음

 

 

2. 포함(Composite)관계

 

1) 포함관계란?

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

- 작은 단위 클래스들을 만들고, 그 클래스들을 조합하여 새로운 클래스를 만드는 것

 

2) 포함 관계를 사용하는 이유

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

 

3) 예시

class Point {
    int x;
    int y;
}

class Circle {
    Point c = new Point(); // Point 클래스를 재사용, 'Circle은 Point를 가지고 있다'-> 포함관계
    int r;
}