Java 클래스 간의 관계, 상속과 포함관계
by 볼빵빵오춘기클래스의 관계를 크게 보면 상속관계과 포함관계로 2가지로 나눌 수 있다.
포함 관계
- 클래스의 멤버로 참조변수를 선언하는 것
더보기

포함관계 설명1

포함관계 설명2
// 코드1
class Point{
int x; // 원점의 x 좌표
int y; // 원점의 y 좌표
}
// 코드2
class Circle{
int x; // 원점의 x 좌표
int y; // 원점의 y 좌표
int r; // 반지름
}
// 코드3
class Circle{
Point c = new Point();
int r;
}
⇒ 코드2처럼 사용할 수 있지만 코드3처럼 작성하여 코드1의 Point와 관계를 맺을 수 있다.
⇒ 여기서 맺는 관계는 포함관계가 된다.


⇒ 코드2(포함관계 설명1 그림 참고)와 코드3(포함관계 설명2 그림 참고)을 그림을 그려보면 위와 같다.
⇒ 저장공간 x,y,r 3곳을 갖는것이 같다고 볼 수 있지만 그림으로 보면 구조적으로(저장방식이) 다르다는 것을 알 수 있다.
⇒ 구조적으로 다르기 때문에 변수를 가져와 사용할 때도
⇒ 코드2의 경우 x,y,z를 사용할 때는 c.x, c.y, c.y
⇒ 코드3의 경우 x,y,z를 사용할 때는 c.c.x, c.c.y, c.c.y 이렇게 가르키게 된다.
∴ 어느 쪽이 더 좋다라고 할 수는 없다. 하지만 코드3처럼 쓰면서 복잡도가 줄어들었다.
- 작은 단위의 클래스를 만들고, 이 들을 조합해서 클래스를 만든다.
더보기
class Car{
Engine e = new Engine(); // 엔진
Door[] d = new Door[4]; // 문, 문의 개수를 넷으로 가정하고 배열로 처리했다.
}
예제 코드
더보기
class MyPoint{
int x;
int y;
}
class Circle extends Object{
MyPoint p;
int r;
Circle(){
p = new MyPoint();
}
}
public class InheritanceTest{
public static void main(String[] args){
Circle c = new Cicle();
System.out.println(c.toString());
// extends Object 자동적으로 상속되어 toString()사용가능
}
}
클래스 간의 관계 결정하기
- 상속관계 : ‘~은 ~이다. (is-a)’
- 포함관계 : ‘~은 ~을 가지고 있다. (has-a)’
가장 간단한 방법은 위와 같이 문장을 만들어보고 어느 쪽이 자연스러운지 확인한다.(절대적인건 아님)
대부분 90% 경우가 포함관계이다.
상속은 여러가지 제약이 많기 때문에 꼭 필요할 때 사용한다.
잘모르겠다할 때 포함관계로 해본다.

위와 같이 해보라는데 언제 상속인지 포함인지 여전히 헷갈린다.
많이 다른 사람들이 작성한 코드 보고 공부하다 보면 느낌이 오겠지 생각하면서 더 공부하기!
'👩🏻💻 About 프로그래밍 > Java' 카테고리의 다른 글
Java 오버라이딩(overriding) (0) | 2023.11.29 |
---|---|
Java 단일상속(Single Inheritance), Object 클래스 (0) | 2023.11.29 |
Java 상속(Inheritance) (0) | 2023.11.29 |
Java 변수의 초기화, 멤버변수의 초기화 (0) | 2023.11.29 |
Java 생성자 this(), 참조변수 this (0) | 2023.11.29 |
블로그의 정보
Hello 춘기's world
볼빵빵오춘기