본 글에서는 조건문과 반복문을 최적화하는 방법에 대해 다룬다. 조건문을 호출부로 올리고 반복문을 하위 레벨로 내리는 기법은 코드의 가독성과 유지보수성을 높이는 데 중요한 역할을 한다. 이러한 최적화 기법을 통해 개발자는 더 효율적이고 명확한 코드를 작성할 수 있으며, 이는 소프트웨어의 품질을 향상시키는 데 기여한다.
조건문을 호출부로 올리기
조건문을 함수 내부에 두기보다, 가능한 한 호출부로 이동시키는 것을 의미한다. 이렇게 하면 제어 흐름이 중앙 집중화되어 코드의 복잡성을 줄이고, 중복된 조건 검사를 방지할 수 있다.
조건문 예시
좋은 예:
| |
나쁜 예:
| |
위의 나쁜 예에서는 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_b5c65ec2e62f78cd.png)
![[Software] Cognitive Load(인지 부하) in Code - 실용 가이드](/post/2025-09-01-cognitive-load-in-code-practical-guide/wordcloud_hu_14c30ff979ee718d.png)
![[Data Structure] C#에서의 Lock-Free 우선순위 큐 구현](/post/2025-02-28-csharp-lock-free-priority-queue/index_hu_ea94c8de5b011b1a.png)
![[OOP] 디미터의 법칙(Law of Demeter) - 결합도 낮추는 객체 협력 가이드](/post/2022-05-19-law-of-demeter/wordcloud_hu_ccb55631603eb2d4.png)
![[AI] 엔지니어를 위한 ChatGPT 활용 가이드: 프롬프트와 사용 사례](/post/2025-10-01-chatgpt-engineers-use-cases/Work-Users-Cover-Images-21--ce4569e9-ec53-48ec-a8dc-744ef41d329f-1754316883486_hu_72a51114fce5d972.jpeg)
![[Python] 클린 코드의 중요성](/post/2024-11-08-python-clean-code/tmp_wordcloud_hu_dd6b5a2c48696e9c.png)