개발자 성장 일지

2022.03.13 UI & Main

NEWDODORIPYO 2022. 3. 13. 16:49

저는 개인적으로 UI 쪽이 먼가 가장 복잡하게 느껴졌습니다 이번 투표 시스템뿐 아니라 다른 로직을 만들 때도 항상 UI 쪽에서 멍~해졌던 것 같습니다 이번 투표 시스템을 만들 때도 UI를 만들 때 정말.... 많아진 Class 때문에 어디에 머가 있었지.... 이게 무슨 기능이었지... 하면서 머리가 뒤죽박죽이 되어버렸습니다.... 

 

사용자야 UI 들어간다 

 

@RequiredArgsConstructor
public class VoteUI {

    @NonNull
    private VoteService voteService;
    @NonNull
    private VoterService voterService;
    @NonNull
    private CandidateService candidateService;
    @NonNull
    private Scanner scanner;

    public void voteDisplay(){
        System.out.println("후보자들을 봅시다.");
         //배열 불러오기  //readALL 로 모든 후보 불러오기
        Arrays.stream(candidateService.readAll()).forEach(candidateVO -> System.out.println(candidateVO));
       //유권자 번호 받기
        System.out.println("유권자 번호를 입력하세요");
        Integer voterNum = Integer.parseInt(scanner.nextLine());


        try {
           //유권자 확인 try.catch 로 감싸기
            voterService.readOne(voterNum);
        } catch (Exception e) {
            System.out.println("해당번호의 유권자가 없습니다. 다시 확인해 주세요");
            voteDisplay();
        }

        System.out.println("후보 번호를 입력하세요");
        Integer candidateNum = Integer.parseInt(scanner.nextLine());

        //후보자 번호를 확인 기능 필요


       //투표 시스템
        VoteVO voteVO = new VoteVO(voterNum,candidateNum);

        try {

            voteService.vote(voteVO);
            System.out.println("정상적으로 투표가 완료 되었습니다.");

        } catch (Exception e) {
            System.out.println("투표에 문제가 생겼어요 ");
        }


        voteDisplay();
    }

}

우선 UI는 기존에 만들었던 서비스들이 없으면 아무것도 할 수 없기에 의존성 주입으로 만들었던 모든 서비스들을 주입시켜주면서 시작했습니다 

 

그리고 후보자를 불러올 때 forEach와 람다식 정렬을 같이 사용한 부분이 나오는데 람다식은 아직까지는 어떤 식으로 기능하는지 잘 모르겠습니다 이건 좀 더 공부해보면서 눈에 익혀야 할 것 같습니다 😭

 

그리고 이번 UI 에서 가장 중요한 부분은 역시 try catch 인 것 같습니다 마치 if문을 보는듯한 느낌이 들었습니다 try안에 구문이 정상 작동을 하지 못하면 catch 부분으로 넘어가서 사용자에게 메시지를 보여주고 다시 로직으로 재귀 호출을 해주는 모습을 볼 수 있습니다 

 

 

Main

public class Main {

    public static void main(String[] args) {

        CandidateDAO candidateDAO = new CandidateDAO();
        VoterDAO voterDAO = new VoterDAO();
        VoteDAO voteDAO = new VoteDAO();

        CandidateService candidateService = new CandidateService(candidateDAO);
        VoterService voterService = new VoterService(voterDAO);
        VoteService voteService = new VoteService(voterDAO, candidateDAO,voteDAO);

        VoteUI voteUI = new VoteUI(voteService,voterService,candidateService, new Scanner(System.in));

        voteUI.voteDisplay();


    }
}

Main 에서는 기존에 만들었던 모든 것을 의존성 주입을 통해 불러와주면서 이번 투표 로직이 끝이 났습니다! 

 

끝내며..

강의시간에 만들지 못한 부분들도 있기에 아직 이 로직은 완벽하지 못합니다 아니 재기능을 다하고있지도 못하고 있습니다 하지만 이번 투표자 시스템을 기록하며 느낀 것은 자바라는 것을 처음 접한 지 일주일 정도만에 이 정도를 나갔다니....라는 생각이었습니다 솔직히 아직 아는 것보다 이해 못 하고 모르는 것이 더 많은 것 같습니다 하지만 앞으로 남은 기간 모르는 만큼 노력해서 다른 분들에게 피해 주지 않는 개발자가 되기 위해 열심히 달려보겠습니다