Project#10 _ OTT Program (마무리 단계)
#1 개행문자로 인한 오류
public String inputId() {
String id;
if (sc.hasNextLine()) {
sc.nextLine(); // 개행문자 제거
}
while (true) {
System.out.print("아이디를 입력해주세요 (0 : 뒤로가기)>> ");
id = sc.nextLine().trim(); // 공백 제거
if (id.isEmpty()) {
System.out.println("❌ 아이디는 공백일 수 없습니다!");
} else if (id.contains(" ")) {
System.out.println("❌ 아이디에 띄어쓰기는 불가능합니다!");
} else if(id.equals("0")) {
System.out.println("❌ 아이디를 '0' 으로 만들 수는 없습니다!");
}
else {
return id;
}
}
}
- if(sc.hasNextLine() 문이 없을 경우, 아이디를 입력하기 전에 빈칸을 이미 입력한 것으로 인식하여, if(id.isEmpty() 문이 바로 실행이 되어버림.
- 해결하기 위해, while 반복문을 돌리기 전 개행문자를 제거하는 코드를 삽입하여 개행문자를 제거하고 정상적으로 ID를 입력받을 수 있게 됨.
- 개행문자를 제거해야하는 이유는, 이전에 sc.nextInt() 메서드를 사용할 경우 이전에 입력한 정수만 가져가고 그 다음에 \n은 그대로 두고 가버리기 때문에 발생함.
#2 ID와 PW 생성
else if(id.equals("0")) {
System.out.println("❌ 아이디를 '0' 으로 만들 수는 없습니다!");
}
위 코드 내용을 볼 때, 입력받은 값이 0 이라면 값을 리턴하지 않도록 하여, 모든 입력문에서 0은 뒤로가기로 설계하였기 때문에, 0을 제외한 아이디나 비밀번호를 생성하도록 유도
#3 각 메서드 유효성 검사 범위
public int inputMovieChoiceNum(ArrayList<MovieDTO> movies) {
while (true) {
System.out.print("번호를 선택해주세요 (0 : 뒤로가기) >> ");
int num;
try {
num = sc.nextInt();
sc.nextLine(); // 버퍼 비우기
if (num > 0 && num <= movies.size()) {
return num;
} else {
System.out.println("❌ 등록되지 않은 영상입니다.");
}
} catch (Exception e) {
sc.nextLine();
System.out.println("❌ 숫자로 입력해주세요.");
}
}
}
기존에는 View에 있는 파트에서 0을 입력하지 못하도록 유효성 검사를 하였는데, 오늘 팀원들과 회의를 하면서 View 파트에서는 해당 유효성 검사를 하지 않기로 결정, 이유는 View파트에서의 유효성 검사는 범위를 지정해주는 역할만 해도 충분하다고 생각하여 특정 값에 대한 유효성 검사는 하지 않기로 하여, 해당 코드를 삭제함