☕ JAVA
[Java] 클래스 간의 관계(상속 관계, 포함 관계)
별이⭐
2024. 5. 24. 08:45
클래스 간의 관계(상속, 포함)
상속(inheritance)
- 기존의 클래스로 새로운 클래스를 작성하는 것 (코드의 재사용)
- 두 클래스를 부모-자식 관계로 맺어주는 것
class 자식 클래스 extends 부모클래스 { … }
class Point {
int x;
int y;
}
class Point3D {
// Point 클래스랑 전혀 관계 X
int x;
int y;
int z;
}
class Point3D2 extends Point {
// Point 클래스와 상속 관계
// Point 클래스의 변경에 영향 받는다.
int z;
}
- 자손은 조상(부모의 부모, …)의 모든 멤버를 상속 받는다. (생성자와 초기화 블럭은 제외)
- 자손의 멤버 개수는 조상보다 적을 수 없다. (같거나 많다)
class Parent {
int age; // 멤버 1개
}
class Child extends Parent {
void play() {
system.out.println("놀자~");
}
// 자식 자신의 멤버 1개 + 부모의 멤버 1개 = 멤버 1개
}
- 자손의 변경은 조상에 영향을 미치지 않는다.
- 자바는 단일 상속만을 허용한다. (조상은 하나만!)
- 다중 상속 문제 → 인터페이스로 해결 가능!
- 또는 비중이 높은 클래스 하나만 상속 관계로, 나머지는 포함 관계로 설정한다.
- 부모가 없는 클래스는 자동적으로 Object 클래스를 상속받는다.
포함 관계(composite)
- 포함이란? 클래스의 멤버로 참조 변수를 선언하는 것
- 작은 단위의 클래스를 먼저 만들고, 이들을 조합해서 클래스를 만든다.
class Car {
Engine e = new Engine();
Door[] d = new Door[4];
}
}
클래스 간의 관계 결정하기
- 상속 관계
- ‘~은 ~이다’ (is-a)
- 상속은 제약이 많아 꼭 필요할 때만 상속
- 포함 관계
- ‘~은 ~을 가지고 있다’ (has-a)
- 예시
- 원(Circle)은 점(Point)이다. (X)
- 원(Circle)은 점(Point)을 가지고 있다. (O)