오늘부터 팀 프로젝트를 시작했다.
팀 프로젝트의 주제는 수강생 관리 프로그램이다.
오전은 요구사항을 정리하고 메소드 접근법, 예상되는 예외, 데이터의 구조에 대해 이야기하고 결정했으며, 다이어그램을 통해 메소드간 연관성을 파악했다.

대략적으로 프로젝트의 요구사항을 정리하자면 다음과 같다.
1. 수강생 (고유 번호, 이름, 과목 목록)
2. 점수 (과목 고유 번호, 수강생 고유 번호, 회차, 점수, 등급)
3. 과목 (고유 번호, 과목명, 과목타입)
를 통해 CRUD를 구현하라.
오늘 내가 제시한 내용은 다음과 같다.
1. 모든 모델이 고유 번호를 통해 관리되기 때문에 Map구조로 접근해야한다.
2. 접수의 경우 수강생 고유 번호에 종속되나, 회차,점수,등급은 과목 고유 번호에 의해 제어되기 때문에 중첩된 Map으로 접근해야한다.
3. 클래스 부터 구현을 하는게 좋아보인다.
팀 회의를 통해 1,2를 채택되었고 3은 기각 후 기능 구현을 우선하기로 했다.
내가 담당하게 된 부분은 수강생을 생성하고, 수강생이 선택한 과목을 필수 3개 이상, 선택 2개 이상을 받게 하고, 입력받은 값을 이용해 과목 번호로 변환해 저장하는 것과 특정 수강생의 번호를 입력하면 해당 수강생이 등록한 과목들을 종류별로 출력하는 것이다.
throw를 이용해서 과목 개수 예외, 타 과목종류 예외등등을 처리했으며, 필수+선택 과목이 연속된 숫자로 표현되는데 (1~9) 선택 과목 등록의 편의를 위해 1~5, 1~4로 분리하고, 선택 과목은 입력 +5를 통해 1를 입력받지만 처리는 6으로 하게 함으로 코드 수정량을 줄였다.
이후 Github를 통해 각 기능별 branch에서 add-commit-push를 진행하고, dev branch에 PR를 진행했다.
다만, 모든 기능이 구현이 완료된게 아니라서 2일차 오전에 오류를 파악하고 디버깅을 진행하기로 했다.
우선 사실상 처음 협업인데 프로젝트가 어렵지 않아서 협업에서 발생하는 기술적 문제를 최대한 경험하고 수정하는것에 집중을 해 볼 예정이다. 물론 기능을 최대한 객체 지향스럽게 구현할 예정이다.