```suggestion
private void validateNumber(String rawNumber) {
```
아직 파싱되지 않아서 `number`라고 부르면 조금 위험할 수도 있을 것 같아요.
저는 구분해주기 위해서 `raw`라는 키워드를 붙이는 것을 선호합니다! 참고만 해 주세요 😄
```suggestion
public String[] parseNumbers(String input) {
List<String> delimiters = new ArrayList<>(Arrays.asList(",", ":"));
```
`List`라는 것은 자료형만으로 충분히 파악이 가능해요. 이름을 바꿔 보는 건 어떨까요??
상수화 👍👍👍
상수 이름을 그대로 설명만 하는 주석이라서, 없어도 좋아 보입니다!
```suggestion
private static final String CUSTOM_DELIMITER_PREFIX = "//";
private static final String CUSTOM_DELIMITER_SUFFIX = "\\n";
```
상수화 꼼꼼하게 해주신 것 너무 좋네요!!!
`NEWLINE`은 `"\n"`인데, 지금은 escape 문자를 사용하고 있어서 `NEWLINE`은 아닌 것으로 보이네요.
prefix와 suffix 이름을 맞추면 더 관리하기 쉬워지지 않을까 싶습니다! 👍
```suggestion
private static final String CUSTO...
**입력을 받아 검증**하고 **숫자 배열을 반환**하는 메서드
메서드명은 `validate()`인데 검증 + 파싱 두 가지 역할을 하고 있네요!
해당 메서드를 쓰는 부분에서 파싱이 될 것이라고는 예상하지 못할 것 같아요.
메서드 분리 혹은 메서드명이 길어지더라도 `validateAndParse()` 같이 더 명확하게 이름을 지어 보시면 좋을...
주석 없이도 깔끔하게 코드를 작성하는 연습을 해보시면 어떨까 싶어요!
예를 들면 `if (delimiter.isEmpty())`는 `구분자가 비어 있는지 확인`하는 역할이라는 것이 너무나도 명확해요.
코드를 그대로 설명하는 주석보다는 꼭 필요한 주석만을 사용하면 좋을 것 같습니다!
```java
// 커스텀 구분자 처리 및 검증하는 메서드
...
제 의도는 input, output을 담기 위해 한번 더추상화를 시킨 것입니다.
입력과 출력, 두 개의 책임을 가졌다고 생각할 수 있지만, 큰 틀에서 하나의 화면을 담당하고 있는 책임을 가진 클래스를 의도하였습니다.
그 내부 구현은 책임을 분리하기 위해 inputHandler, OutputHandler로 구분한것이고요!
굳이 Wrapping...
이 메소드에서는 값이 0인지 아닌지만 체크하여 boolean값을 반환하는 정도의 기능만 하는 것이 좋을 것 같습니다!
printResult 메소드를 사용해서 결과값을 출력한다는 것은 곧 프로그램이 종료되어야 함을 의미합니다. 우리가 이 프로그램으로 얻길 원하는 최종 값이 바로 이 결과값이니까요.
그런데 이 최종 결과값의 출력이 단순한 검증 로직에 ...
굉장히 중요한 부분인데요! 클래스 전체에서 delimiterStore를 하나로 공유해야 하는 상황인데, 여러 인스턴스가 생성된다면 데이터 정합성이 맞지 않아서 싱글톤으로 구현했습니다!
static 키워드로 생성하는 방법도 있지만, 그래도 여러 개 인스턴스를 만드는 것은 좋지 않다고 생각해서 싱글톤을 선택했습니다!