자바에서 포함(composite)은 상속과 비슷하게 클래스를 재사용할 수 있는 방법으로, 클래스의 멤버로 다른 클래스 타입의 참조 변수를 선언하는 것을 의미한다. 즉, 클래스의 속성 값에 다른 클래스를 선언하여 사용하는 것이다.
class Circle {
int x; // 원점의 x좌표
int y; // 원점의 y좌표
int r; // 반지름
}
여기서 상속과 포함은 구조상의 차이가 있다.
class Point {
int x;
int y;
}
class Circle1 extends Point { // 상속 관계
int z;
}
class Circle2 { // 포함 관계
Point p = new Point();
int z;
}
위 코드에서, 상속은 extends 키워드를 통해 상위 클래스를 상속받고 포함은 클래스의 속성 값에 다른 클래스를 선언하는 것을 볼 수 있다.
클래스 간의 관계 결정하기
클래스 간의 관계를 결정할 때 상속을 써야 할지, 포함을 써야 할지 결정해야 한다.
간단하게 생각해보면 상속 관계는 'A는 B이다. (is-a)'이고 포함 관계는 'A는 B를 가지고 있다. (has-a)'라고 생각했을 때 문장이 성립되는 쪽으로 작성하면 된다.
위 코드로 예를 들면, (1) Circle is a point. (원은 점이다.) 이거랑 (2) Circle has a Point. (원은 점을 가지고 있다.) 둘 중에 어떤 문장이 더 맞는지 생각해보면 (2) Circle has a Point 가 더 적절한 표현이라는 것을 알 수 있다. 따라서, 이런 경우에는 Circle 클래스와 Point 클래스의 관계를 포함 관계로 하는 것이 더 적합하다.
'개발 일지 > Java' 카테고리의 다른 글
[Java] super과 super() (0) | 2022.12.29 |
---|---|
[Java] 메서드 오버라이딩(Method Overriding) (0) | 2022.12.29 |
[Java] 상속(Inheritance) (0) | 2022.12.29 |
[Java] 내부 클래스(Inner Class) (0) | 2022.12.28 |
[Java] this 와 this() (0) | 2022.12.28 |