개발자 성장 일지

2022.03.12 투표 시스템 후보자

NEWDODORIPYO 2022. 3. 12. 19:47

후보자(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로 가는 즉 중간의 한 부분을 넘어서 접근하는 방식은 좋은 코딩 방식이 아니라고 강사님이 말씀해주셨습니다