본문 바로가기

Java

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


이제 domain 객체 List를 가지고 소계와 합계를 만들어서 새로운 list를 만드는
Table 클래스를 만들어 보겠습니다.

방법은 여러가지가 있을 수 있습니다. 구현하기 나름이니까요..
저 같은 경우는 그냥 예전에 구현했던대로 Dao에서 결과로 받아온 domain 객체 list를 가지고
소계와 합계 domain 객체를 생성해서 list 중간중간에 끼어넣는 형태로 만들어보겠습니다.

상세코드까지 구현하지는 않고 의사코드 정도로 하려고 합니다.

앞에서 dao를 통해 결과를 받아왔습니다.

List<OrderInfoDomain> resultList = dao.getOrderInfoDomainList(); //DB에서 쿼리해온 결과..

그리고 이제 이것을 가지고 Table 클래스가 사용 할 것입니다.

StatusTable.java

이런식이 될 것입니다.

일단 DAO에서 쿼리를 해 받아온 list를 domainList라 하고 새롭게 소계와 합계 domain 객체가 포함되어서 만들어질 list를 resultDomainList라고 했습니다.

DAO에서 받아온 list 중간에 소계와 합계를 끼워넣는 방식이 아니고 DB에서 쿼리해온 domainList를 loop 돌면서 카테고리 별로 소계를 구하고, 합계를 구하면서 resultDomainList에 순서대로 add하는 방식을 사용하려고 합니다. 

소계를 구하기 위해서는
첫번째카테고리별로 그 카테고리에 해당되는 domain 객체의 list를 알고 있어야 합니다.
그래야, 각 카테고리별로 소계를 구할 수 있을테니까요. 그래서 필드를 하나 추가하겠습니다.

protected Map<String,ArrayList<OrderInfoDomain>> domainListGroupByFirstCategory
                                                   = new HashMap<String,ArrayList<OrderInfoDomain>>();

변수명이 좀 길지만..그 자체로 뜻을 최대한 명확하게 표현하고 싶어서 이렇게 했습니다.
개인적으로 변수명을 마구 줄여쓰는 것(ordinfo, ctgrLst 이런식...)을 별로 좋아하지 않습니다..^^;;
이 Map 객체에는 첫번째 카테고리별로 domain 객체 list를 가지고 있게 됩니다.

추가된 소스 (StatusTable.java)

그럼 이제 하나하나 해볼게요.... 저도 이렇게 정리하면서 먼저번에 구현한 내용 중 잘못된 것들을 찾을 수 있을 것 같습니다..
혼자 하는 코드 리뷰...ㅎㅎ

그럼 어떻게 그룹핑을 시킬까요.. 그냥 단순하게 생각했습니다.
loop 돌면서 비교하면 되는거죠..ㅋ

doGrouping()

대략 이런 로직을 가지고 돌아가게 됩니다. (헛점 많은 로직입니다..참고만..)

tempList를 만들어서 하나의 카테고리에 해당되는 domain 객체들을 모아두고
새로운 카테고리가 나오게 되면, 그것을 domainListGroupByFirstCategory에 put 시킵니다.

이때 첫번째소트키를 사용하는 이유는 이 소트키를 가지고 메뉴를 그릴 때 정렬을 시키기 위해서입니다..

앞에서 쿼리를 할 때 소트키에는 카테고리ID나 카테고리이름을 넣어주기로 했기 때문에, 소트키를 사용해도
똑같이 카테고리별로 그룹핑시킨 효과를 가질 수 있습니다..

- 계속 -