성장에 목마른 코린이

TIL 220801 (리팩토링 2판 page 85 - 91) 본문

Today I Learned

TIL 220801 (리팩토링 2판 page 85 - 91)

성장하는 코린이 2022. 8. 1. 13:20
728x90

오늘의 계획

1. 오전 10:00 - 12:00 + 저녁시간 활용해서 이력서 2군데 제출하기 / 기업 분석

2. 오후 12:00 - 1:00 책읽고 중요한 내용 기록

3. 오후 2:00 - 5:00 노마드 코더 줌 클론코딩 강의

4. 오후 5:30 ~ 7:00 운동

5. 오후 8:30 ~ 프로그래머스 문제 풀기

책에서 읽은 중요한 내용!

언제 리팩터링해야 할까?

이 책의 저자는 프로그래밍할 때 거의 한시간 간격으로 리팩터링한다고합니다.

그러다보니 작업 흐름에 리팩터링을 녹이는 방법이 여러가지임을 알게되었다고 합니다.

 

Don Roberts의 3의 법칙

1. 처음에는 그냥 한다.

2. 비슷한 일을 두 번째로 하게 되면, 일단 계속 진행한다.

3. 비슷한 일을 세 번째 하게 되면 리팩터링한다.

 

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

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

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

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

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

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

조건부 로직의 구조가 이상하지 않은지 살펴보기도하고,

함수 이름을 잘못 정해서 실제로 하는 일을 파악하는 데 시간이 오래 걸리지는 않는지 살펴봅니다.

코드를 분석할 때 리팩터링을 해보면, 그렇지 않았더라면 도달하지 못했을 더 깊은 수준까지 이해하게 됩니다.

이해를 위한 리팩터링을 의미 없이 코드를 만지작 거리는 것이라고 무시하는 이들은

복잡한 코드 아래 숨어있는 다양한 기회를 결코 발견할 수 없습니다.

쓰레기 줍기 리팩터링

코드를 파악하던 중 일을 비효율적으로 처리하는 모습을 발견하지만, 

원래 하려던 작업과 관련 없는 일에 너무 많은 시간을 빼앗기면 좋지 않습니다.

그렇다고 쓰레기를 방치해 나중에 일을 방해하도록 내버려 두는 것도 좋지 않습니다.

그럴땐 간단히 수정할 수 있는 것은 즉시 고치고,

시간이 좀 걸리는 일은 짧은 메모만 남긴 다음 하던일을 끝내고 나서 처리합니다.

계획된 리팩터링과 수시로 하는 리팩터링

앞에서 본 준비를 위한 리팩터링, 이해를 위한 리팩터링, 쓰레기 줍기 리팩터링은 기회가 될 때만 진행합니다.

프로그래밍 과정에 자연스럽게 녹이게 되면, 앞으로 할 작업에도 도움을 줍니다.

 

보기 싫은 코드를 발견하면 리팩터링하자.

무언가 수정하려 할 때는 먼저 수정하기 쉽게 정돈하고 그런 다음 쉽게 수정하자.

- 켄트 백

오래 걸리는 리팩터링

리팩터링은 대부분 몇 분안에 끝난다. 길어야 몇 시간 정도다.

하지만 팀 전체가 달려들어도 몇 주는 걸리는 대규모 리팩터링도 있다.

이런 상황에 처하더라도 팀 전체가 리팩터링에 매달리는 데는 회의적이다.

 

주어진 문제를 몇 주에 걸쳐 조금씩 해결해나가는 편이 효과적일 때가 많다.

라이브러리를 교체할 때는 기존 것과 새 것 모두를 표용하는 추상 인터페이스부터 마련한다.

추상 인터페이스는 이번에 타입스크립트 공부를 시작하며 알게되었는데, 덕분에 이게 무슨 의미인지 알게됬다 ㅎㅎ

코드 리뷰에 리팩터링 활용하기

코드 리뷰는 개발팀 전체에 지식을 전파하는 데 좋다.

경험이 더 많은 개발자의 노하우를 더 적은 개발자에게 전수할 수 있다.

코드 리뷰를 하면 다른 사람의 아이디어를 얻을 수 있다는 장점도 있다.

이왕이면 참석자가 참석하는 방식이 좋다.

내가 경험한 가장 좋은 방법은 작성자와 나란히 앉아서 코드를 흝어가면서 리팩터링하는 것이다.

관리자에게는 뭐라고 말해야 할까?

기술을 모르는 상당수의 관리자와 고객은 코드베이스의 건강 상태가 생산성에 미치는 영향을 모르기에

"리팩터링한다고 말하지 마라"고 조언하겠다.

프로 개발자에게 주어진 임무는 새로운 기능을 빠르게 구현하는 것이고, 가장 빠른 방법은 리팩터링이다.

리팩터링하지 말아야 할 때

지금까지 얘기가 리팩터링을 권장한다고 들릴 수 있지만, 하면 안되는 상황도 있다.

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

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

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

리팩터링할지 새로 작성할지를 잘 결정하려면 뛰어난 판단력과 경험이 뒷받침되어야 한다.

한 마디 조언으로 표현하기는 어렵기에, 리팩터링을 해보며 뛰어난 판단력과 경험을 길러야겠다.

오늘의 회고

할 수 있는 것 부터 하나씩 해결해나가야겠다고 생각했습니다.

요즘 스스로 부족함을 많이 느끼고 있는데 그래도 할 수 있을거라는 생각이 듭니다!

그리고 코딩테스트 관련해서 책을 하나 구매해야겠다는 생각을 했습니다.

사실 코딩테스트는 취업하고 이직할때 준비하려고했지만

시간을 조금 더 쪼개서 하루에 한문제라도 풀려고 애써야겠다는 생각이 들었습니다.

좀 더 하루를 알차게 써봐야겠다고 느끼는 요즘입니다.

운동, 이력서 제출, 책 읽기, 코딩테스트 준비 모두 매일 꾸준히 하는 습관을 들여보겠습니다!

Comments