JAVA/Spring

Aggregate? (애그리거트) 객체지향 프로그래밍 중요 개념 / Java Spring 학습

min민 2023. 2. 21.

Aggregate(에그리거트)란?

소프트웨어 개발에서 관련된 객체들의 집합을 의미한다.

보통 하나의 대상에 대해 여러 객체를 생성하여 각 객체들이 서로 상호작용하도록 구성할 때, 이를 하나의 에그리거트로 묶어서 처리하는것이 일반적이다.

예를들어) 주문(Order)에 대한 객체를 생각하면, 주문 상품, 주문 배송지, 주문 결제정보 등 여러 객체들이 존재한다.

이때, 이러한 객체들을 하나의 에그리거트로 묶어 처리하는 것이 엄청 효율적이다!

 

보통 특정 비즈니스 로직을 수행하는데 필요한 객체들을 모아서 관리하게 된다.

 

이렇게 모아진 객체들은 각각의 역할을 수행하면서, 하나의 대상을  처리하는데 필요한 기능을 제공한다.

 

 

 

 

Aggregate(에그리거트) 구현 방법

에그리거트를 구현하는 방법은 다양하다.

 

일반적인방법

객체 지향 프로그래밍에서 제공하는 클래스나 인터페이스를 이용하여 구현한다.

 

에그리거트를 구성하는 객체들은 해당 클래스나 인터페이스를 구현하도록 만들어지며, 이를 하나의 에그리거트로 묶어서 사용하게 된다.

 

 

 

Aggregate(에그리거트) 구현할 때 중요 Point!

 

**  1. 객체들 간의 상호작용 방식이 구현할때 중요하게 생각할 부분이다.

ex) 보통 에그리거트를 구성하는 객체들은 서로 높은 결합도(high coupling)을 가지는것이 일반적이다.

 

즉 하나의 객체가 변경될 경우에는 이에 연관된 객체들도 함께 변경되어야 한다. 이를 위해서 객체들 간의 상호작용 방식을 정의하는 인터페이스를 제공하고, 이를 각 객체들이 구현하도록 하는 것이 일반적이다.

 

 

 

**  2. 에그리거트를 구현 할때 일관성 있는 상태 관리가 필요하다.

ex) 에그리거트는 여러 객체를 관리하는 복잡한 시스템이므로, 객체들의 상태를 일관성 있게 관리해야 한다.

이를 위해서 에그리거트의 상태를 변경하는 메소드는 일반적으로 하나의 트랜잭션(Transaction)안에서 수행되도록 구현하며, 상태 변경중에 문제가 발생하면 롤백(RollBack)하여 이전 상태로 되돌릴 수 있도록 구현한다.

 

 

 

** 3 에그리거트를 구현 할  때에는 적절한 책임과 역할을 부여해야 한다.

ex) 각 객체는 자신이 수행할 책임을 가지고 있으며, 이에 따라 다른 객체와 상호작용하게 된다. 이를 통해서 객체간의 의존성을 최소화하고, 유지보수성을 높이는 것이 중요하다.

 

 

 

** 4. 에그리거트를 구현할 때는 테스트 코드를 작성하는 것이 중요하다.

ex) 에그리거트는 여러 객체가 복잡하게 상호작용하는 시스템이므로, 이를 효과적으로 테스트하는 것이 중요하다.

테스트 코드를 작성해서 에그리거트의 기능을 검증하고, 에러를 사전에 방지하는것이 좋다. 

 

 

 

 

 

Aggregate (에그리거트)의 장단점

장점:

1. 에그리거트는 여러 객체를 관리하는 복잡한 시스템에서 유용하다

- 에그리거트를 사용하면 객체간의 의존성을 최소화 할 수 있으며, 일관성 있는 상태 관리가 가능하게 된다.

 

2. 코드의 가독성과 유지보수성이 향상된다.

- 에그리거트는 비즈니스 로직을 구현하는데 필요한 객체들을 모아 처리하기 때문에 코드의 가독성과 유지 보수성이 향상된다.

 

 

단점:

1. 에그리거트를 사용하는 경우에는 객체 간의 상호작용이 복잡해질 수 있다.

- 상호작용이 복잡해져 디버깅이 어려워지고, 성능 저하가 발생할 수 있다.

 

2. 만약 에그리거트가 너무 크거나 복잡한 경우에는 유지보수가 어려워질 수 있다.

 

 

 

총 정리

에그리거트는 소프트웨어 개발에서 중요한 개념 중 하나다.

 

에그리거트를 사용하면 여러 객체를 효과적으로 관리할 수 있고, 로직을 구현하는데 필요한 객체를 모아서  처리할 수 있게 된다. 하지만, 에그리거트를 사용할 때에는 객체 간의 상호작용이 복잡해지는 점과, 유지보수성에 대한 고려가 필요하다. 따라서, 에그리거트를 구현할 때에는 적절한 책임과 역할을 부여하고, 일관성 있는 상태 관리와 효과적인 테스트 코드를 고려해야 한다.

 

 

 

 

+ 플러스 정리!

에그리거트는 이벤트 소싱(Event sourcing)과 함께 사용될 수도 있다.

이벤트 소싱은 변경 이력을 이벤트로 저장하고, 이벤트를 재생하여 현재 상태를 유추하는 방식의 데이터 저장 방법이다. 에그리거트와 이벤트 소싱을 함께 사용하면, 변경 이력을 쉽게 추적할 수  있으며, 장애 발생시 롤백이 용이해진다.

 

 

객체지향 프로그래밍에서 매우 중요한 개념이니 유지보수와, 가독성을 위해서(물론 야근 안 하기위해서 &^^) 오늘 정리한 내용 잊지말고 다음에는 코드로 작성햏보도록 해야겠다!

 

 

 

댓글