개발자 성장 일지

2022.03.13 투표 패키지

NEWDODORIPYO 2022. 3. 13. 16:33

투표 패키지를 만들면서 설계도에서 누락된 부분이 있다는 걸 알았습니다 그래서 설계도를 살짝 수정했습니다!! 

바로 투표 Service 가 투표 DAO 뿐 아니라 유권자 DAO와 후보자 DAO 가 필요했었습니다!! 

 

강사님은 말씀하셨죠 처음부터 완벽한 설계는 없다 생각하고 수정해가면서 만드는 거다 그래서 바로 실천해버렸습니다 

 

투표 패키지의 역할은 후보자의 정보와 유권자의 정보를 가지고와서 모아주는 역할을 하고 있습니다!! 

 

투표(Vote) VO 

//한번 만들어지면 값을 바꾸면 안되니 Getter만
@AllArgsConstructor
@Getter
@ToString
public class VoteVO {
    //데이터베이스 방식 설계

    //유권자 데이터
    private Integer voter;
    //후보 데이터
    private Integer candidate;


    //객체 지향적 설계는 원래는 이렇게 불러와야하지만 지금은 데이터베이스 방식으로 정리하기위해 위 방식처럼 불러옴
    //데이터베이스 방식은 식별키를 위주로 설계를 잡기때문에 !!

   // private VoteVO voteVO;
  //  private CandidateVO candidateVO;

 

이번 투표 시스템 설계는 데이터베이스 방식으로 진행한다고 말씀하셨기에 이 투표VO 를 만들 때 객체 지향적 설계가 아닌 식별키를 위주로 하는 데이터 베이스 방식으로 진행했습니다!! 

 

투표(Vote) DAO

public class VoteDAO {
    //ArrayList 선언    타입       이름
    private ArrayList<VoteVO> voArrayList;
  // ArrayList 초기화
    public VoteDAO() {

        voArrayList = new ArrayList<>();
    }
   //voteVO를 Array안에 넣어줌 <배열의 역할> 투표가 들어감
    public void add(VoteVO voteVO) {

        voArrayList.add(voteVO);
    }
   }

이번 투표DAO 에서는 기존에 사용하던 배열 방식이 아닌 ArrayList를 사용했습니다 

기존 배열은 만들어줄 때 크기를 설정하고 만들어 주지만 ArrayList는 int의 크기만큼 자동 생성됩니다 

자세한 사용법은 JAVA 카테고리에서 추가적으로 설명하겠습니다!! 😘

 

투표(Vote) Service

@RequiredArgsConstructor
public class VoteService {

    @NonNull
    private VoterDAO voterDAO;
    @NonNull
    private CandidateDAO candidateDAO;
    @NonNull
    private VoteDAO voteDAO;
   //투표             VoteVO로받을거
    public void vote(VoteVO voteVO) throws Exception {
                            //voteVO 에서 Candidate를 가져온다
        Integer candidate = voteVO.getCandidate();
       //후보자 검열식
        candidateDAO.check(candidate);
                       //voteVO 에서 voter를 가져온다
        Integer voter = voteVO.getVoter();
        //유권자 검열식
        voterDAO.check(voter);
       //투표한적 있는지 검열식
        voteDAO.checkVoter(voter);
       //검열식
        voteDAO.add(voteVO);

    }

}

후보자 검열식 로직은 구현화했지만 이번 강의 동안은 다른 로직의 구현은 하지 않으셔서 메서드 이름만 있습니다 ㅠ 

다른 검열식은 공부하면서 직접 만들어 봐야 할 것 같습니다