티스토리 뷰
함수를 만드는 첫째 규칙은 '작게!'다. 함수를 만드는 둘째 규칙은 '더 작게!'다.
로버트 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
'개발서적' 카테고리의 다른 글
[업무에 바로 쓰는 SQL 튜닝] 2장 인덱스와 뷰 내용 정리 (0) | 2025.01.17 |
---|---|
[CleanCode] 함수 인수 (0) | 2024.08.07 |
[CleanCode] 검색하기 쉬운 이름을 사용하라 (0) | 2024.07.30 |
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- Built-in Functions
- operators
- combinations
- index
- bool
- find
- Lower
- for
- counter
- Python
- zip
- isalpha
- If
- isdigit
- Upper
- Method
- Lambda
- function
- permutations
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함