JAVA 원시값 포장 적용하기

오영선·2024년 5월 23일

실습

목록 보기
11/12

내가 짠 코드에 대해 코드리뷰를 하다가, 함수가 너무 뚱뚱해져서 이 부분 개선이 필요하다는 의견이 나왔다.

약 40줄... 전부 필요한 코드이지만 뚱뚱하긴 하다!!

이렇게 빵빵(?) 해져버린 코드는 코드리뷰처럼 한줄씩 짚고 넘어가지 않으면 코드 이해하기도 어렵고, 개발한 나조차도 내가 적은 기능을 머리싸매고 읽어야 하니..
코드를 한번 고쳐보도록 하자

리뷰중 받은 힌트로는
1. 값을 채워주는 단계를 pre-mid-post로 나누어서 서비스단에서는 stream이나 짧은 한두줄로 끝낼 것
2. 값을 채워주는 List, Map과 같은 객체를 포장할 것

포장..😲❓이라고 하니, 예전 스터디 하던 시절에 그런 개념을 얇게나마 공부했던 것 같은..
일급 컬렉션 알고 적용하자!
헉 정말 했었네..?

그럼 데이터의 상태와 행위를 한 곳에서 관리 할 수 있도록 로직을 다시 살펴보자

public List<객체> 상품 상세정보 조회(){
	//1. 찜한 상품 번호 조회 & 사전준비
    DB에서 상품 seqs 조회
    상품이 있다면 -> 
    	map에 <seq, 상품 객체> 넣어줌
        
   //2. 상품 정보 상세 조회
   DB에서 상품 상세정보 조회(List<> seqs)
   for : 상품들
   		상품객체1 = map.get(seq)
        상품객체1.mapping(상품정보)
   //3. 상품정보 있는 상품들만 순서대로 내리기
   for : map.keySet()
   		null 체크하고
        List<상품객체>에 넣어주기
   return List 
}

개선 과정
1. (1), (2), (3) 패치 메서드를 각각 분리해준다.
2. 결과를 내려주기 위한 객체Response 클래스를 만들고, 필요한 필드를 만든다.
3. 1에서 만든 메서드들을 2에서 만든 객체 안으로 넣어주면 끝‼️
+4. 조금더 간결해보이기 위해 for문 대신 stream을 넣어준다.

개선된 로직은 다음과 같다.

public List<객체> 상품 상세정보 조회(){
	//1. 찜한 상품 번호 조회 & 사전준비
    response객체 생성
    DB에서 상품 seqs 조회
    response.prefetch..(insert)
        
   //2. 상품 정보 상세 조회
   DB에서 상품 상세정보 조회(List<> seqs)
   response.postfetch..(update)
   //3. 상품정보 있는 상품들만 순서대로 내리기
   return response.getValid.. 
}
  1. 테스트 코드 까지 잘 돌아가는지 꼭꼭 확인하기!!


거의 20줄 정도로 줄일 수 있었다. !!

DB 읽어오는 코드도 줄일수 있다면 더 간결해지겠지만, 고것은 다음 기회에 😀..

0개의 댓글