반응형
곧 전달 받을 코드를 이리 저리 훑어 보다가 아래 형태 코드가 눈에 띄었다.
// someData.getIdList()는 String 타입으로 "id1|id2|id3"과 같은 형식
List<String> idList = Arrays.stream(someData.getIdList().split("[|]"))
.collect(Collectors.toList());
split("[|]") 문자열로 검색해 보니 7 군데에서 완전 똑같은 형태의 코드를 사용하고 있다. 중복이 3번 이상 나고 있어서 이를 위한 보조 클래스 Splits을 만들었다.
public class Splits {
public static List<String> splitByVbar(String str) {
return Arrays.asList(str.split("[|]"));
}
}
그리고 검색한 7 곳의 코드를 다음과 같이 바꿨다.
List<String> idList = Splits.splitByVbar(someData.getIdList().split("[|]"));
테스트 코드가 없어서 Splits.splitByVbar()를 사용하는 코드는 테스트를 할 수 없었다. 대신 기존의 분리 코드와 새 분리 코드가 같은 결과를 내는지 확인하는 테스트 코드를 작성했다.
@Test
void same() {
assertThat(Splits.splitByVbar("1|2|3")).isEqualTo(oldSplitCode("1|2|3"));
assertThat(Splits.splitByVbar("1|2|3|")).isEqualTo(oldSplitCode("1|2|3|"));
assertThat(Splits.splitByVbar("|1|2|3|")).isEqualTo(oldSplitCode("|1|2|3"));
assertThat(Splits.splitByVbar("1|2||3")).isEqualTo(oldSplitCode("1|2||3"));
}
private List<String> oldSplitCode(String str) {
return Arrays.stream(str.split("[|]")).collect(Collectors.toList());
}
통과 됨을 확인하고 코드를 푸시했다.