숫자 야구 미션에서 나는 OutputView나 InputView 같은 View 클래스에서 System.out.println() 메서드를 사용했다.
1
2
3
4
5
6
7
8
9
10
11
12
public class OutputView {
public void startGame() {
System.out.println(GameMessage.GAME_START);
}
/...
public void gameOver() {
System.out.println(GameMessage.CORRECT_MESSAGE);
}
}
이렇게 사용했을 때 미션은 CLI 환경에서 구동되기 때문에 전혀 문제가 발생하지 않는다.
그런데 만약 애플리케이션 구동환경이 웹으로 바뀐다면?
작성한 코드의 모든 System.out.println() 부분이 수정되어야 할 수 있다. 위 코드에서는 단 두 줄 뿐이지만 저런 코드가 많다면?
이 부분을 어떻게 해결할 수 있을까?
해결
그렇다고 현재 미션이 CLI 환경인데 System.out.println() 같은 메서드를 사용하면 안되느냐?
그건 아니다.
물론 현재 위와 같은 상태로 유지해도 당장 발생하는 문제는 없다.
하지만 이러한 연습 과정에서 여러 상황을 가정하고 적용해본다면 도움이 될 것이다.
가장 간단한 방법은 System.out.println() 메서드를 유틸리티 클래스로 만들어 메서드로 포장하는 방법이다.
1
2
3
4
5
public final class ConsolePrinter {
public static void print(String message) {
System.out.println(message);
}
}
1
2
3
4
5
6
7
8
9
10
11
12
public class OutputView {
public void startGame() {
ConsolePrinter.print(GameMessage.GAME_START);
}
/...
public void gameOver() {
ConsolePrinter.print(GameMessage.CORRECT_MESSAGE);
}
}
해결 2
로깅 프레임워크를 사용해보는 것을 고려할 수 있다.
Logback과 같은 로깅 구현과 SLF4J API를 사용해 로깅으로 대체하는 방법이다.
애플리케이션 코드를 수정하지 않고도 다양한 환경에서 실행해야하는 애플리케이션에 대처할 수 있다.
간단한 로그 예시는 아래 포스트에서 볼 수 있다.