예외 처리: try-catch, throws, 사용자 입력 오류 대응
17강. 예외 처리: try-catch, throws, 사용자 입력 오류 대응
1. 이번 강의에서 해결할 문제
사용자가 문자를 점수로 입력하거나 빈 이름을 입력하면 프로그램이 종료될 수 있습니다. 예상 가능한 입력 오류만 가까운 곳에서 처리해야 합니다.
2. 학습 목표
3. 핵심 개념
예외는 정상 흐름과 오류 흐름을 분리합니다. NumberFormatException과 IllegalArgumentException은 RuntimeException 계열이며 호출자가 복구할 수 있는 입력 경계에서 잡습니다. 모든 Exception을 넓게 잡으면 프로그래밍 오류까지 숨길 수 있습니다. throws는 예외 처리 책임이 호출자에게 있음을 선언합니다.
4. 단계별 실습
1. src/SafeInput.java 작성
실행 환경: 코드 편집기
실행 위치: C:\dev\game-records
실행 전 확인: 같은 이름의 기존 파일이 있다면 덮어쓰기 전에 Git diff와 이번 강의 변경 범위를 확인합니다.
대상 파일: src/SafeInput.java
public class SafeInput {
static int parseNonNegativeScore(String text) {
int score = Integer.parseInt(text.trim());
if (score < 0) throw new IllegalArgumentException("점수는 0 이상이어야 합니다.");
return score;
}
public static void main(String[] args) {
String input = args.length > 0 ? args[0] : "not-a-number";
try {
int score = parseNonNegativeScore(input);
System.out.println("저장할 점수: " + score);
} catch (NumberFormatException e) {
System.out.println("정수를 입력하세요: " + input);
} catch (IllegalArgumentException e) {
System.out.println(e.getMessage());
}
}
}
2. PowerShell에서 컴파일·실행
실행 환경: Windows PowerShell
실행 위치: C:\dev\game-records
실행 전 확인: java -version과 javac -version이 선택한 LTS JDK를 가리키고, 소스 파일명이 public 클래스명과 일치하는지 확인합니다.
대상: 이 강의의 .java 파일, out의 class 파일과 명시된 출력 파일
Set-Location C:\dev\game-records
javac -d out .\src\SafeInput.java
java -cp out SafeInput 1200
java -cp out SafeInput wrong
java -cp out SafeInput -5
예상 결과: 정상 점수는 저장 후보로 출력되고 문자와 음수는 각각 명확한 안내로 처리됩니다.
5. 코드가 동작하는 이유
parseInt가 형식 오류를 NumberFormatException으로 알리고 도메인 규칙은 별도 IllegalArgumentException으로 표현합니다. catch를 구분해 사용자에게 다른 해결 방법을 안내합니다.
6. 자주 하는 실수와 해결법
7. 직접 실습
8. 이해 점검 질문 3개
9. 핵심 요약
예외 처리: try-catch, throws, 사용자 입력 오류 대응 미니 퀴즈
선택 즉시 정답과 해설을 확인할 수 있습니다. 결과는 이 브라우저에만 저장됩니다.
학습을 마쳤나요?
직접 실습과 점검 질문까지 확인한 뒤 완료로 표시하세요.