Search

2025-02-17

최종 반환 객체 Record 설계
문제점
Record를 반환할 수 있는 방법은 다음과 같은 방법이 가장 쉽다.
new Record(List<String> field)
하지만 이런 방식의 경우 단점은 다음과 같다.
1.
Record를 완성 이후 검증 작업 필요
2.
RecordParser 측과 FieldParser 측 둘다 Record에 종속성이 발생할 수 있음. 최대한 줄여도 한쪽에는 무조건 생김
가안
RecordBuilderConfig - RecordBuilder - Record
RecordBuilderConfig
build시에 필요한 검증, 변환 등의 함수를 미리 설정
RecordBuilder
이하 Config 측에서 얻은 하나의 객체를 활용하여 List<String> fields 를 받아 Record를 생성하면된다.
RecordParser와 FieldParser측 둘다 RecordBuilder에 의존성이 생김. 즉 Record가 변화해도 크게 변화가 없음.
Config에 저장된 callback로직에 의해 자동 검증이 이루어지기에 따로 할 일이 없음
Record의 무게를 상대적으로 가볍게 유지 가능(getter, setter 외 있을게 없음)
RecordBuilderConfig 옵션
1. validate(Predicate<List<String>> validator) (입력 검증)
2. convert(Function<List<String>, Record<T>> converter) (타입 변환)
3. defaultValues(List<String> defaults) (기본값 설정)
4. skipEmptyFields(boolean skip) (빈 값 제거)
5. buildAfter(Consumer<Record> action) (빌드 후 추가 액션)
6. buildAutomatically(boolean autoBuild) (자동 빌드 옵션)
7. onError(BiConsumer<Exception, List<String>> errorHandler) (예외처리 콜백)
8. skipLine(int count) (skip할 라인 지정)
9. nameLine(int number) (필드 이름이 있는 위치)
10. commentSkip(boolean isSkip) (코멘트 라인을 스킵 결정)