infinity : 무한한 성장가능성

chapter 02) 리팩터링 : 리팩터링 원칙 본문

📖 book/💚 Refactoring 2판

chapter 02) 리팩터링 : 리팩터링 원칙

인피니 2023. 3. 26. 19:49

2.1 리팩터링의 정의

리팩터링은 명사와 동사의 뜻을 가지고 있다.

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

리팩터링[동사]: 소프트웨어의 겉보기 동작은 그대로 유지한 채, 여러 가지 리팩터링 기법을 적용해서 소프트웨어를 재구성하다.

-> 위에서 정의한 리팩터링의 뜻을 보면, 리팩터링하는 동안에는 코드가 항상 정상 작동하기 때문에 전체 작업이 끝나지 않았더라도 언제든 멈출 수 있다.

 

2.3 리팩터링 하는 이유

리팩터링은 소프트웨어의 모든 문제점을 해결하는 만병통치약은 절대 아니다.

하지만 코드를 건강한 상태로 유지하는 데 오와주는 약임은 분명하다.

 

1) 리팩터링하면 소프트웨어 설계가 좋아진다.

 

2) 리팩터링하면 소포트웨어를 이해하기 쉬워진다.

프로그래밍은 여러 면에서 마치 컴퓨터와 대화하는 것 같다.

컴퓨터에게 시킬 일을 표현하는 코드를 작성하면, 컴퓨터는 시킨 대로 반응하기 때문에, 컴퓨터에게 시키는 일과 이를 표한한 코드의 차이를 최대한 줄여야 한다.

단순히 프로그램을 동작시키는 데만 신경 쓰다 보면 나중에 해당 코드를 다룰 개발자를 배려하지 못하게 된다.

 

3) 리팩터링하면 버그를 쉽게 찾을 수 있다.

코드를 이해하기 쉽다는 말은 버그를 찾기 쉽다는 말이기도 하다.

리팩터링하면 코드가 하는 일을 깊이 파학하게 되고, 해당코드를 읽으며 가정했던 점들이 드러나게 되며, 버그를 발견할 수 있다.

 

4)리팩터링하면 프로그래밍 속도를 높일 수 있다.

리팩터링하면 코드 개발 속도를 높일 수 있다.

내부 설계가 잘 된 소프트웨어는 새로운 기능을 추가할 지점과 어떻게 고칠지를 쉽게 찾을 수 있기 때문에 깨끗하게 유지된 프로그램은 코드 개발 속도를 높일 수 있다.

 

2.4 언제 리팩터링해야할까?

3의 법칙
1. 처음에는 그냥한다.
2. 비슷한 일을 두 번째로 하게되면(중복이 생겼다는 사실에 당황스럽겠지만), 일단 계속 진행한다.
3. 비슷한 일을 세 번째 하게되면 리팩터링한다.

1) 준비를 위한 리팩터링: 기능을 쉽게 추가하게 만들기

리팩터링하기 가장 좋은 시점은 코드베이스에 기능을 새로 추가하기 직전이다.

이 시점에 현재 코드를 살펴보면서, 구조를 살짝 바꾸면 다른 작업을 하기가 훨씬 쉬워질 만한 부분을 찾는다.

 

2) 이해를 위한 리팩터링: 코드를 이해하기 쉽게 만들기

코드를 수정하려면 먼저 그 코드가 하는 일을 파악해야 한다.

코드를 파악할 때마다 그 코드의 의도가 더 명확하게 드러나도록 리팩터링할 여지는 없는지 찾아본다.

 

3) 쓰레기 줍기 리팩터링

코드를 파악하던 중에 일을 비효율적으로 처리하는 코드를 발견하게 된다면 (로직이 쓸데없이 복잡하거나, 매개변수화한 함수 하나면 될 일을 거의 똑같은 함수 여러개로 작성해놨을 수 있다.) 이때 간단히 수정할 수 있는것은 고치고 시간이 좀 걸리는 일은 짧은 메모만 남기고 하던 일을 끝내고 리팩터링한다.

 

4) 리팩터링하지 말아야 할 때 

지저분한 코드를 발견해도 굳이 수정할 필요가 없다면 리팩터링하지 않는다.

외부 API 다루듯 호출해서 쓰는 코드라면 지저분해도 그냥 둔다. 

내부 동작을 이해해야 할 시점에 리팩터링해야 효과를 볼 수 있다.

 

리팩터링 하는 것 보다 처음부터 새로 작성하는 게 쉬울 때도 리팩터링하지 않는다.

 

'📖 book > 💚 Refactoring 2판' 카테고리의 다른 글

Chapter 1) 리팩터링: 첫번째 예시 1.1~1.5  (0) 2023.02.25