[프로그래밍 명저 읽기] Refactoring - 1

김병진·2021년 3월 7일
0
post-thumbnail

리팩터링이란?


겉으로 드러나는 코드의 기능은 바꾸지 않으면서 내부 구조를 개선하는 방식으로 시스템을 수정하는 과정입니다. 버그가 생길 가능성을 최소로 줄이면서 코드를 정리하는 정제된 방법입니다. 코드를 작성하고 난 뒤에 설계를 개선하는 일입니다. "코딩 후 개선".

방법은 단순합니다. 한 클래스의 필드를 다른 클래스로 옮기고, 일부 코드를 메서드 밖으로 빼서 별도의 메서드로 만들고, 코드 일부를 상속 구조의 위/아래로 올리거나 내리는 등의 작업입니다. 즉, 구조를 체계화합니다. 처음부터 완벽한 설계를 갖추기보단 개발을 진행하면서 지속적으로 설계합니다.

들어가기 전에


책에서는 예시를 통해 책의 전반적인 코드 리팩터링 과정을 보여줍니다. 이 과정은 다음 챕터에서 하나씩 다뤄보기로 하고 래팩터링 과정에서 느낀점을 몇 자 적어보고자 합니다.

  1. 모든 리팩토링 과정마다 컴파일 - 테스트 - 커밋 과정을 거칩니다.
  2. 성능은 특별한 경우가 아니라면 일단 무시하고 리팩터링을 거친 후에 성능을 개선합니다.
  3. 리팩터링은 크게 4단계로 나뉩니다.
    1) 반복문 쪼개기 : 변수 값을 누적시키는 부분을 분리
    2) 문장 슬라이스 : 변수 초기화 문장을 변수 값 누적 코드 바로 앞으로 이동
    3) 함수 추출 : 특정 블록을 함수로 추출
    4) 변수 인라인 : 불필요한 변수를 제거

또한 계속 강조하는 점은 "좋은 코드를 가늠하는 확실한 방법은 "얼마나 수정하기 쉬운가"이다." 입니다.

깨달은 점


  1. 수학 함수의 효용성
volumeCredits += Math.max(perf.audience - 30, 0)

예시인 연극 외주 시스템에서 이 코드는 30명 이상인 경우, 30명보다 더 많은 사람들이 들어온 수만큼 포인트 적립되는 코드입니다.
대부분 조건문을 이용하여 지저분한 코드를 만들었겠지만 max 함수를 이용하여 깔끔한 코드를 만들었습니다.

volumeCredits += Math.floor(perf.audience / 5)

이 코드는 관객 5명마다 추가 1 포인트를 제공하는 코드입니다.
반복문을 돌려 하는 방법을 생각할 수 있지만 깔끔하게 5로 나누어 소수점은 버리고 몫을 이용하여 코드를 만들었습니다.

반복문이나 조건문은 코드를 더럽힐 수 있습니다.
수학 연산을 이용하여 더 깔끔한 코드를 만들 수 있습니다.

  1. 중요하지만 듣기 싫었던 다형성

Clean Code에서도 다형성을 중요시했습니다. 하지만 다음에 다시 공부해야지 하고 넘었갔었는데 리팩터링 책에서도 강조합니다. 이 책을 읽으며 세세하게 정리하도록 하겠습니다.

profile
아이디어를 구현할 수 있는 개발자가 목표입니다.

0개의 댓글