코드스멜
코드스멜이란?
직역을 해보자면 냄새나는 코드라는 의미이다.
사전적 정의는 개발자가 이해하지 못하거나 잠재적인 결함이 내재되어 있어 문제를 일으킬 가능성이 있는 코드를 말하는데, 운이 좋다면 한 두군데를 고치면 에러가 해결되고 정상적으로 작동하는 경우도 있지만 보통은 리팩토링을 거쳐야 하는 경우가 많다.
코드 스멜의 종류는 굉장히 다양하다. 그중 몇가지를 소개해보고자 한다.
코드스멜의 종류
중복코드 (Duplicate Code)
동일한 코드구조가 여러 곳에 있는 경우를 의미한다.
이 경우 동일한 코드 구조를 메서드 추출 기법등을 통해 개선이 가능하다.
긴 메서드 (Long Method)
메서드의 내용이 너무 긴 경우에도 문제가 될 수 있다. 어느 부분이 문제인지 알기 어렵기 때문이다.
조건문 쪼개기나 메서드 추출 기법등 통해 메서드가 어느정도 길어진다 싶으면 정리해주는 것이 좋다.
매개변수 과다 (Long Parameter List)
매개변수가 너무 많은 경우에도 문제가 된다. 두셋까지는 문제가 일어날 가능성이 적지만, 대부분의 내용을 매개변수를 통해 전달할경우 이해가 어렵다.
잦은 클래스 변경 (Divergent Change)
클래스가 모종의 원인으로 인해 너무 많이 수정되는 경우에도 문제가 될 수 있다.
단일한 원인으로 인해 수정되는 경우에는 문제가 없지만, 다양한 원인으로 인해 클래스가 계속해서 변경되는 경우 이 문제를 해결해야 한다. SOLID원칙에 따라, 한 클래스는 한가지 기능을 담당해야 한다.
연결된 부분이 너무 많은 경우 (Shotgun Surgery)
어떤 부분을 수정할 때마다 그와 연계된 여러 부분들을 고쳐야 하는 경우
그 연계된 부분들을 하나의 클래스에 모아서 한 클래스에서 전부 수정이 가능하게 고쳐야 한다.
기능 편향 (Feature Envy)
어떤 모듈에 있는 함수가 다른 모듈에 있는 데이터나 함수를 더 많이 참조하는 경우.
그 함수를 적절한 위치로 옮기거나, 아예 메서드로 분리하여 사용한다.
Switch문의 과다 사용
Switch문이 너무 많은 경우에도 중복 발생으로 유지보수성이 떨어질 수 있다.
이건 그냥 조금만 쓰자.
매직 넘버 (Magic Number)
상수를 코드에 그대로 사용하는 경우 유지보수가 어렵고, 그렇지 않더라도 프로그램의 유출과정에서 취약점, 즉 매직넘버로 작용할 가능성이 높음.
'Programming > 기타' 카테고리의 다른 글
의존성 주입(Dependency Injection) (0) | 2024.12.02 |
---|---|
리팩토링 (0) | 2024.11.30 |
컴파일러 (1) | 2024.11.30 |
게임수학) 행렬 - 1 (0) | 2024.11.22 |
게임수학) 벡터 - 2 (0) | 2024.11.21 |