BooK Plus2008.01.17 12:50
출처 : 리팩토링 ( 저자 : 마틴 파울러  / 윤성준 . 조재박 옮김)


---------------------------------------------------------------------------------------------------
왜 리팩토링을 해야 하는가 ? - 리팩토링은 소프트웨어를 더 이해하기 쉽게 만든다.

많은 면에서 프로그래밍은 컴퓨터와의 대화라고 할 수 있다. 우리가 컴퓨터가 해야 할 일을 코드로 써서 컴퓨터에게 말하고, 컴퓨터는 정확하게 코드에 있는 대로 작동함으로써 반응한다. 오래지 않아 우리가 하고자 하는 것과 그것을 하도록 말하는것 사이의 차이는 줄어든다. 이런식으로 프로그래밍은 우리가 원하는 것을 정확하게 말하는 것에 대한 모든 것이다. 그러나 우리의 소스 코드를 사용하는 다른 사용자가 있다. 몇 달안에 누군가 어떤 변경을 하기위해 우리의 코드를 읽으려 할 것이다. 우리는 코드의 다른 사용자를 쉽게 잊지만, 그 사용자야 말고 실제로는 가장 중요하다. 컴퓨터가 어떤 것을 컴파일 하기위해 몇 단계를 더 거친다고 한들 누가 상관하겠는가? 그러나 어떤 프로그래머가 코드를 이해했다면 수정하는데 단지 한 시간이면 될것을 일주일씩 걸리는 것은 문제다.

 문제는 우리가 프로그램을 만들 때, 나중의 개발자에 대해 생각하지 않는다는 것이다. 코드를 더 쉽게 이해할 수 있도록 변경하기 위해서는 리듬의 변화가 필요하다. 리팩토링은 코드를 더 읽기 쉽게 만들도록 도와준다. 리팩토링을 시작할 때 코드가 작동은 하지만 구조는 완벽하지 않다. 리팩토링을 하는데 얼마간의 시간을 보내면, 그 코드의 목적은 더욱 명확해질 것이다. 이런 식으로 프로그래밍이 우리가 뜻하는 바를 정확하게 말하는 것에 대한 모든 것이다.

 이렇게 나중의 개발자를 염두에 둔 프로그래밍을 하기 위해 이타적이 될 필요는 없다. 그 나중의 개발자가 내 자신이 될 수도 있기 때문이다. 여기서 리팩토링이 특히 중요하다. 나는 매우 게으른 프로그래머이다. 나는 내가 작성한 코드도 기억을 못할정도로 게으르다. 실은 머리가 꽉 차버리는 것이 두려워, 찾아볼 수 있는 것은 일부러 기억하려 하지 않는다. 나는 나중에 기억할 필요가 없도록, 기억해야 할 모든 것을 코드에 넣는다. 이런 방법으로 오래된 기억이 내 뇌세포를 죽이는 것에 대한 걱정을 덜 수 있다.

이해하기 쉽게 만듣다는 것은 다른 면으로도 유용하다. 나는 익숙하지 않은 코드를 이해하는 데 도움을 받고자 리팩토링을 사용한다. 익숙하지 않은 코드를 볼 때 나는 그 코드가 무엇을 하는것인지 이해해야 한다. 나는 몇 줄의 코드를 보면서 그래, 바로 이게 이 코드가 하는 일이구나, 하고 말한다. 나는 이런 것을 기억하기 보다는 리팩토링을 한다. 실제로 내가 이해한 것을 더 잘 반영하도록 코드를 수정하고, 그 코드를 다시 실행시켜 여전히 제대로 동작하는지를 봄으로써 내가 제대로 이해했는지 확인하다.

 초기에는  이런 식으로 좀 자세하게 리팩토링을 한다. 코드가 점점 명확해짐에 따라, 나는 그 전에는 보지 못했던 디자인에 관한 것을 볼 수 있게 된다. 나는 이 모든것을 머리속에서 시각화 할 수 있을 정도로 똑똑하지는 못하기 때문에, 코드를 바꾸지 않았더라면 아마 이런 것을 보지 못했을 것이다 . Ralph Johnson은 이런 초기단계의 리팩토링을 유리창에 있는 먼지를 닦아 그 너머를 볼 수 있게 되는 것으로 묘사했다. 리팩토링은 코드를 볼 때 내가 그냥은 보지 못했을 더 놓은 수준으로 이해로 나를 이끌어준다.
---------------------------------------------------------------------------------------------------

4번째 포스팅이다. 뭐 이건 포스팅이 책을 보고 그대로 타이핑하는 수준이네요ㅋ
냠냠.. 저작권에 걸리는 행위 인가? 이정도의 인용은 상관이 없는건가 갑자기 의문이 생기는 이유가 무엇일까?
어찌 되었건.. 타이핑 치면서 다시 한번 책을 정독 할수 있는 계기가 되었다.
한동안 서랍장에서 먼지와 친구를 하던 책을.. 다시 한번 볼수 있는 좋은 기회인것 같다.

난 개발자이다. 대한민국의 개발자.. 언제가 부터 IT 업계의 SI 개발자는 3D 업종으로 분류된것 같다. 정해진 출근 시간... 그리고 정해지지 않은 ... 퇴근 시간과 휴일...
그 속에서 나는 좀더 낳은 개발자가 되기 위해 노력을 하려고 한다.

이제 2번째 프로젝트를 하고 있는데;; 첫번째 프로젝트에서 해보지 못한... 것을 이번 프로젝트에서 연습해보려고 한다. (이러다가 프로젝트가 망하겠나;;ㅡㅡ) 아직은 생소하지만.. 리팩토링을 적용해보려고 노력중이다.
한번 작성하고 또 수정하고 또 수정하고 또 수정하고... 다듬어 가는 중이다. 하지만 내가 제대로 하고 있는지는 나도 잘 모르겠다. 나름. 나름. 조금씩 조금씩. 나만은 스토리를 만들어가려고 노력중이다~

시간이 흐른후에 내가 만들어 놓은 스토리를 보면 내가 왜 이렇게 했을까? 이렇게 하면 좀 더 깔끔하고 보기 좋은 코딩이 되었을것을... 이렇게 느끼게 되리라고 믿는다.. 그 때는 지금보다 좀더 향기로운 코드를 만들 수 있는 센스가 생겼을 꺼라고 믿기때문에...
Posted by is윤군