개발자 성장 일지

2022.03.10. 투표 서비스 < 유권자 패키지>

NEWDODORIPYO 2022. 3. 11. 00:11

유권자 패키지의 내용물도 후보자 패키지와 동일한 순서로 진행하겠습니다 

 

유권자 패키지는 voter 이란 이름으로 설정했습니다 

 

voter의 domain 즉 VoterVO를 먼저 만들어보겠습니다 

 

@AllArgsConstructor
@Getter
@ToString
public class VoterVO {

    private Integer vno;
    private String name;
}

 후보자 패키지의 VO와 마찬가지로 

@AllargsConstructor (모든 생성자) 

@Getter (읽기전용이기에)

@ToString 

를 lombok를 사용해서 만들어 주었습니다 

 

유권자 번호로 사용할 con 유권자 이름의 name를 만들어주면서 VO는 끝이 났습니다!! 항상 VO는 쉬운데....ㅎㅎ;;

 

VoterDAO

 

public class VoterDAO {
    //VoterVO 타입의 배열 arr
    private VoterVO[] arr;
  //배열 초기화 
    public VoterDAO(){
        arr = new VoterVO[4];
        arr[0]= new VoterVO(1,"홍길동");
        arr[1]= new VoterVO(2,"김두한");
        arr[2]= new VoterVO(3,"시라소니");
        arr[3]= new VoterVO(4,"마동석");

    }
    //vno =식별 / 지금 voter은 읽기 전용이라 안전 그래서 public로 지정
    public VoterVO getOne(Integer vno){
        //retunrn 설정 / 유권자 목록에 없으면 null 표시
        VoterVO result = null;
       //vo.Vno랑 vno가 같으면 투표 가능
        for(VoterVO vo:arr){
            if(vo.getVno()==vno){
                result =vo;
                break;
            }
        } //end for
        return result;
    }
}

유권자를 확인하는 로직까지 들어가면서 조금 복잡해진 모습을 볼 수 있습니다... 지옥은 여기서부터 시작이었던 것 같습니다 

 

VoterService 

import lombok.NonNull;
import lombok.RequiredArgsConstructor;
import voter.dao.VoterDAO;
import voter.domain.VoterVO;

@RequiredArgsConstructor
public class VoterService {
    @NonNull
    private VoterDAO voterDAO;

    //유권자 확인 로직은 UI에게 보내주는 
    public VoterVO readOne(Integer vno) throws Exception{
        VoterVO voter = voterDAO.getOne(vno);
       //vno 값이 null이면 Exception 으로 ui에게 던져줌  readOne를 호출하는 사람<ui>에게 반듯이 null이라는것을 알려주려는것
        if(voter == null){
            throw new RuntimeException("voter is null");
        }
        //null이 아니면 voter 리턴
        return voter;
    }
}

readOne는 유권자 확인 로직에서 null 값이 나왔을 때 UI에게 알려주는 로직입니다 

 

후보자 패키지와 마찬가지고 Service는 DAO에게 의존성을 가진 모습입니다