has-a 관계와 is-a 관계는 '포함관계와 상속관계' 라고도 한다.
has-a 관계는 한 클래스가 다른 클래스를 포함하고 있는 관계를 의미한다.
즉, 한 클래스가 다른 클래스의 객체를 멤버 변수로 가지고 있는 경우이다.
예를 들어, 자동차 클래스가 엔진 클래스를 포함하는 경우, 자동차는 엔진을 가지고 있으므로 자동차 클래스는 엔진 클래스의 객체를 포함하고 있다.
public class Car {
private Engine engine; // 엔진 객체를 멤버 변수로 가짐
public Car(Engine engine) {
this.engine = engine;
}
}
위의 예시에서 Car 클래스와 Engine 클래스 간의 관계는 has-a 관계이다.
Car 클래스는 Engine 클래스의 객체를 멤버 변수로 가지고 있다.
is-a 관계는 상속 관계를 의미한다.
즉, 한 클래스가 다른 클래스의 하위 클래스인 경우이다.
예를 들어, 사각형은 도형의 한 종류이므로 사각형 클래스는 도형 클래스의 하위 클래스이다.
public class Shape {
// 도형의 속성과 메서드
}
public class Rectangle extends Shape {
// 사각형에 대한 추가적인 속성과 메서드
}
Rectangle 클래스와 Shape 클래스 간의 관계는 is-a 관계이다.
Rectangle 클래스는 Shape 클래스의 하위 클래스로, 도형의 한 종류인 사각형을 나타낸다.