HAS-A 관계란 무엇인가?
자바에서 HAS-A 관계는 클래스 간의 관계를 주로 사용 용도에 기반하여 정의한 것입니다. 이름 그대로 특정 클래스가 어떤 객체를 "가지고 있다(HAS-A)"는 의미를 나타냅니다. 이러한 관계를 잘 활용하면 코드의 중복을 줄일 수 있고, 버그 발생 가능성도 함께 낮출 수 있습니다.
간단한 예제를 통해 살펴보겠습니다.
예제 코드
public class Vehicle {}
public class Speed {}
public class Van extends Vehicle {
private Speed sp;
}위 예제에서 Van 클래스는 Speed 타입의 멤버 변수를 가지고 있습니다. 즉, "Van은 Speed를 가진다(Van HAS-A Speed)"는 관계가 성립하는 것입니다.
코드 재사용성 향상
Speed를 별도의 독립된 클래스로 분리하면, 속도와 관련된 모든 코드를 Van 클래스 내부에 작성할 필요가 없습니다. 덕분에 Speed 클래스는 여러 애플리케이션에서 자유롭게 재사용할 수 있으며, 유지보수성 또한 크게 향상됩니다.
캡슐화와 정보 은닉
객체 지향 프로그래밍의 핵심 특징 중 하나는, 사용자가 실제로 어떤 객체가 작업을 수행하는지 신경 쓸 필요가 없다는 점입니다. 이를 위해 Van 클래스는 자신의 내부 구현 세부 사항을 외부 사용자로부터 숨깁니다.
결국 사용자는 Van 클래스에게 특정 동작을 요청하기만 하면 됩니다. 그러면 Van 클래스는 해당 작업을 스스로 처리하거나, 필요에 따라 다른 클래스에 위임하여 결과를 제공합니다. 이러한 방식은 시스템의 복잡도를 낮추고, 내부 구현이 변경되더라도 외부에 미치는 영향을 최소화하는 효과가 있습니다.