개발자 성장 일지

2022.03.10 투표 서비스 <설계 그리고 후보자 패키지>

NEWDODORIPYO 2022. 3. 10. 23:55

오늘은 새로운 문법과 기술 등을 활용해서 투표 서비스를 만들어 보기로 했습니다 

 

하암... 기존에 배웠던 것들도 사실 어색한데 엄청난 속도의 진행으로 머리가 터질 것 같네요 

 

하지만 힘내서 달려보겠습니다 

 

우선 가장중요한 설계!!!!

 

기본적인 설계는 이렇게 했습니다 

 

로직은 후보자 패키지 -> 유권자 패키기 -> 투표 패키지 순으로 진행하려고 합니다 

 

 

후보자 패키지 

 

후보자 패키지는 후보자라는 뜻을 가진 candidate로 진행하려고 합니다 

domain이라는 패키지를 만들어 그곳에 CandidateVO Class를 만들었습니다 여기서 VO는 Value Object를 말합니다 

 

@AllArgsConstructor
@Getter
@ToString
public class CandidateVO {

    //인스턴스 variable은  다 private 설정 
    private Integer cno;
    private String name;

 

인스턴스 variable를 private로 설정한 것은 수정되면 안 되는 정보이기 때문입니다!! 

 

후보자의 번호로 사용될 cno와 후보자의 이름으로 사용될 name를 만들어 주었습니다 

 

이제 다음으로는 사실상  후보자의 정보를 다 가지고 있는 DAO를 만들러 가 보겠습니다

 

  

public class CandidateDAO {
    //CandidateVO 타입의 배열 arr
    private CandidateVO[] arr;
    //배열 초기화 
    public CandidateDAO(){

        arr = new CandidateVO[3];
        arr[0] = new CandidateVO(1,"이재명");
        arr[1] = new CandidateVO(2,"윤석열");
        arr[2] = new CandidateVO(3,"심상정");
    }

    //얕은복사 - 배열을 주는것이 아니고 배열의 복사본만 주는것임
    public CandidateVO[] getAll(){
        return arr.clone();
    }

    //차후 설명 
    public void check(Integer candidate) {

    }
}

private 만들더라도 배열 같은 경우는 손상될 위험이 있어서 "얕은 복사"의 개념인 clone를 사용했습니다 

return으로 arr의 정보를 담고 있습니다. 

 

이제 후보자 패키지의 마지막 Service를 만들어 보겠습니다 

 

//NonNull 에 대한 생성자만 생성
@RequiredArgsConstructor
public class CandidateService {

    //의존성 주입
    @NonNull
    private CandidateDAO candidateDAO;


    //candidateDAO에서 데이터 가져오는 역할
    public CandidateVO[] readAll(){
        return candidateDAO.getAll();
    }

}

 새로 등장한 개념인 @RequiredArgsConstructor과 @NonNull 생긴 건 처음 보지만 그 기능은 단순합니다 NonNull로 지정된 정보는 반듯이 필요하다! 이것이 없으면 안 된다!라는 생성자의 의미랑 똑같다고 보시면 될 것 같습니다 

 

그리고 리턴 값으로 candidateDAO의 getAll을 부르고 있습니다 Service는 DAO의 정보가 없으면 일을 할 수 없는 의존적인 존재입니다 

이렇게 설계를 하면서 작업을 하고 작업한 것을 다시 설계해보면서 내용을 상기해보고 있습니다 코드 자체는 강사님이 작성하시는 걸 보고하기 때문에 항상 강의가 끝난 후에는 이렇게 다시 공부하고 있습니다 어떻게 이렇게 한 번에 설계하시고 로직을 작성하시는지.... 정말 신기합니다.....

'개발자 성장 일지' 카테고리의 다른 글

2022.03.12 반성 다짐 그리고 설계  (0) 2022.03.12
2022.03.10. 투표 서비스 < 유권자 패키지>  (0) 2022.03.11
2022.03.08 수업일지  (0) 2022.03.08
돼지 저금통 만들기  (0) 2022.03.07
2022.03.07 수업 일지  (0) 2022.03.07