코드 짜는 방식을 왜 통일해야 할까?

박화랑·2025년 3월 4일
0

Spring_6기

목록 보기
7/15

1. 코드 스타일 통일성이 중요한 이유

프로젝트를 진행하다 보면 개발자마다 코드를 작성하는 스타일이 다를 수 있습니다.
예를 들어, 어떤 부분에서는 for 문을 사용하고, 어떤 부분에서는 Stream API를 사용하는 경우 코드의 일관성이 깨질 수 있습니다.

이러한 통일되지 않은 코드 스타일은 다음과 같은 문제를 초래할 수 있습니다.

  • 코드 가독성이 낮아짐 → 같은 기능인데도 작성 방식이 다르면 해석하는 데 시간이 오래 걸림
  • 유지보수가 어려움 → 특정 코드가 for 문인지 stream()을 쓰는지에 따라 리팩토링할 때 불편함
  • 팀 내 코드 스타일 불일치 → 여러 개발자가 협업할 때 코드 스타일이 달라 일관성이 깨짐

💡 따라서 코드 스타일을 통일하는 것은 가독성을 높이고 유지보수를 쉽게 하는 중요한 요소입니다.


2. 기존 코드 문제점 – 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를 쓰면 코드가 더 간결해질 수 있음

3. 리팩토링 – 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());
    }
}

4. 리팩토링 후 장점 – 유지보수성 & 가독성 향상

기준변경 전 (for문, while문 혼용)변경 후 (Stream API 적용)
코드 길이더 길고 중복 코드 많음더 간결하고 직관적
가독성여러 스타일 혼합 → 이해 어려움stream() 활용 → 일관성 유지
유지보수성추가 변경 시 반복문 방식에 따라 다름함수형 스타일 유지, 수정 용이

이제 코드가 더 직관적이고 유지보수하기 쉬워졌습니다.
모든 반복문을 Stream API로 일관되게 적용하여 코드 스타일을 통일하였습니다.


5. 결론 – 언제 Stream API를 활용해야 할까?

💡 Stream API를 활용하면 코드 가독성과 유지보수성이 높아집니다.
하지만 모든 경우에 Stream을 사용하는 것이 최선은 아닙니다.

Stream을 활용하기 좋은 경우:

  • 데이터 변환 (mapping, filtering).map(), .filter()
  • 리스트에서 특정 조건을 만족하는 요소 찾기.findFirst()
  • 데이터 정렬 및 그룹화.sorted(), .collect(Collectors.groupingBy())
  • 파일 입출력에서 한 줄씩 처리할 때.lines() 활용

for문이 더 적합한 경우:

  • 단순한 반복문 (Stream보다 가독성이 좋을 때)
  • 인덱스 기반 접근이 필요한 경우 (예: for(int i=0; i<n; i++))

6. 최종 정리

코드 스타일 통일은 유지보수성과 가독성을 높이는 중요한 요소!
반복문 스타일을 맞추는 것만으로도 코드의 일관성이 올라감.
Stream API를 활용하면 더 직관적인 코드 작성 가능.
하지만 모든 경우에 Stream을 사용할 필요는 없으며, 상황에 맞는 선택이 중요.

결론:
반복문을 사용할 때도 코드 스타일을 맞추고, 상황에 따라 최적의 방법을 선택하자!

profile
개발자 희망생

0개의 댓글

관련 채용 정보