티스토리 뷰

함수를 만드는 첫째 규칙은 '작게!'다. 함수를 만드는 둘째 규칙은  '더 작게!'다.

로버트 C. 마틴, 《클린코드》, 박재호·이해영 옮김, 인사이트, 2013, 42쪽

 

함수를 작게 만드는 것은 소프트웨어 개발에서 중요한 원칙 중 하나입니다. 함수가 작고 명확하게 설계되면 여러 가지 이점을 제공합니다. 그 이유를 다음과 같이 정리했습니다.

 

1. 단일 책임 원칙 (SRP)

  • 명확한 책임: 작은 함수는 단일 책임 원칙을 따릅니다. 즉, 함수가 하나의 명확한 작업만 수행하므로 함수의 목적이 명확해집니다.
  • 가독성 향상: 코드의 목적이 분명하여 읽기 쉽고 이해하기 쉬워집니다.

2. 가독성

  • 코드 이해 용이: 작은 함수는 코드의 논리를 더 쉽게 이해할 수 있게 해 줍니다. 함수가 작으면, 각 함수의 동작을 한눈에 파악할 수 있습니다.
  • 코드 흐름 추적: 코드의 흐름을 추적하기가 쉬워지고, 프로그램의 동작을 이해하기 더 간편해집니다.

3. 유지보수

  • 변경 용이: 함수가 작고 단일 책임을 가지면, 수정이 필요할 때 영향을 받는 부분이 적어집니다. 따라서 코드의 다른 부분을 변경하지 않고도 필요한 부분만 수정할 수 있습니다.
  • 버그 수정: 작은 함수는 디버깅과 테스트가 더 쉽기 때문에, 버그를 찾고 수정하기가 용이합니다.

4. 재사용성

  • 모듈화: 작은 함수는 독립적으로 동작하며, 다양한 상황에서 재사용할 수 있습니다. 이는 코드 중복을 줄이고, 여러 곳에서 동일한 기능을 재사용할 수 있게 합니다.
  • 테스트 용이성: 작은 함수는 테스트하기가 쉽습니다. 함수가 단일 책임을 가지므로, 단위 테스트를 통해 해당 기능이 올바르게 동작하는지 검증할 수 있습니다.

5. 구조화된 설계

  • 계층적 구조: 작은 함수는 복잡한 작업을 여러 단계로 나눌 수 있게 해 줍니다. 이를 통해 복잡한 문제를 더 작고 관리하기 쉬운 부분으로 나눌 수 있습니다.
  • 코드 정리: 함수가 작고 명확하면, 코드가 더 잘 조직화되고, 각 함수의 역할이 분명해져서 전체 코드의 구조가 더 깔끔해집니다.

6. 예제

  • 아래는 큰 함수와 작은 함수의 차이를 보여주는 예제입니다.

큰 함수 (복잡하고 이해하기 어려움)

public class OrderProcessor {
    public void processOrder(Order order) {
        // 검증
        if (order == null || order.getItems().isEmpty()) {
            throw new IllegalArgumentException("Invalid order");
        }

        // 총액 계산
        double total = 0.0;
        for (Item item : order.getItems()) {
            total += item.getPrice() * item.getQuantity();
        }

        // 할인 적용
        if (total > 100) {
            total *= 0.9;
        }

        // 결제 처리
        Payment payment = new Payment();
        payment.setAmount(total);
        payment.process();

        // 이메일 전송
        EmailService emailService = new EmailService();
        emailService.sendConfirmation(order.getCustomerEmail(), "Order processed", "Your order has been processed.");
    }
}

작은 함수 (단일 책임 원칙을 따름)

public class OrderProcessor {
    public void processOrder(Order order) {
        validateOrder(order);
        double total = calculateTotal(order);
        double finalAmount = applyDiscount(total);
        processPayment(finalAmount);
        sendConfirmation(order.getCustomerEmail());
    }
    
    // 검증
    private void validateOrder(Order order) {
        if (order == null || order.getItems().isEmpty()) {
            throw new IllegalArgumentException("Invalid order");
        }
    }
    
    // 총액 계산
    private double calculateTotal(Order order) {
        double total = 0.0;
        for (Item item : order.getItems()) {
            total += item.getPrice() * item.getQuantity();
        }
        return total;
    }

    // 할인 적용
    private double applyDiscount(double total) {
        if (total > 100) {
            return total * 0.9;
        }
        return total;
    }

    // 결제 처리
    private void processPayment(double amount) {
        Payment payment = new Payment();
        payment.setAmount(amount);
        payment.process();
    }

    // 이메일 전송
    private void sendConfirmation(String email) {
        EmailService emailService = new EmailService();
        emailService.sendConfirmation(email, "Order processed", "Your order has been processed.");
    }
}

결론

함수를 작게 만들면 코드가 더 명확하고, 유지보수가 쉬워지며, 테스트와 재사용이 용이해집니다. 이는 소프트웨어 품질을 높이고 개발 속도를 향상하는 데 큰 도움이 됩니다.

 

끝.

728x90
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/04   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30
글 보관함