도서

리팩터링 2판 - 1장

반응형

  로또에 당첨된다면 누구나 다 좋다는 것은 알고 있다. 하지만 돈이 많던 적던 그 당첨되었을 때 기분은 당첨되지 않는 이상 모르는 것이다.

이 책 1장을 읽으면서의 느낌이었다. 글쓴이는 오히려 예시를 들면 모든게 명확해진다고 하여 예시를 앞에서 부터 바로 보여주었지만, 오히려 나는 반감의 효과가 있었다. 예시가 뜬금 없었다고 해야할까.. 그래도 세부적인 기술들은 뒷장에서 소개되는 것 같아 기대되는 부분이 있다.

  1장에서 말하고자 하는 내용을 다 동의하고 이해하나, 일부만 공감이 갔다. 왜냐하면 리팩터링이 필요한 경험이 없고, 단지 프로젝트를 하면서 느꼈던 것이 전부였기 때문에, 프로젝트의 리팩터링의 의지가 있기에 일부만 공감이 갔다. 이 책을 보통 주니어에서 시니어 경력사이에 추천한다. 나는 아직 신입 조차 아니므로, 여러번 읽어야 하는 것은 확실하기에 여기서 고개가 끄덕여 졌던 부분을 정리하려 한다.

 

 

 

  1.  프로그램이 새로운 기능을 추가하기에 편한 구조가 아니라면, 먼저 기능을 추가하기 쉬운 형태로 리팩터링하고 나서 원하는 기능을 추가한다. 수백줄 짜리 코드를 수정할 때면 먼저 프로그램의 작동방식을 더 쉽게 파악 할 수있도록 코드를 여러함수와 프로그램 요소로 재구성 한다. 전체 동작을 각각의 부분으로 나눌 수 있는 지점을 중심으로 나눈다.

  프로젝트를 생각해보면 구현하고 끝이다. 거기서 다듬고 기능을 추가한다면 또 다른 세계라 생각이든다. 그래서 리펙터링을 하고 싶은 이유이고 이 책이 수준에 맞지 않아도 읽어보는 이유이다. 

그리고 기능을 세부적으로 나누어라 하는 이유는 세부적으로 나눌수록, 기능이 쉽게 녹아들 수 있는 장점이 있을 것이라 생각했다.

하나의 단단한 벽돌에 구슬을 박아 넣는것은 어렵지만, 쉽게 분리 가능한 진흙에 구슬을 넣는 것은 쉬운 원리와 같지 않을까? 그래서 리펙터링이 존재하는 이유라 생각하였다.

 

 

  2. 리팩터링은 프로그램 수정을 작은 단게로 나눠 진행한다. 버그를 쉽게 찾을 수 있다. 오류가 생기더라도 변경 폭이 작기 때문에 살펴볼 범위도 좁아서 문제를 찾고 해결하기가 쉽다. 리팩터링을 문제없이 끝낼때마다 커밋

이 부분에서는 너무나 공감을 많이 하였다. 수정 부분이 크게 어렵지 않아 4개의 기능을 동시에 고쳤다. 쉬우니까 에러가 나지 않겠지 라는 생각을 가졌다. 하지만 실행시켰더니 에러가 무성했다. 결국 4개 고친곳 모두 에러가 존재 하였고, 시간은 배로 들었다. 한번에 고치고 잡아 내는것이 더 시간이 적게 걸릴 수도 있다고 누군가 말을 할 수 있다. 문제 하나를 해결하는 시간과 두 개의 문제가 얽혀있는 문제를 해결하는 시간은 결고 1+1=2라는 느낌을 받지 않을것이라 직감적으로 다들 느낄것이라 생각한다.

 

 

3.

1) 이름을 잘 지어야 한다는 것 [Ex)함수의 반환값은 무조건 result]

2) 함수의 이름은 코드를 분석하지 않아도 무슨 일을 하는지 알수있는 작성법

3) 변수에 타입이 들어나게 작성하면 도움이 된다. [ex) 매개변수 이름에 접두어로 타입이름을 적고, 역할이 뚜렷하지 않을때 a/an을 붙인다.]

다른 사람이 작성한 코드를 보면 함수의 이름을 읽기보다 코드를 먼저 읽는다. 왜 그런지 곰곰히 생각해보니 이름을 읽어도 명확히 잘 모르기 때문이다. 하지만 반대로 내가 이름을 잘 지어 명확히 잘 알게 만드려면 머리가 아프다. 그만큼 쉽지 않다는 것을 느꼈지만, 만약 명확히 전달만 하게 된다면 생산성은 더욱 높아질 것이라는 느낌을 받았다.

 

 

4. 테스트 코드를 만들어야 한다.

테스트 코드는 지루하지만 생산성을 높여주는 중요한 부분이다. 리팩터링에 관한 책이라 4장에 테스트 코드에 대한 언급을 하지만 깊이있게 나오진 않는다. 그래도 중요성을 알려주기에 간과해서는 안되는 부분이다.

 

 

5. 리팩터링은 성능 개선이 아닌 작업이 수월하게 하기 위해서이다. 성능은 그 후에 개선해도 늦지 않다. 특별한 경우가 아니면 성능에 대해서 내려두고, 리팩터링을 한다고 성능에 미치는 영향은 미비하고, '대체로' 그러하다

리팩터링은 잘게 쪼개는 작업을 많이 하기 때문에 성능이 많이 저하 되지 않을까라는 궁금증이 있었는데, 위 문구에서 궁금증을 다소 해소할 수 있었다.

 

 

6. 컴퓨터가 이해하는 코드는 바보도 작성할 수 있다. 사람이 이해하도록 작성하는 프로그래머가 진정한 실력자다.

리팩터링을 해야하는 이유를 생각해보면 코드로 컴퓨터와 소통하지않고 사람과 소통하기에 존재하는 것 같다. 혼자서 북치고 장구치고 다하면 굳이 필요한가

 

 

  책 뒷부분에 나오는 기술적인 부분은 책을 더 읽어 봐야겠지만, 아직 경험이 부족해 쉽게 받아 들일지 걱정이고 책에 코드가 있으니 은근 읽기가 어렵다😂  그래도 많은 도움을 줄 책은 분명하니 포기하지 않고 여러번 읽어 봐야겠다.

반응형