개발 일지/Java

[Java] 상속/포함 관계

미숫가루설탕많이 2022. 12. 29. 15:41

 자바에서 포함(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