JAVA · 예외처리
검증 패턴과 Validation
입력 검증을 체계적으로 수행하는 패턴과 에러 수집 전략입니다.
예외처리중급validation검증에러수집Validator
핵심 설명
입력 검증을 체계적으로 수행하는 패턴과 에러 수집 전략입니다.
Java code
import java.util.*;
public class ValidationPattern {
// 검증 결과를 수집하는 패턴
record ValidationResult(boolean valid, List<String> errors) {
static ValidationResult ok() {
return new ValidationResult(true, List.of());
}
static ValidationResult fail(List<String> errors) {
return new ValidationResult(false, List.copyOf(errors));
}
}
// 검증기 합성
interface Validator<T> {
Optional<String> validate(T value);
static <T> ValidationResult validateAll(T value,
List<Validator<T>> validators) {
List<String> errors = validators.stream()
.map(v -> v.validate(value))
.filter(Optional::isPresent)
.map(Optional::get)
.toList();
return errors.isEmpty()
? ValidationResult.ok()
: ValidationResult.fail(errors);
}
}
record UserForm(String name, String email, int age) {}
public static void main(String[] args) {
List<Validator<UserForm>> validators = List.of(
form -> form.name().isBlank()
? Optional.of("이름은 필수입니다") : Optional.empty(),
form -> !form.email().contains("@")
? Optional.of("이메일 형식이 올바르지 않습니다") : Optional.empty(),
form -> form.age() < 0 || form.age() > 150
? Optional.of("나이가 유효하지 않습니다") : Optional.empty()
);
UserForm form = new UserForm("", "invalid", -1);
ValidationResult result = Validator.validateAll(form, validators);
if (!result.valid()) {
result.errors().forEach(e -> System.out.println("- " + e));
}
}
}학습 팁
모든 검증 에러를 수집하면 사용자가 한 번에 수정할 수 있습니다. 첫 번째 에러에서 멈추는 것보다 UX가 좋습니다.
주의할 점
검증 로직을 여러 곳에 분산시키면 일관성이 떨어집니다. 중앙화된 검증기를 만들고 재사용하세요.
자주 묻는 질문
검증 패턴과 Validation란 무엇인가요?
입력 검증을 체계적으로 수행하는 패턴과 에러 수집 전략입니다.
검증 패턴과 Validation 학습 시 주의할 점은 무엇인가요?
검증 로직을 여러 곳에 분산시키면 일관성이 떨어집니다. 중앙화된 검증기를 만들고 재사용하세요.
Continue Learning
Java 학습을 이어가세요
총 200개의 독립 HTML 학습 문서 중 하나입니다. 각 문서는 고유 URL과 canonical 메타데이터를 가집니다.