[1탄] 리팩터링을 읽으며 셀프 반성하기위해 쓰는 글

Sanghoon Han·2021년 4월 21일
0

리팩터링2판

목록 보기
1/2

(코드 그렇게 짜면 안돼!!!!!!멈춰!)


저번 인공지능 스쿨 프로젝트를 마무리하고 난 후
코드를 짜는것에 대해 조금 더 업그레이드 하기위해 책을 구매했다.

  • 파이썬 클린코딩
  • 리펙터링 2판

(위 책들의 리뷰는 다음에 작성하겠다..) 기술부채 또 시작..?

부채라는 단어가 딱 어울리는 말이다. 코드는 지금 바꾸는 것 보다 미래에 변경하는 것이 더 어렵기 때문에 부채이다. 부채는 이자는 유발한다. 기술 부채가 발생했다는 것은 내일은 코드를 수정하기가 더 어렵고 비싸며 내일 모레는 더더욱 비싸질 것이라는 뜻이다.😳

리펙터링이란 무엇인가?


리펙터링 : [명사] 소프트웨어의 겉보기 동작은 그대로 유지한 채, 코드를 이해하고 수정하기 쉽도록 내부 구조를 변경하는 기법 [리펙토링 2판 리펙터링 원칙 79page]

리펙터링을 하는 이유


  • 소프트웨어를 이해하기 쉬워진다.

다른 사람을 배려하기 위해서가 아니다. 사실 그 다른 사람이 바로 나 자신일 때가 많다.🙈
[리펙터링 2판 82page]

  • 리펙터링하면 버그를 쉽게 찾을 수 있다.

"난 뛰어난 프로그래머가 아니에요, 단지 뛰어 난 습관을 지닌 괜찮은 프로그래머일 뿐이에요💁"
[리펙터링 2판 83page]

  • 리펙터링하면 프로그래밍 속도를 높일 수 있다.

언제 리팩터링 해야 할까?


😎 3의 법칙

  1. 처음에는 그냥 한다. (🙈과거의 난 여기에 멈춰있었다. 그냥 한다..계속 했다...)
  2. 비슷한 일을 두 번쨀로 하게 되면(중복이 생겼다는 사실에 당황스럽겠지만), 일단 계속 진행한다.
  3. 비스한 일을 세 번째 하게 되면 리펙터링한다.

리펙터링을 "클린 코드나," '바람직한 엔지니어링 습관' 처럼 도덕적인 이유로 정당화 하는것이다.
리펙터링의 본질은 코드 베이스를 예쁘게 꾸미는 데 있지 않다. 오로지 경제적인 이유로 하는 것이다.

리팩터링과 소프트웨어 개발 프로세스


자가 테스트 코드와 리팩터링을 묶어서 테스트 주도 개발(TDD)이라 한다. (😳TDD가 이런거였구나..)

애자일을 제대로 적용하려면 리팩터링에 대한 팀의 역량과 열정이 뒷받침되어 프로세스 전반에 리팩터링이 자연스럽게 스며들도록 해야 한다.

세가지 실천법

  • 자가 테스트 코드
  • 지속적 통합
  • 리팩터링

리펙터링과 성능


"직관적인 설계 vs 성능"은 중요한 주제이다.

빠른 소프트웨어 작성하는 방법

  1. 예산 분배 방식(time budgeting방식)
  2. 끊임없이 관심을 기울이기

    대부분 프로그램은 전체 코드 중 극히 일부에서 대부분의 시간을 소비한다는 것이다

  3. 90%의 시간은 낭비'라는 통계에서 착안한 것이다.

    의도적으로 성능 최적화에 돌입하기 전까지는 성능에 신경 쓰지 않고 코드를 다루기 쉽게 만드는데 집중한다.
    최적화 단계가 되면 다음의 구체적인 절차를 따라 프로그램을 튜닝 한다.
    프로파일러로 프로그램을 분석하여 시간과 공간을 많이 잡아먹는 지점을 알아낸다.

리팩터링을 잘해두면 최적화에 유리한 이유

  • 성능 튜닝에 투입할 시간을 벌 수 있다. (기능 추가가 빨리 끝나서 성능에 집중할 시간을 더 벌 수 있다.)
  • 리팩터링이 잘 되어 있는 프로그램은 성능을 더 세밀하게 분석할 수 있다. (프로파일러가 지적해주는 코드의 범위가 더 좁아질 것이고, 그래서 튜닝하기 쉬워진다.)

다음에 작성할 내용

6장 함수 추출하기, 5장 테스트 하기

Reference

  • 리팩터링 2판 코드 구조를 체계적으로 개선하여 효율적인 리팩터링 구현하기 [ 『리팩토링』 개정판 ]
    마틴 파울러 저/개앞맵시, 남기혁 역 | 한빛미디어 | 2020년 04월 01일
  • 파이썬 클린 코드 유지보수가 쉬운 파이썬 코드를 만드는 비결
    마리아노 아나야 저/김창수 역 | 터닝포인트 | 2019년 02월 25일
profile
Fail Fast learn Faster

0개의 댓글