코드 복잡성, if 문으로 해결할 수 있을까?

by DD
3개월 전
조회수 62

코드 복잡성 감소를 위해 다형성(Polymorphism)보다 if 문을 우선적으로 고려해야 한다는 주장이 제기됨

단일 책임 원칙(Single Responsibility Principle)추상화 최소화(Minimize Abstractions) 등, 간결한 코드 작성을 위한 다양한 원칙들이 제시됨

커뮤니티에서는 if/switch/패턴 매칭(Pattern Matching)을 기본으로 하고, 복잡성이 증가할 때 다형성을 적용하는 것이 효율적이라는 의견이 지배적임

LLM(Large Language Model)의 코드 생성이 Conway's Law를 복잡하게 만들 수 있다는 우려와, 코드 가독성 저하에 대한 논쟁이 발생함

코드 복잡성 관리의 핵심: if 문 vs 다형성

게시글은 다형성(Polymorphism) 사용 전에 if 문을 먼저 고려하라고 권고하며, 코드의 가독성(Readability)유지보수성(Maintainability)을 강조한다. 단일 책임 원칙(Single Responsibility Principle)을 준수하고, 불필요한 추상화를 지양하는 것이 핵심이다. 커뮤니티에서는 if/switch/패턴 매칭(Pattern Matching)을 기본으로 하고, 복잡성이 증가할 때 다형성을 적용하는 것이 효율적이라는 의견이 지배적이다.

추상화 최소화(Minimize Abstractions) 원칙의 중요성

게시글은 추상화 최소화(Minimize Abstractions) 원칙을 통해 불필요한 복잡성을 줄이는 것을 강조한다. API와 구현 모두에서 추상화의 수를 최소화하여 코드의 이해도를 높여야 한다고 주장한다. 실제 사례로는 'Factory', 'Lookup', 'Visitor'와 같은 이름의 클래스 사용을 지양하고, 필요한 경우 'God' 객체를 활용하여 핵심 기능을 제공하는 것이 제시되었다. 이는 개발 생산성(Development Productivity) 향상에 기여한다.

LLM(Large Language Model)과 Conway's Law의 복잡성

댓글에서는 LLM(Large Language Model)이 코드 생성에 활용되면서, 조직 구조가 코드에 반영되는 Conway's Law가 더욱 복잡해질 수 있다는 우려를 제기한다. 기술적으로 보면, LLM이 학습한 코드의 패턴이 코드베이스에 반영되어 코드의 이해도를 저해할 수 있다. 결과적으로, 코드의 복잡성을 최소화하려는 노력과 LLM의 활용 사이에서 균형을 찾는 것이 중요해진다.

트레이드오프(Tradeoffs)의 중요성

게시글은 다양한 프로그래밍 원칙들이 트레이드오프(Tradeoffs) 관계에 있음을 강조한다. 구체적으로, if 문과 다형성, 추상화, 코드 중복 등은 상황에 따라 장단점이 존재하며, 적절한 선택이 필요하다. 주목할 점은, 코드의 복잡성을 증가시키는 요소를 신중하게 고려하고, 상황에 맞는 최적의 해결책을 선택하는 것이 중요하다는 점이다. 개발자는 이러한 트레이드오프를 이해하고, 코드 품질을 지속적으로 개선해야 한다.

Prefer If Statements To Polymorphism