요약 - 검증된 사용자
Coddy Java 여정의 객체 지향 프로그래밍 섹션에 포함된 레슨 — 87개 중 63번째.
챌린지
쉬움입력 데이터를 검증하고 사용자 정의 예외를 사용하여 무엇이 잘못되었는지 정확하게 전달하는 완전한 사용자 등록 시스템을 구축해 봅시다! 사용자 정의 checked 및 unchecked 예외, 예외 계층 구조, 그리고 auto-closeable 검증기를 사용한 try-with-resources 등 이번 장에서 배운 모든 내용을 결합하게 됩니다.
코드는 다음 다섯 개의 파일로 구성됩니다:
ValidationException.java: 모든 검증 오류의 기반이 되는 checked 예외를 생성합니다. 이 예외는Exception을 상속받아야 하며 메시지를 인자로 받는 생성자를 포함해야 합니다.InvalidUsernameException.java: 사용자 이름 검증 실패를 위한 checked 예외를 생성합니다. 이 클래스는ValidationException클래스를 상속받아 작은 예외 계층 구조를 형성해야 합니다. 메시지를 인자로 받아 부모 클래스에 전달하는 생성자를 포함하세요.InvalidAgeException.java: 연령 관련 오류(프로그래밍 오류를 나타내는 음수 연령 등)를 위한 unchecked 예외를 생성합니다. 이 클래스는 메시지를 인자로 받는 생성자와 함께RuntimeException을 상속받아야 합니다.UserValidator.java: 적절하게 닫혀야 하는 검증 세션을 시뮬레이션하기 위해AutoCloseable을 구현하는 클래스를 생성합니다. 검증기는 다음을 수행해야 합니다:생성자에서
Validator session started를 출력합니다.사용자 이름이 null이거나, 비어 있거나, 3자 미만인 경우
InvalidUsernameException을 던지는validateUsername(String username)메서드를 작성합니다 (메시지는"Username must be at least 3 characters"). 그렇지 않으면Username '[username]' is valid를 출력합니다.연령이 음수인 경우
InvalidAgeException을 던지는validateAge(int age)메서드를 작성합니다 (메시지는"Age cannot be negative: [age]"). 연령이 13세 미만인 경우ValidationException을 던집니다 (메시지는"Must be at least 13 years old"). 그렇지 않으면Age [age] is valid를 출력합니다.Validator session closed를 출력하도록close()를 구현합니다.Main.java: 검증 시스템을 하나로 합칩니다! 사용자 이름(String)과 연령(integer) 두 개의 입력을 받게 됩니다.try-with-resources를 사용하여
UserValidator를 생성합니다. try 블록 내부에서 먼저 사용자 이름을 검증한 다음 연령을 검증합니다. 둘 다 통과하면User registration successful!을 출력합니다.InvalidUsernameException을 catch하여Username error: [message]를 출력합니다.InvalidAgeException을 catch하여Age error: [message]를 출력합니다. 부모 클래스인ValidationException을 catch하여Validation error: [message]를 출력합니다.검증의 성공 여부와 관계없이 검증기는 자동으로 닫혀야 합니다!
사용자 이름(String)과 연령(integer) 순서대로 두 개의 입력을 받게 됩니다.
이 챌린지는 이번 장 전체를 아우릅니다. ValidationException을 부모로 하는 예외 계층 구조를 구축하고, checked 및 unchecked 예외를 적절하게 사용하며, try-with-resources를 통해 검증기 리소스가 항상 정리되도록 보장합니다. 자식 클래스인 InvalidUsernameException 다음에 부모 클래스인 ValidationException을 catch함으로써, 다른 검증 오류를 처리하면서도 특정 사례를 먼저 처리하는 방법을 확인해 보세요!
직접 해보기
import java.util.Scanner;
class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
// 입력 읽기
String username = scanner.nextLine();
int age = scanner.nextInt();
// TODO: try-with-resources를 사용하여 UserValidator 생성하기
// try 블록 내부에서:
// 1. username 유효성 검사
// 2. age 유효성 검사
// 3. 둘 다 통과하면, "User registration successful!" 출력
// TODO: InvalidUsernameException을 catch하고 "Username error: [message]" 출력
// TODO: InvalidAgeException을 catch하고 "Age error: [message]" 출력
// TODO: ValidationException (부모)을 catch하고 "Validation error: [message]" 출력
// Note: validator는 성공 여부와 관계없이 자동으로 닫혀야 합니다!
}
}
객체 지향 프로그래밍의 모든 레슨
4상속
상속의 기초 (extends)super 키워드메서드 오버라이딩 (@Override)생성자 체이닝Object 클래스단일 및 다중 레벨 상속다중 클래스 상속이 불가능한 이유요약 - 직원 계층 구조