이력서에 해당하는 내용들을 콘솔로 입력받아 해당 내용들을 바탕으로 엑셀파일을 생성해주는 프로그램입니다.
- 경력정보를 가지고있는 클래스
Career
학력정보를 가지고있는 클래스Education
개인정보를 가지고있는 클래스PersonInfo
이러한 정보를 포함하고 있는 통합 객체인UserVO
로 관리되게 됩니다. ResumeView
에 작성된 메서드를ResumeController
에서 호출합니다.ResumeController
에서 호출되고 작성된 내용을 바탕으로, 이력서.xlsx 라는 파일을 생성합니다.
사용자로부터 콘솔로 데이터를 입력받는
view
입니다.
개인정보를 입력받습니다.
사진, 이름, 이메일, 주소, 전화번호, 생일을 입력받습니다.
개인정보를 입력받을 때 사용되는 유효성 검증 메서드입니다.
사진 파일의 경로 및 이름이 유효한지, 생년월일이 유효한 날짜인지를 판별합니다. 정상적이지 않다면 재입력하도록 안내합니다.
날짜의 유효성을 검사합니다.
DateTimeFormatter, LocalDate
를 활용합니다.
학력정보를 입력받습니다.
졸업년도, 학교, 전공, 졸업여부를 공백을 기준으로 입력받습니다.
경력정보를 입력받습니다.
근무기간, 근무처, 담당업무, 근속연수를 공백을 기준으로 입력받습니다.
자기소개서를 입력받습니다.
엔터키가 눌릴때마다 개행(\n) 처리되며, 공백 입력 시 종료 및 이력서 생성이 완료되었다는 문구를 노출합니다.
main함수 및
view
를 호출해 데이터를 입력받고, 이력서 생성 및 엑셀파일 저장이 이루어지는controller
입니다.
view를 호출해 이력서 생성에 필요한 데이터를 모두 입력받습니다.
개인정보 - 학력정보 - 경력정보 - 자기소개서 순으로 호출됩니다.
이력서 시트를 생성하고, 해당 시트에 데이터를 삽입하는 메서드입니다.
이력서 시트 내 기본정보 데이터를 생성해주는 메서드입니다.
이력서 시트 내 학력정보 데이터를 생성해주는 메서드입니다.
이력서 시트 내 경력정보 데이터를 생성해주는 메서드입니다.
사진(이미지)를 생성해주는 메서드입니다.
자기소개 시트를 생성하고, 해당 시트에 자기소개서 내용을 생성하는 메서드입니다.
생성된 이력서를 기반으로 엑셀 파일로 출력하는 메서드입니다.
이력서사진.png
패캠맨
fastcampusman@fastcampus.co.kr
서울특별시
010-1111-1111
1990-01-04
2015 패캠대 컴퓨터공학 졸업
2019 패캠대학원 인공지능 졸업
q
2018.01.01~2020.01.02 패스트캠퍼스 개발 2년
2021.01.01~2019.01.02 패스트파이브 운영 1년
q
자기소개(성장배경)
어렸을 때부터 강인하신 아머지와 자비로우신 어머니 어쩌구
성격의 장단점
긍정적이고 밝은 성격인데 가끔은 외로운 어쩌구
Java 17, poi, IntelliJ, git, sourcetree
최소한의 유효성 검증은 있어야 완성도가 높아질 것이라고 판단되었습니다.
지엽적인 부분은 최소화하고, 커밋컨벤션 30줄에 최대한 맞춰 가능한 선에서 유효성 검증 로직을 추가했습니다.
isValidDate()
메서드에 사용된 내용입니다. LocalDate
를 활용해 날짜 객체로 변환시킨 다음, 객체 생성 시 예외 발생 여부에 따라 유효성을 검증합니다. 생년월일, 근무년도를 입력할때 사용됩니다.
졸업연도는 연도만 입력하고, 허용되는 range가 넓기 때문에 제외했습니다.
// 날짜 유효성 검사 함수
public static boolean isValidDate(LocalDate date) {
try {
// LocalDate 객체를 생성할 때 예외가 발생하지 않으면 유효한 날짜
LocalDate.of(date.getYear(), date.getMonth(), date.getDayOfMonth());
return true;
} catch (java.time.DateTimeException e) {
return false;
}
}
checkPersonalInfo()
메서드에 사용된 로직입니다.
매개변수에 key, value가 있는데, 입력받을 때 생년월일에도 동일하게 해당 메서드를 사용하기 위함입니다.
File
클래스의 isDirectory()
및 exists()
메서드를 활용해 파일의 존재 여부를 판별합니다.
// 사진
if (key.equals("photo")) {
File imageFile = new File(value);
if (imageFile.exists() && !imageFile.isDirectory()) {
return true;
} else {
return false;
}
}
경험 상, 대부분 지원서는 학력정보와 경력정보를 입력할 때 최신 정보가 위로 노출되도록 설계되어있었습니다.
해당 기능을 구현하고자, Comparator
인터페이스를 구현해 시작일자 기준으로 내림차순 처리되도록 로직을 작성했습니다.
경력정보는 날짜를 입력받기 때문에 LocalDate
를 활용했고, 졸업연도는 숫자만 입력받기 때문에 별도의 날짜 객체 처리없이 int화 시켜서 정렬되도록 처리했습니다.
// 경력정보 정렬
Collections.sort(list, new Comparator<Career>() {
@Override
public int compare(Career o1, Career o2) {
// 근무기간을 날짜로 파싱하여 비교
DateTimeFormatter dateFormatter = DateTimeFormatter.ofPattern("yyyy.MM.dd");
LocalDate date1 = LocalDate.parse(o1.getWorkPeriod().split("~")[0], dateFormatter);
LocalDate date2 = LocalDate.parse(o2.getWorkPeriod().split("~")[0], dateFormatter);
// 내림차순 정렬
return date2.compareTo(date1);
}
});
// 학력정보 정렬
Collections.sort(list, new Comparator<Education>() {
@Override
public int compare(Education o1, Education o2) {
int date1 = Integer.parseInt(o1.getGraduationYear());
int date2 = Integer.parseInt(o2.getGraduationYear());
// 내림차순 정렬
return date2 - date1;
}
});
구현은 Career
, Education
, PersonInfo
만으로도 충분합니다.
하지만 논리적으로 미루어보았을 때, 한 사람이 가지고 있는 정보들에 해당합니다.
따라서, 이들을 가지고 있는 통합객체인 UserVO
를 생성 및 관리하였고, 추후 이력서 생성 시에도 해당 객체를 통해 접근하면 되기에, 유지보수 관리가 용이하다고 판단되어 이처럼 설계했습니다.