강의 배운 거를 프로젝트에 적용하고 있는데 궁금한 게 있어요!
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()는 유틸 클래스로 분리할 것 같네요.
감사합니다. 🙂
[강의 질문] 메서드 선언부
0
90
1
[강의 질문] 메서드와 추상화
0
61
2
DIP 개념에 대한 질문입니다.
0
64
1
만약 보드를 이용한 게임의 종류가 더 다양해진다면 어떻게 될 수 있을지에 대한 고민
0
86
2
DIP 설명 후반부에 IOC에 대한 질문 드립니다.
0
79
2
안녕하세요 ! 혹시 자바가 아닌 다른 객체지향 언어를 알고있어도 강의를 들어도 괜찮을까요 ?!
0
71
1
안녕하세요 메서드명 때문에 고민이 있어서 질문드립니다.
1
64
2
자바 record 사용에 대해서 질문 드립니다!
0
128
2
강의 내용 정리 및 자료 제작 툴 문의 드립니다.
0
136
2
사용할 변수 가깝게 선언하기 질문
0
93
1
오버 엔지니어링
0
150
2
학습용 java/spring 오픈소스 추천
1
368
2
중복된 메서드 줄이는 방법
0
184
2
MarketPlace에서 Sonarlint 검색이 안됩니다.
0
417
3
isLandMineCell() 메서드 질문
0
209
1
Cell[][]BOARD 매개변수받기
0
153
2
ConsoleInputHandler에서 왜 final붙여야 하는지
0
193
1
정적 생성자 메서드 of, from
0
265
2
Getter관해서
0
148
3
이름 바꾸기
0
129
2
stack 대신 queue 를 사용해 bfs 로 변경해도 되나요??
0
164
2
현업에서 ISP를 도입하려는데 인터페이스 설계에 있어서 의문이 있습니다.
0
208
2
null을 가질 수 있는 값을 인자로 넘겨야 하는 경우
0
252
3
리팩토링을 하고 난 뒤 다시보면 오히려 더 복잡해 보이는것 같은 느낌입니다..
0
255
2





