해결된 질문
작성
·
31
0
public class MetricService {
// 생략
private Map<String, Double> parseNetworkUsage(String line) {
Map<String, Double> networkUsageMap = new HashMap<>();
Matcher matcher = NETWORK_PATTERN.matcher(line);
if (matcher.find()) {
String[] parts = line.split("\\s+");
if (parts.length >= 10) {
long receivedBytes = parseLongSafely(parts[RECEIVED_BYTES_INDEX]); // 수신된 바이트
long transmittedBytes = parseLongSafely(parts[TRANSMITTED_BYTES_INDEX]); // 송신된 바이트
networkUsageMap.put(METRIC_MAP_NETWORK_REC, convertBytesToMB(receivedBytes));
networkUsageMap.put(METRIC_MAP_NETWORK_SENT, convertBytesToMB(transmittedBytes));
}
}
return networkUsageMap;
}
private double convertBytesToMB(long bytes) {
return bytes / BYTES_TO_MB_DIVISOR;
}
private long parseLongSafely(String value) {
try {
return Long.parseLong(value);
} catch (NumberFormatException e) {
return 0L;
}
}
}
위는 MetricService 클래스고, 여기에 명령어 결과값을 파라미터로 받아서 네트워크 사용량을 파싱하는 parseNetworkUsage()가 있어요. 그리고 가독성을 위해 추출한 유틸성 메서드인 convertBytesToMB과 parseLongSafely 메서드가 있습니다.
제가 궁금한 거는 convertBytesToMB, parseLongSafely와 같은 유틸성 메서드는 MetricService 클래스 안에 둬야할지 아니면 무조건 유틸 클래스로 빼야하는지 궁금합니다! 재활용이 여러 번 되면 뺄 거 같은데.. 단 한 번만 사용이 되서 유틸 클래스로 빼기도 애매하고, 그렇다고 MetricService 클래스와는 관심사가 다르다고 생각해서 여기둬도 괜찮을까라는 생각이 자꾸 드네요.
답변 1
0
안녕하세요, yg04076 님!
저는 비슷한 상황에서, 사용되는 빈도 보다는 도메인의 역할과 책임, 관심사를 더 중요하게 보고 있는데요.
현재 시점에서 재활용이 되고 있지 않더라도, 관심사와 전혀 다른 유틸성 기능은 유틸 클래스로 분리하는 편이에요.
다만, 미래 시점에도 외부가 아닌 특정 클래스 내에서만 쓰일 가능성이 높다고 판단한다면, 해당 클래스에 private 메서드 정도로 분리하여 두어도 크게 상관 없다고 생각합니다.
저라면, 위 예시 코드에서 convertBytesToMB()는 해당 클래스에, 일반적인 Long에 대해 다루는 parseLongSafely()는 유틸 클래스로 분리할 것 같네요.
감사합니다. 🙂