프로젝트를 진행하다 보면 개발자마다 코드를 작성하는 스타일이 다를 수 있습니다.
예를 들어, 어떤 부분에서는 for
문을 사용하고, 어떤 부분에서는 Stream API
를 사용하는 경우 코드의 일관성이 깨질 수 있습니다.
이러한 통일되지 않은 코드 스타일은 다음과 같은 문제를 초래할 수 있습니다.
for
문인지 stream()
을 쓰는지에 따라 리팩토링할 때 불편함 💡 따라서 코드 스타일을 통일하는 것은 가독성을 높이고 유지보수를 쉽게 하는 중요한 요소입니다.
for
문과 Stream API
혼용기존에는 일부는 for
문을 사용하고, 일부는 Stream API
를 사용하여 코드가 혼재되어 있었습니다.
// 기존 for문 기반의 파일 저장 방식
public void saveResultsToFile() {
try (BufferedWriter writer = new BufferedWriter(new FileWriter(FILE_PATH))) {
for (Double result : results) {
writer.write(result.toString());
writer.newLine();
}
} catch (IOException e) {
System.out.println("⚠ 연산 결과 저장 중 오류 발생: " + e.getMessage());
}
}
// 기존 while문 기반의 파일 읽기 방식
private void loadResultsFromFile() {
File file = new File(FILE_PATH);
if (!file.exists()) return;
try (BufferedReader reader = new BufferedReader(new FileReader(FILE_PATH))) {
String line;
while ((line = reader.readLine()) != null) {
try {
results.add(Double.parseDouble(line));
} catch (NumberFormatException e) {
System.out.println("⚠ 잘못된 데이터 형식: " + line);
}
}
} catch (IOException e) {
System.out.println("⚠ 연산 결과 불러오기 중 오류 발생: " + e.getMessage());
}
}
문제점:
for
문과 while
문이 혼용됨) Stream API
를 활용하여 더 직관적인 코드 작성 가능) Stream API
를 쓰면 코드가 더 간결해질 수 있음 Stream API
로 코드 통일하기코드 스타일을 통일하기 위해 모든 반복문을 Stream API
로 변경하였습니다.
Stream API
적용// ✅ Stream API를 활용한 파일 저장 방식
public void saveResultsToFile() {
try (BufferedWriter writer = new BufferedWriter(new FileWriter(FILE_PATH))) {
results.forEach(result -> {
try {
writer.write(result.toString());
writer.newLine();
} catch (IOException e) {
System.out.println("⚠ 연산 결과 저장 중 오류 발생: " + e.getMessage());
}
});
} catch (IOException e) {
System.out.println("⚠ 연산 결과 저장 중 오류 발생: " + e.getMessage());
}
}
// ✅ Stream API를 활용한 파일 읽기 방식
private void loadResultsFromFile() {
File file = new File(FILE_PATH);
if (!file.exists()) return;
try (BufferedReader reader = new BufferedReader(new FileReader(FILE_PATH))) {
results = reader.lines()
.map(line -> {
try {
return Double.parseDouble(line);
} catch (NumberFormatException e) {
System.out.println("⚠ 잘못된 데이터 형식: " + line);
return null;
}
})
.filter(value -> value != null)
.collect(Collectors.toList());
} catch (IOException e) {
System.out.println("⚠ 연산 결과 불러오기 중 오류 발생: " + e.getMessage());
}
}
기준 | 변경 전 (for문, while문 혼용) | 변경 후 (Stream API 적용) |
---|---|---|
코드 길이 | 더 길고 중복 코드 많음 | 더 간결하고 직관적 |
가독성 | 여러 스타일 혼합 → 이해 어려움 | stream() 활용 → 일관성 유지 |
유지보수성 | 추가 변경 시 반복문 방식에 따라 다름 | 함수형 스타일 유지, 수정 용이 |
✅ 이제 코드가 더 직관적이고 유지보수하기 쉬워졌습니다.
✅ 모든 반복문을 Stream API
로 일관되게 적용하여 코드 스타일을 통일하였습니다.
Stream API
를 활용해야 할까?💡 Stream API
를 활용하면 코드 가독성과 유지보수성이 높아집니다.
하지만 모든 경우에 Stream
을 사용하는 것이 최선은 아닙니다.
Stream을 활용하기 좋은 경우:
.map()
, .filter()
.findFirst()
.sorted()
, .collect(Collectors.groupingBy())
.lines()
활용 for문이 더 적합한 경우:
for(int i=0; i<n; i++)
) ✅ 코드 스타일 통일은 유지보수성과 가독성을 높이는 중요한 요소!
✅ 반복문 스타일을 맞추는 것만으로도 코드의 일관성이 올라감.
✅ Stream API
를 활용하면 더 직관적인 코드 작성 가능.
✅ 하지만 모든 경우에 Stream
을 사용할 필요는 없으며, 상황에 맞는 선택이 중요.
결론:
반복문을 사용할 때도 코드 스타일을 맞추고, 상황에 따라 최적의 방법을 선택하자!