WTC - 함수 분리

김진성·2024년 11월 5일

WTC

목록 보기
3/6

기능별로 역할을 분리하여 함수(메서드)로 나누는 것이 가독성과 유지보수성을 높이는 중요한 방법이다. 각 함수가 하나의 역할만 수행하도록 분리하면 코드가 훨씬 더 이해하기 쉬워진다.

1. 단계별로 코드 그룹화 (초기화, 처리, 반환)

먼저 각 단계별 작업을 함수로 분리해, 주요 처리processItems 메서드에서 수행하고, 초기화와 결과 반환을 별도의 메서드로 분리한다.

import java.util.ArrayList;
import java.util.List;

public class Example {

    public static void main(String[] args) {
        Example example = new Example();
        List<String> items = List.of("item1", "item2", "item3");
        
        List<String> results = example.processItems(items);
        
        System.out.println("Processed Items: " + results);
    }

    public List<String> processItems(List<String> items) {
        // 초기화 단계 (함수 분리)
        List<String> data = initializeData();
        
        // 주요 로직 처리 단계
        for (String item : items) {
            if (validate(item)) {
                data.add(process(item));
            }
        }

        // 최종 결과 반환
        return finalizeData(data);
    }

    private List<String> initializeData() {
        return new ArrayList<>();
    }

    private boolean validate(String item) {
        return item != null && !item.isEmpty();
    }

    private String process(String item) {
        return "Processed " + item;
    }

    private List<String> finalizeData(List<String> data) {
        // 여기에서 데이터가 가공된 후 반환할 수도 있다.
        return data;
    }
}

2. 논리적 단위로 함수 분리 (유효성 검사와 데이터 처리)

유효성 검사와 데이터 처리도 각각 독립된 함수로 분리하여, processItems 메서드에서 한 번에 이해할 수 있도록 한다.

public List<String> processItems(List<String> items) {
    List<String> results = new ArrayList<>();

    for (String item : items) {
        // 유효성 검사
        if (isValid(item)) {
            // 데이터 처리
            results.add(processItem(item));
        }
    }

    return results;
}

private boolean isValid(String item) {
    return item != null && !item.isEmpty();
}

private String processItem(String item) {
    return "Processed " + item;
}

3. 반복문이나 조건문이 끝나는 지점에 함수로 분리

중첩된 반복문이나 조건문이 복잡해질 경우, 이를 함수로 분리하여 코드의 깊이를 줄인다. 예를 들어, 중첩된 루프에서 내부 루프를 별도의 함수로 만들어 가독성을 높일 수 있다.

public void nestedLoops() {
    for (int i = 0; i < 5; i++) {
        processInnerLoop(i);
    }
}

private void processInnerLoop(int i) {
    for (int j = 0; j < 5; j++) {
        System.out.println("i: " + i + ", j: " + j);
    }
}

4. 의미 있는 구간별로 함수로 분리

각 구간에 의미 있는 이름을 부여하여 함수로 분리하면 주석이 없어도 역할이 명확하게 드러난다.

public void collectAndProcessData(List<String> source) {
    List<String> data = collectData(source);
    processData(data);
}

private List<String> collectData(List<String> source) {
    List<String> data = new ArrayList<>();
    for (String item : source) {
        data.add(item);
    }
    return data;
}

private void processData(List<String> data) {
    for (String item : data) {
        System.out.println("Processing: " + item);
    }
}

5. 과도한 공백 지양: 단위 기능 함수로 분리하여 코드 간결화

함수 분리를 통해 불필요한 공백을 줄이고 코드를 간결하게 유지할 수 있다.

public void calculateAndPrintTotal() {
    int total = calculateTotal();
    printTotal(total);
}

private int calculateTotal() {
    int value = 0;
    for (int i = 0; i < 10; i++) {
        value += i;
    }
    return value;
}

private void printTotal(int total) {
    System.out.println("Total: " + total);
}

6. 일관성 있는 함수 분리 및 공백 사용

팀의 컨벤션에 맞춰 함수 정의와 본문에 일관성을 유지하고, 필요할 때마다 함수를 독립적으로 분리하여 코드 가독성을 높인다.

public int add(int a, int b) {
    return a + b;
}

public void printSum() {
    int result = add(3, 5);
    System.out.println("Sum: " + result);
}
profile
minimalist

0개의 댓글