코드 스멜

위키백과, 우리 모두의 백과사전.

코드 스멜(code smell←코드 냄새)은 컴퓨터 프로그래밍 코드에서 더 심오한 문제를 일으킬 가능성이 있는 프로그램 소스 코드의 특징을 가리킨다.[1]

이 용어는 1990년대 말 켄트 벡워즈위키에 의해 고안된 것으로 보인다. 《Refactoring: Improving the Design of Existing Code》라는 책에서 특집으로 실리면서 이 용어의 이용이 늘어나게 되었다.[2] 또, 코드 스멜은 애자일 프로그래머가 사용하는 용어이기도 하다.[3]

무엇이 코드 스멜인지 아닌지의 여부를 결정하는 일은 주관적인 것으로 언어와 개발자, 개발 방법에 따라 다양하다. 자동으로 특정한 종류의 코드 스멜을 확인하기 위한 도구들이 있으며, 그 예로는 체크스타일, PMD, 파인드벅스 등을 들 수 있다.

일반적인 코드 스멜[편집]

응용 프로그램 수준의 스멜:

  • 신비로운 이름: 함수, 모듈, 변수, 클래스 이름이 그들이 동작하는 방식이나 그들을 사용하는 방법과 어울리지 않게 작성된 이름
  • 중복 코드: 동일하거나 매우 비슷한 코드가 다른 곳에 있음.
  • 억지로 꾸민듯한 복잡성: 단순한 디자인 패턴으로도 충분한 곳에 과도하게 복잡한 패턴을 일부러 사용함
  • 산탄총 수술: 간단한 변경이지만 여러 클래스에 동시에 적용해야 할 필요가 있는 변경.
  • 제어할 수 없는 부작용: 대개 실행할 때 예외를 일으키는 코딩의 부작용, 단위 테스트로는 문제의 원인을 잡아 낼 수 없음.
  • 변수 용도 변경: 변수의 상태가 예측불가능하여 추론하기가 어려워 리팩토링하면 난이도를 증가시키기 충분함.
  • 보고 있어도 헷갈리는 부울리언 값: 반대 상황을 쉽게 알 수 있지만, 여전히 맞는지 확인해야하는 상황.

클래스 수준의 스멜:

  • 커다란 클래스
  • 기능에 대한 욕심
  • 부적절한 관계
  • 거부된 유산
  • 게으른 클래스
  • 리터럴의 과도한 사용
  • 순환 복잡도
  • 다운캐스팅
  • 고아 변수 또는 컨스턴트 클래스
  • 데이터 덩어리

메서드 수준의 스멜:

  • 너무 많은 매개변수
  • 긴 메서드
  • 과도하게 긴 식별자
  • 과도하게 짧은 식별자
  • 과도한 데이터의 반환
  • 과도한 주석
  • 과도하게 긴 줄로된 코드

같이 보기[편집]

각주[편집]

  1. Tufano, M.; Palomba, F.; Bavota, G.; Oliveto, R.; Di Penta, M.; De Lucia, A.; Poshyvanyk, D. (2015년 5월 1일). “When and Why Your Code Starts to Smell Bad” (PDF). 《2015 IEEE/ACM 37th IEEE International Conference on Software Engineering (ICSE)》 1: 403–414. doi:10.1109/ICSE.2015.59. 
  2. Fowler, Martin (1999). 《Refactoring. Improving the Design of Existing Code》. Addison-Wesley. ISBN 0-201-48567-2. 
  3. Binstock, Andrew (2011년 6월 27일). “In Praise Of Small Code”. Information Week. 2011년 7월 2일에 원본 문서에서 보존된 문서. 2011년 6월 27일에 확인함. 

외부 링크[편집]