본 글에서는 조건문과 반복문을 최적화하는 방법에 대해 다룬다. 조건문을 호출부로 올리고 반복문을 하위 레벨로 내리는 기법은 코드의 가독성과 유지보수성을 높이는 데 중요한 역할을 한다. 이러한 최적화 기법을 통해 개발자는 더 효율적이고 명확한 코드를 작성할 수 있으며, 이는 소프트웨어의 품질을 향상시키는 데 기여한다.
조건문을 호출부로 올리기
조건문을 함수 내부에 두기보다, 가능한 한 호출부로 이동시키는 것을 의미한다. 이렇게 하면 제어 흐름이 중앙 집중화되어 코드의 복잡성을 줄이고, 중복된 조건 검사를 방지할 수 있다.
조건문 예시
좋은 예:
| |
나쁜 예:
| |
위의 나쁜 예에서는 Walrus 객체가 null인지 확인하는 조건문이 함수 내부에 있다. 하지만 좋은 예처럼 호출부에서 null 체크를 수행하고, 함수는 Walrus 객체만 처리하도록 하면 함수의 책임이 명확해지고, 중복된 조건 검사를 줄일 수 있다.
또한, 조건문을 호출부로 올리면 제어 흐름이 한 곳에 모여 있어, 불필요한 조건이나 중복된 로직을 쉽게 식별할 수 있다.
반복문을 하위 레벨로 내리기
반복문을 상위 레벨에서 처리하기보다, 가능한 한 하위 레벨에서 처리하거나 배치(batch) 처리로 전환하는 것을 의미다. 이는 성능 최적화와 코드의 명확성을 동시에 달성할 수 있는 방법이다.
반복문 예시
좋은 예:
| |
나쁜 예:
| |
좋은 예에서는 walruses 컬렉션을 한 번에 처리하는 FrobnicateBatch 함수를 사용하여 반복문을 하위 레벨로 내렸다. 이렇게 하면 반복문 내부에서 조건문을 반복적으로 평가하는 것을 피할 수 있고, 벡터화(vectorization)와 같은 성능 최적화를 적용하기 용이하다.
또한, 조건문과 반복문을 조합할 때도 이 원칙을 적용할 수 있다:
좋은 예:
| |
나쁜 예:
| |
좋은 예에서는 조건문을 반복문 밖으로 이동시켜, 조건을 한 번만 평가하도록 하여 성능을 향상시킨다.
결론
“Push Ifs Up and Fors Down"은 코드의 가독성과 성능을 동시에 향상시킬 수 있는 실용적인 방법론이다. 조건문을 호출부로 올리고, 반복문을 하위 레벨로 내리는 이러한 접근 방식은 코드의 명확성을 높이고, 중복된 로직을 줄이며, 성능 최적화를 가능하게 합니다. 특히 C#과 같은 객체 지향 언어에서도 이러한 원칙을 적용하면 더욱 큰 효과를 볼 수 있다.
![Featured image of post [CleanCode] 코드 최적화의 비밀: 조건문을 호출부로 올리고 반복문을 하위 레벨로 내리기](/post/2025-05-20-the-secrets-of-code-optimization-pushing-conditionals-up-and-loops-down/index_hu_c6730147dd84a803.png)
![[Python Cheatsheet] 06. Control Flow - if/for/while 패턴](/post/python-cheatsheet/master-if-for-while-control-flow-examples-best-guide/wordcloud_hu_3720ff0148f7b20c.png)
![[Design Pattern] 디자인 패턴 개요 및 분류](/post/designpattern/00_overview/tmp_wordcloud_hu_84c06835c67986be.png)
![[Design Pattern] 디자인 패턴 총정리 및 실전 적용](/post/designpattern/24_final/tmp_wordcloud_hu_1bab8dadc04a4e4f.png)
![[Software] Cognitive Load(인지 부하) in Code - 실용 가이드](/post/2025-09-01-cognitive-load-in-code-practical-guide/wordcloud_hu_d643a282b73cb04f.png)
![[Data Structure] C#에서의 Lock-Free 우선순위 큐 구현](/post/2025-02-28-csharp-lock-free-priority-queue/index_hu_42d57ca2fdeb3624.png)