본문 바로가기

Java

그냥 한번 생각해보는 글. - 4 -


지난번에 최종적으로 작성된 코드입니다. 

소계까지 만들어 놓은 상태에서 이제는 합계를 구해봐야 할 것입니다.

우리가 최종적으로 view에서 뿌릴 때 쓰려는 객체는
첫번째카테고리별로 그룹핑을 해 놓은 Map<String,ArrayList<OrderInfoDomain>> domainListGroupByFirstCategory    
이 객체는 아닙니다. (물론 이걸 그대로 사용 할 수도 있습니다. 쓰기 나름이죠 뭐..)

저는 그냥 loop를 돌면써 뿌리면 될 수 있게, List<OrderInfoDomain> resultDomainList 이 리스트에다가 위 표의 순서대로 똑같이 도메인 객체를 넣어놓을 생각입니다. 즉,

resultDomainList 여기에는
{합계, 의류-소계, 의류-치마,의류-셔츠, ... , 가전 - 소계, 가전-TV, 가전-냉장고... }

이런 모양으로 아예 list를 만들어 놓으려고 합니다. 그렇게 하면 view에서 그냥 loop를 돌면서
뿌리기만 하면 원하는 표를 그릴 수 있을 것입니다.

지금까지 소계 도메인 객체는 만들었는데 합계 도메인 객체는 만들지 않았습니다.

일단, resultDomainList에 합계를 제외한 다른 객체들을 넣어보겠습니다.
위에서 선언만 하고 아직 구현하지 않은 createResultDomainList 메서드를 구현하려고 합니다.

private void createResultDomainList()

위에서 keySet 객체를 생성 할 때 comparator 인터페이스를 구현해서 생성해주면
원하는 순서대로 첫번째 카테고리의 출력 순서를 조절 할 수 있습니다.

일단, 특별한 정렬을 적용하지 않고..이렇게 하면 resultDomainList에는
{ 의류-소계, 의류-치마,의류-셔츠, ... , 가전 - 소계, 가전-TV, 가전-냉장고... }

이렇게 객체를 가지게 되구요.. 합계가 빠져있는 상태가 됩니다. 합계를 구하는 방법은... 이제 이 resultDomainList를 loop 돌면서, 소계 객체만 꺼내서 앞에서 정의한 @RequiredSum 어노테이션이 붙은 필드에 대해서 더하기를 해준다면 각 필드에 대한 합계를 가지고 있을 수 있게 될 것입니다.

private void sumTotalDomainObject()

이렇게 해주면 이제 resultDomainList는
합계를 포함한 도메인 클래스들을 list를 가질 수 있게 됩니다.

이제 view에서는 이 resultDomainList를 가져다가 loop를 돌면서 표를 그려주면 됩니다.

좌측의 메뉴부분은 이 list를 이용하거나 해서 html이 디자인 되어있는대로 적당히 그려주면 될 것이고요..
rowSpan을 하기 위해 필요한 각 카테고리별 하위 카테고리의 갯수등도 이 StatusTable에서 얼마든지
가져 올 수 있는 정보입니다.

최종적인 StatusTable.java입니다. 이렇게 하면, 쿼리를 이용하지 않고 소계와 합계를 구해서 원하는 표를 그릴 수 있게 됩니다.

그럼 이렇게 하는 것이 어떤 장점이 있을까요

단지 쿼리가 좀 간단해진다? Order by를 적용 할 필요가 없다?
어떤것이 있을까요..


- 계속 -