1. 클래스 간의 관계
상속 이외에도 클래스를 재사용하는 방법이 있다. 클래스 간에 '포함(Composite)' 관계를 맺어 주는 것
→ 한 클래스의 멤버변수로 다른 클래스 타입의 참조변수를 선언
원(Circle)을 표현하기 위한 Circle이라는 클래스가 있다.
class Circle {
int x; // 원점의 x좌표
int y; // 원점의 y좌표
int r; // 반지름(radius)
}
Point 클래스를 재사용해서 Circle 클래스를 작성한다면 다음과 같이 할 수 있다.
class Circle {
Point c = new Point(); // 원점
int r; // 반지름(radius)
}
class Point {
int x; // x좌표
int y; // y좌표
}
하나의 거대한 클래스를 작성하는 것보다 단위별로 여러 개의 클래스를 작성한 다음, 이 단위 클래스들을 포함관계로 재사용하면 보다 간결하고 손쉽게 클래스를 작성할 수 있다.
2. 클래스 간의 관계 결정하기
클래스를 작성하는데 있어서 상속관계를 맺어 줄 것인지, 포함관계를 맺어 줄 것인지 결정해야 한다.
위의 Circle 클래스의 경우, Point 클래스를 상속하면 아래와 같다.
class Circle extends Point {
int r; // 반지름(radius)
}
class Point {
int x; // x좌표
int y; // y좌표
}
두 경우를 비교해보면 포함이나 상속이나 결과적으로 별 차이가 없어 보인다.
그럴 때는 아래처럼 문장을 만들어 보면 관계가 명확해진다.
상속관계 : 원(Circle)은 점(Point)이다. >> Circle is a Point.
포함관계 : 원(Circle)은 점(Point)을 가지고 있다. >> Circle has a Point.
* 문장을 비교해보면 두 번째 문장이 더 자연스럽다.
이처럼 클래스를 가지고 문장을 만들었을 때, '~은 ~이다.'라는 문장이 성립하면 '상속관계', '~은 ~을 가지고 있다.'는 문장이 성립하면 '포함관계'를 맺어주면 된다.
참고문헌 : 남궁성(2016), Java의 정석, 도우출판