개발자 성장 일지

2022.03.12 투표 유권자 패키지

NEWDODORIPYO 2022. 3. 12. 20:55

유권자(Voter) 메서드의 작성 순은 VO -> DAO -> Service 순으로 진행했습니다

코드를 작성하면서 필요한 정보 기능들은 주석으로 표기했습니다 

 

VoterVO

 

@AllArgsConstructor //생성자
@Getter //읽기 전용이기에 값을 복사만 하는 Getter을 사용
@ToString
public class VoterVO {

    // int 는 기본값이 0 이다 Integer 은 기본값이 null이다
    //int 는 기본값이 0 이기에 산술연산이 가능
    // Interger은 특별한 작업을 해는것이 아니면 산술연산 불가 기본값이 null이기에
    // 인스턴스 variable은  다 private 설정
    private Integer vno; //유권자 번호 이 번호는 사실 주민번호의 역할이다
    private String name;  // 유권자 이름

}

VO의 경우는 후보자 패키지와의 차이점이 별로 없다 

 

VoterDAO

public class VoterDAO {
    // 유권자를 배열로 정리해서 만들어주기위해 VoterVO타입의 배열 생성
    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,"이길동");
    }

    //식별번호를 확인해서 정보 전달해주기
    //특정 식별번호의 데이터를 찾아주는 기능
    //지금 Voter은 읽기 전용이라 publci를 해줘도 안전
    // vno 를 파라미터로 vno=식별번호
    public VoterVO getOne(Integer vno){
        //리턴 타입을 먼저 선언
        VoterVO result = null;

        //같은 사람을 체크했을때 없으면 result 값이 계속 null로 반환됨 그럼 서비스에서는 null을 확인할수있다 그리고 ui로 다시 전달한다
        for (VoterVO vo:arr) {
               //배열의 vno   //여기서 vno는 파라미터로 받은 vno
            if(vo.getVno() == vno){
                result = vo;
                break;
            }
        }

        return result;
    }

유권자 DAO 의 역할은 후보자 DAO의 역할과는 다르다 

유권자 DAO는 유권자의 목록뿐 아니라 
" 내 번호가 몇번이에요 라고 이야기해주면 당신은 누구이군요? 투표가 가능합니다 " 
<해당 번호에 유권자가 있느냐 없느냐를 반환해줘야 함 > 

 

VoterService

//NonNull 에 대한 생성자만 생성
@RequiredArgsConstructor
public class VoterService {
     //DAO가 없으면 아무것도 못함 <의존성>
    @NonNull
    private VoterDAO voterDAO;
    //VotreVO의 정보를 DAO를 거쳐서 전달해주기
    //VotreVO를 반환해주는 readOne
    //throws 는 던진다 즉 이걸 호출하는 곳에서 반듯이 알았으면 좋겠어!! 를 위해 예외로 던지는것
    public VoterVO readOne(Integer vno)throws Exception{
        //voter은 voterDAO의 getOne(vno) 를 가르킨다
        VoterVO voter = voterDAO.getOne(vno);
        //유권자의 정보가 없으면 null 로 나오는데 그런 상황을 UI로 전달해주기위해
        //voter 이 null 일때 UI에 이 사람은 없어요! 하고 알려주는 용도
        if(voter == null){
           //이걸 받는 UI에게 반듯이 이건 알아줘~ 를 위해 throw를 사용해서 예외 처리를함
            throw new Exception("Voter is null");
        }

        return voter;
    }

}

DAO에서 만들었던 메소드 getOne (유권자의 정보를 확인하고 해당 유권자가 없는 사람이면 null를 반환해줌)을 UI로 전달해주는 기능을 담당한 Service 사용자의 값이 null을 가리키면 UI에게 Service는 사용자가 없어요~ 하고 알려주게 된다 그 기능을 readOne가 해준다 

throws Exception

여기서 throws Exception 이라는 기능을 처음 접해보았는데 이것은?

 

throws Exception ->지금 이 메서드를 호출하는 쪽에 예외 처리하는 것 (이것은 반듯이 알아줘~ 하는 것) 

 

이걸로 써 1차 도메인의 패키지는 끝이 났습니다