Computer >> 컴퓨터 >  >> 프로그래밍 >> Java

자바의 집계(Aggregation)란? HAS-A 관계 쉽게 이해하기

집계(Aggregation)는 객체 지향 프로그래밍에서 HAS-A 관계를 의미합니다. 즉, 하나의 클래스가 다른 클래스의 객체를 자신의 멤버로 가지고 있는 관계를 말합니다. 먼저 예제 코드를 통해 살펴보겠습니다.

예제 코드

public class Vehicle {}
public class Speed {}
public class Van extends Vehicle {
    private Speed sp;
}

위 코드에서 Van 클래스는 Speed 클래스를 필드로 가지고 있습니다. 이것이 바로 "Van은 Speed를 가진다(HAS-A)"는 집계 관계입니다.

집계를 사용하는 이유

Speed를 별도의 클래스로 분리하면 속도와 관련된 모든 코드를 Van 클래스 안에 직접 작성할 필요가 없습니다. 덕분에 Speed 클래스를 여러 애플리케이션에서 재사용할 수 있어 코드의 유지보수성과 확장성이 크게 향상됩니다.

객체 지향 관점에서의 집계

객체 지향 프로그래밍의 핵심 특징 중 하나는 사용자가 실제로 어떤 객체가 작업을 수행하는지 신경 쓸 필요가 없다는 점입니다. 이를 구현하기 위해 Van 클래스는 내부 구현 세부 사항을 외부 사용자에게 숨깁니다(캡슐화).

결과적으로 사용자는 Van 클래스에 특정 동작을 요청하기만 하면 되고, Van 클래스는 그 작업을 스스로 수행하거나 다른 클래스(Speed 등)에게 위임하여 처리합니다.

이처럼 특정 동작을 수행하기 위해 다른 객체를 포함하는 개념을 바로 집계(Aggregation)라고 부릅니다. 상속(Inheritance)과 함께 자바에서 코드 재사용성을 높이는 대표적인 설계 기법이므로, IS-A 관계와 HAS-A 관계의 차이를 명확히 이해해 두는 것이 좋습니다.