Search
Duplicate

Java - IS-A 관계 vs HAS-A 관계

글감
Java
작성자
작성 일자
2024/02/08 06:43
상태
완료
공개여부
공개
Date
생성자
작업자

IS-A 관계

IS-A 관계는 A는 B이다의 의미로, IS-A 관계는 상속에 의존한다.
Java의 클래스 선언에 extends 또는 implement 키워드가 있으면 특정 클래스가 Is-A 관계를 따른다고 볼 수 있다.
상속은 주로 추상화된 클래스나 일반 클래스를 구체화하는 관계에서 코드 재사용성을 위해 사용된다.
다만 상속을 사용하게 되면 클래스간 결합도가 높아져 상위 클래스를 수정할 때 하위 클래스에 영향이 가는 상황처럼 하위 클래스가 상위 클래스에 종속된다.
이러한 이유로 상속은 서로 관련이 있는 개념에서 클래스를 구체화하는 관계에서만 사용되어야 한다.
public class Shape { private String color; public void setColor(String color) { this.color = color; } public void getColor() { return this.color; } } public class Square extends Shape { public void getColor() { return Shape.super.getColor(); } }
Java
복사

HAS-A 관계

HAS-A 관계는 A는 B를 가지고있다의 의미로, 포함 관계를 의미한다.
Java에서 Has-A 관계는 한 클래스의 인스턴스가 다른 클래스의 인스턴스 또는 동일한 클래스의 다른 인스턴스에 대한 참조를 가지고 있음을 의미한다.
다른 클래스를 포함하거나 다른 클래스의 메서드나 변수를 받아들여서 사용한다.
public class Square { ... } public class Circle { ... } public class Drawing { private Square square; private Circle circle; ... }
Java
복사