오늘은 새로운 문법과 기술 등을 활용해서 투표 서비스를 만들어 보기로 했습니다
하암... 기존에 배웠던 것들도 사실 어색한데 엄청난 속도의 진행으로 머리가 터질 것 같네요
하지만 힘내서 달려보겠습니다
우선 가장중요한 설계!!!!

기본적인 설계는 이렇게 했습니다
로직은 후보자 패키지 -> 유권자 패키기 -> 투표 패키지 순으로 진행하려고 합니다
후보자 패키지
후보자 패키지는 후보자라는 뜻을 가진 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 |