티스토리 뷰

728x90
반응형

프로그래밍을 하다 보면, 본인도 모르게 같은 코드를 중복해서 작성하는 하기도 하고, 개발 일정이 촉박하여 변수, 함수, 클래스 이름을 테스트용 또는 의미 없는 단어로 작성하기도 합니다. 이후 소프트웨어를 유지 보수하기 쉽지 않고, 코드 가독성이 떨어지고 도한 간단한 수정임에도 불구하고 사이드 이팩트가 곳곳에서 발견됩니다. 기존 기능은 유지한 채, 소스 코드 아키텍처를 다시 재구성하는 방법을 리팩토링이라고 부릅니다. 그리고, 리팩토링을 자주 하고 코드의 가독성이 좋고, 유지 보수하기 좋은 구조를 갖춘다면 클린 코드가 될 것입니다. 우리가 클린 코드 작성을 위해 노력하는 이유는 개발자 및 운영자가 결국 일을 편하게 하기 위해 노력하는 행위입니다.

이번 포스팅에서는 클린 코드 작성을 위한 코드 스멜을 개선하는 방법에 대해 알아보겠습니다.

코드스멜 이란?

코드 스멜의 정의는 아래와 같습니다.

- Code Smell : 코드에서 더 심오한 문제를 일으킬 가능성이 있는 소스코드

새로운 기능을 추가 또는 기존 기능을 수정을 하였지만, 전혀 의도하지 않는 기능에서 문제가 발생한다면, 해당 프로그램의 소스코드는 Code Smell이 많이 산재한 것이라고 볼 수 있습니다. 그렇다면, 코드 스멜은 어떻게 찾아서 개선할 수 있을 까요? 

일반적인 코드 스멜의 유형 및 개선 기법은 아래와 같이 정리해 볼 수 있습니다.

1. 중복 코드 (Duplicate Code)

  • 똑같은 코드 구조가 두 군데 이상 있는 코드
  • 개선 기법 : 메서드 추출(Extract Method), 메서드 상향(Pull Up Method), 알고리즘 전환(Substitute Algorithm)

2. Long Method

  • 장황한 메서드; 메서드의 길이가 지나치게 길고 중복된 코드가 많은 코드
  • 개선 기법 : 메서드 추출(Extract Method), 조건문 쪼개기(Decompose Conditional) 
  • 메서드 길이가 10~20라인 정도로 작성하는 것이 좋음 (조직마다 기준을 다르게 가져갈 수 있음)
  • 메서드 명은 이해하기 쉽도록 목적을 나타내는 이름으로 정함

3. Long Parameter List

  • 과다한 매개변수; 루틴에 필요한 대부분을 매개변수를 사용해 전달하는 경우. 이해하기 어렵고, 다른 데이터가 필요할 때마다 수정해야 함
  • 개선 기법 : 매개변수 세트를 객체로 전환(Introduce Parameter Object), 객체를 통째로 전달(Preserve Whole Object), 매개변수 세트를 메서드로 전환(Replace Parameter with Method)

4. Divergent Change

  • 수정의 산발; 한 클래스가 다양한 원인 때문에 다양한 방식으로 자주 수정되는 경우
  • 개선 기법 : 클래스 추출(Extract Class)

5. Shotgun Surgery

  • 기능의 산재; 수정할 때마다 여러 클래스에서 수많은 자잘한 부분을 고쳐야 하는 경우
  • 개선 기법 : 메서드 이동(Move Method), 클래스 내용 삽입 (inline Class), 필드 이동(Move Field)
  • 메서드 이동과 필드 이동을 적용해서 수정할 부분들을 하나의 클래스에 모음

6. Feature Envy

  • 잘못된 소속; 어떤 메서드가 자신이 속하지 않은 클래스에 더 많이 접근하는 경우
  • 개선 기법 : 메서드 추출(Extract Method), 메서드 이동(Move Method)

7. Swtich Statements 

  • Switch 문; Switch문의 사용이 많은 경우 중복이 발생하여 유지보수성이 떨어짐
  • 개선 기법 : 메서드 추출(Extract Method), 메서드 이동(Move Method), 분류 부호를 하위 클래스로 전환(Replace Type Code with Subclasses), 분류 부호를 상태/전략 패턴으로 전환(Replace Type Code With State/Strategy)

8. Magic Number

  • 매직 넘버; 코드에 기입된 상수는 추 후, 유지보수 때 의도를 파악하기 어려움
  • 개선 기법 : final 또는 const와 같은 변수 상수화 키워드로 상수를 변수로 네이밍 하여 의도를 표현

마무리

코드 스멜에 대해 이해하고, 유형을 찾아낼 수 있는 기본 소양을 습득하였습니다. 코딩 작업을 시작하기에 앞서 한번 더 코드 스멜이 발생하지 않는 방향으로 코딩을 진행해본다면 여러분은 클린 코드를 작성하는데 한 걸음 더 나아간 것입니다.

728x90
반응형

'IT 기술' 카테고리의 다른 글

Notion으로 업무 일정 관리하기  (0) 2022.07.15
TCP/UDP 통신의 특징  (0) 2022.07.14
C++ 개념정리  (0) 2022.07.13
Springboot 빌드 및 실행하기  (0) 2022.07.13
Springboot RestfulAPI 서버 만들기  (0) 2022.07.11
댓글
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/07   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
글 보관함