후보자(Candidate) 메서드의 작성 순은 VO -> DAO -> Service 순으로 진행했습니다
코드를 작성하면서 필요한 정보 기능들은 주석으로 표기했습니다
CandidateVO
@AllArgsConstructor // 생성자
@Getter //읽기 전용이기에 값을 복사만 하는 Getter을 사용
@ToString
public class CandidateVO {
// int 는 기본값이 0 이다 Integer 은 기본값이 null이다
//int 는 기본값이 0 이기에 산술연산이 가능
// Interger은 특별한 작업을 해는것이 아니면 산술연산 불가 기본값이 null이기에
// 인스턴스 variable은 다 private 설정
private Integer cno; //후보자 번호
private String name; // 후보자 이름
}
CandidateDAO
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();
}
}
사실상 후보자(Candidate) 의 모든 정보와 기능 데이터를 가지고 있는 DAO!!
후보자 패키지의 경우는 많은 기능이 필요없고 후보자의 목록을 배열로 저장해 그것을 UI로 보내주기만 하면 됩니다
✨clone는 복제라는 뜻이다 여기서는 보면 메서드 getAll은 리턴 값으로 arr.clone(); 를 리턴해주고 있고 arr.clone(); 는 arr배열을 복제한다 라는 뜻입니다
CandidateService
//후보자 서비스의 기능은 별거없다 사실 후보자의 목록만 보여주면 끝
//NonNull 에 대한 생성자만 생성
@RequiredArgsConstructor
public class CandidateService {
//의존성 주입
//DAO 없이는 아무것도 할수없음
@NonNull
private CandidateDAO candidateDAO;
//candidateDAO에서 데이터 가져오는 역할
//UI에서 DAO의 정보가 필요하니 DAO의 정보를 가지고온것
public CandidateVO[] readAll(){
return candidateDAO.getAll();
}
}
✨Service 의 궁금점!!
처음 Service 를 만들 때 가장 의문은 아니.. 왜 아무 기능도 없는데 굳이 Service를 만들어서 UI와 연결해주는 거지..? 그냥 DAO로 바로 연결하면 안 되는 건가??라는 정말 초보자 다운 생각을 했습니다 그리고 그 해답은 바로 ~
나중에 생길수있는 트랜잭션 같은 상황을 대비해서 미리 만들어둔것 그렇기에 CandidateService는 지금 DAO의 정보를 보여주는 것만 하는 공간이지만 꼭 필요하다 라는 게 답이었습니다 더 다양한 이유가 있겠지만 지금 상황에서는 저렇게만 이해하면 될 것 같습니다 처음 만들었던 설계도를 보면
이곳에서 UI에서 바로 DAO로 가는 즉 중간의 한 부분을 넘어서 접근하는 방식은 좋은 코딩 방식이 아니라고 강사님이 말씀해주셨습니다
'개발자 성장 일지' 카테고리의 다른 글
2022.03.13 투표 패키지 (0) | 2022.03.13 |
---|---|
2022.03.12 투표 유권자 패키지 (0) | 2022.03.12 |
2022.03.12 반성 다짐 그리고 설계 (0) | 2022.03.12 |
2022.03.10. 투표 서비스 < 유권자 패키지> (0) | 2022.03.11 |
2022.03.10 투표 서비스 <설계 그리고 후보자 패키지> (0) | 2022.03.10 |