2일차에 이어서 수강생 관리 기능에서 구현해야할 요구사항 중 (삭제와 상태별 조회) 부분을 마무리 하기로 하였다. 그 중에 삭제 부분은 팀원분이 담당했고 내가 상태별 조회를 담당해서 진행하였다.
private static void studentBYColor() {
System.out.println("조회할 학생의 상태를 선택하세요 (1: Green, 2: Red, 3: Yellow: )");
int statusChoice = sc.nextInt();
String selectdeColor = "";
switch (statusChoice) {
case 1 -> selectdeColor = "Green";
case 2 -> selectdeColor = "Red";
case 3 -> selectdeColor = "Yellow";
default -> {
System.out.println("잘못된 입력입니다.");
return;
}
}
System.out.println("상태가 " + selectdeColor + "인 수강생 목록");
boolean found = false;
for (Student student : studentStore) {
if (student.getColors().equals(selectdeColor)) {
System.out.println("ID: " + student.getStudentId() + " 이름: " + student.getStudentName());
found = true;
}
if (!found) {
System.out.println("해당 상태의 수강생이 존재하지 않습니다.");
} else {
System.out.println("상태별 수강생 조회 성공");
}
}
}
처음에 위 코드를 작성할 때 for
문을 이용하여 학생의 정보가 담긴 리스트를 순회하면서 입력받은 정보가 상태와 같은지를 판단하여 같으면 입력을 받고 그렇지 않으면 수강생이 존재하지 않다고 출력을 하는 기능을 구현하는 프로그램을 만들었다
git hub
https://github.com/taehyeokNam/studentManagement/commit/c08af113c4cd910f8f3afedfb2a610ca40d2234c
문제 발생
이렇게 기능을 구현하고 실행시켜보니 기존에 등록되어있고 해당 상태에 해당하지 않은 학생이 "해당 상태의 수강생이 존재하지 않습니다"라고 출력되는 현상이 발생하였다. 이러한 문제가 인덱스에 해당하는 객체를 따로 지정해주지 않은 것이 문제라고 생각해 이를 while
문을 사용해서 만들어 주었다.
boolean found = false; // 선택된 상태의 수강생이 존재하는지 추적하기 위해 found 변수를 false로 초기화
int index = 0;
while (index < studentStore.size()) { // 현재 인덱스에 해당하는 student객체를 가져옴
Student student = studentStore.get(index);
if (student.getColors().equals(selectdeColor)) { // 현재 student 객체의 상태가 선택된 상태와 일치하는지 확인
System.out.println("ID: " + student.getStudentId() + " 이름: " + student.getStudentName());
// 일치하는 경우, 수강생의 ID와 이름을 출력
found = true; // 일치하는 수강생이 있다는 것을 알기 위해 true로 설정
}
index++; // 다음 인덱스 이동
}
if (!found) { // 일치하는 수강생을 찾지 못한경우
System.out.println("해당 상태의 수강생이 존재하지 않습니다.");
} else { // 일치하는 수강생을 찾지 못한경우가 아니면 메세지 출력
System.out.println("상태별 수강생 조회 성공");
}
}
}
다음 인덱스로 이동하면서 해당 인덱스에 해당하는 student객체를 가져온 후 현재 student 객체의 상태가 선택된 상태와 일치하는지 확인하고 출력하는 과정을 추가해주었다.
git hub
https://github.com/taehyeokNam/studentManagement/commit/bdcd457aef777eb97b456f2155a262c701dba08e
이제 팀원들이 만든 수강생 관리 클래스와 점수 관리 클래스를 merge
하는 과정을 진행하였다. 이과정에서 코드간의 충돌이 일어날거라고 예상했는데 생각보다 코드간의 충돌은 많지 않았고 쉽게 수정가능한 부분이 많았다. 오히려 build나 gitignore에 관련된 충돌이 일어나서 팀원들과 함께 당황스러웠다. 그래서 해결하기위해서 찾아본 결과 gitignore 세팅을 각자 파일을 만들어서 진행하였는데, gitignore에 있는 파일이 똑같아도 생성을 따로하면 로그값이 달라서 오류가 난다는 것을 배웠다. 그래서 우리는 세팅을 똑같이 만들기로 하였다.
첫 gitignore
새롭게 다같이 세팅한 gitignore
이렇게 다시 세팅을 하고 이 프로그램을 다시 pull로 받아와서 작업을 다시 실행하였다.
pull을 해서 test 브랜치를 가져왔더니 실행버튼이 안되는 오류가 발생하였다
실행 버튼이 클릭이 안되고 이렇게 커피잔 모습으로 파일들이 변해버렸다.
해결 방법
패키지를 우클릭한 후 Mark Directory as에서 Sources Root로 패키지를 변경해주었더니 문제가 해결되었다.
노트
이렇게 양쪽의 기능 구현 클래스들을 만들고 합칠 때 발생한 오류를 해결하는데 정말 많은 시간이 들어서 작업의 진행이 많이 늦어졌다. 그래도 이러한 과정을 해결하면서 배운점은 이 부분에서 처음에 git에 올릴 때 .gitignore와 gradle 버전이 동일하도록 처음에 세팅하고 프로젝트를 진행해야한다는 점을 얻어간 것으로 만족해야겠다. 다음에는 이 프로그램을 합치고 나온 결과를 팀원들과 회의하면서 프로젝트를 마무리 해야겠다.
git hub
https://github.com/taehyeokNam/studentManagement/commit/9011d62c44925c8e31fbd585b55e8e57dc0a0365