if문으로 예외를 처리하는 것 보다 try-catch문을 더 잘 활용하는 편이 좋을듯하다
try {
result = sc.nextInt();
} catch (Exception e){
System.out.println("값이 잘못되었습니다.");
}
앞서 배웠듯이 try문을 실행하다가 잘못된 값이 들어오게되면 아래는 실행하지않고 catch문으로 넘어간다.
위에서는 result를 정수형으로 받고있는데, 정수가 아닌 다른 타입의 값을 입력한다면 catch문으로 넘어가서 출력문을 뱉어준다
if문은 문제가 생기기 전에 미리 확인해서 예외를 막는 방식이고
try-catch는 이미 발생한 예외를 받아서 처리하는 방식이다
try-catch를 써야 하는 곳:
사용자 입력 예외: sc.nextInt() 처럼 사용자가 문자를 넣을지 숫자를 넣을지 예측할 수 없을 때 (InputMismatchException)
외부 시스템 연동: 파일 읽기/쓰기, 네트워크 통신, DB 조회 등 개발자가 제어할 수 없는 영역 등을 검사할때 사용하자
if문(또는 직접 throw)을 써야 하는 곳:
값의 범위 검사: 입력을 숫자로 잘 받았더라도, 그 숫자가 -1이거나 메뉴 범위를 벗어난 999일 때
상태 검사: cart.isEmpty() 처럼 장바구니가 비어있는지 확인할 때 사용
절대 변하지 않는 값 final
이번 과제에서는 관리자 모드에 들어가는 비밀번호를 3번 틀리면 다시 돌아가야하니까
시도횟수를 final로 설정하는 것이 더 좋았을 것
이넘을 사용해서 코드의 가독성을 높일 수 있다
가령 아래와 같은 코드가 있다고하자
// 1이 주문 완료인지, 결제 완료인지 코드를 다 뒤져봐야 함
if (order.getStatus() == 1) { ... }
// 코드를 읽는 순간 직관적으로 상태를 이해할 수 있음
if (order.getStatus() == OrderStatus.PAYMENT_COMPLETED) { ... }
enum을 사용함으로써 눈으로 봤을때 직관적으로 상태를 이해할 수 있게되었음