FireDrago
[좌표계산기] 사용자 입력에 관한 생각정리 본문
1. 입력객체에서 도메인을 생성해도 될까?
좌표계산기 미션에서 Point 객체가 기본 도메인이 된다. 그런데 Point 객체를 InputView 클래스에서 생성해도 될까?
내가 내린 결론은 '안된다'
우선 View 클래스는 테스트코드 작성이 어렵다. 콘솔에 메시지를 출력하는 코드를 어떻게 테스트 해야하나;; 그렇기 때문에 InputView든 ResultView든 최대한 간결하게 작성되어야 한다.
두번째로 MVC의 원칙에서 View는 Domain과 의존성을 가져서는 안된다. 즉 View는 비지니스 로직의 존재를 몰라야 한다. 그렇다면, 컨트롤러에서 도메인 객체를 생성해야 할까? 컨트롤러의 책임이 과중해지는건 아닐까? Point 객체생성을 담당하는 클래스(FigureFactory)를 분리해주면 해결할 수 있다. 컨트롤러는 호출만 담당하기 때문에 호출 코드만 한 줄 늘어날 뿐이다.
2. Input 단계에서 유효성검사를 깔끔하게 처리하는 방법
재귀를 활용하면 유효성검사가 완료될때까지 입력값을 받도록 만들 수 있다. 코드부터 살펴보자
public class InputView {
public static final String COORDINATES_REQUEST_MESSAGE = "좌표를 입력하세요.";
//입력을 요청하고, 입력받은 값을 같은 이름의 메서드 인자로 넘김
public static String requestCoordinates() {
System.out.println(COORDINATES_REQUEST_MESSAGE);
return requestCoordinates(new Scanner(System.in).nextLine());
}
// 예외를 던지는 유효성검사 클래스(InputValidate) 호출, 예외발생시 다시 입력요청
private static String requestCoordinates(String input) {
try {
InputValidate.validateInput(input);
} catch (IllegalArgumentException e) {
System.out.println(e.getMessage());
requestCoordinates();
}
return input;
}
}
InputValidate 에서는 유효성검사를 실시하고 예외를 던진다. 예외발생 유형에따라 예외 메세지를 써준다.
InputValidate 에서 예외를 던지는 경우 입력을 다시요청하고, 유효성검사를 통과할경우에만 입력값을 반환한다.
재귀를 활용하여 유효한 값이 입력될때까지 반복하는 유용한 방법이다. 기억하자
'자바 플레이그라운드' 카테고리의 다른 글
| 치지직 api (0) | 2025.12.29 |
|---|---|
| [java] null 유효성 검사는 제일 먼저 (0) | 2023.08.27 |
| [좌표 계산기] 정규표현식의 강력함 (0) | 2023.08.16 |
| 숫자야구게임 후기 (0) | 2023.07.29 |
