나는 수업 중에 소스 코드가 점차 개선되어 가는 과정을 보여주려고 한다. 그러다보니 소스 코드 하나를 놓고 지속적으로 리팩토링할 것을 요구한다. 학생 중의 한명이 블로그에 다음과 같은 글을 적었다.
사실 고백할 게 있는데, 나는 리팩토링을 별로 좋아하지는 않는다. 새로운 코드를 만드는 게 좋다. 리팩토링은 마치 어질러진 내 책상 위를 정리하고, 방청소를 하는 기분이라서 썩 내키지가 않는다. 리팩토링을 완료한 후에는 기분이 어떨까? 마지막에 소감을 적으려고 한다.
리팩토링 완료 후 남긴 느낌은 다음과 같다.
그걸 떠나서 어쨌든간 row랑 col을 변경하기는 해야 한다. 복잡한 문제라서 손대기가 싫었다. 그래도 해야 한다고 생각했다. 뭐 날리면 다시 하지 뭐…다시 시도해보았다. 의외로 그냥 기계적으로 코드를 변경하니까 문제가 안 생겼다. 당황스러웠다. 왜 어렵게 생각했지?
리펙토링을 한 목록은 다음과 같다.
- rowNum이랑 colNum이 이름이 반대로 붙여져 있었는데, 그걸 원상복귀시켰다.
- -1과 -2가 가독성이 좋지 못해서 LEFT와 RIGHT로 DEFINE하였다.
- 호출되지 않는 메소드가 있는 걸 확인하고 삭제했다.
- 클래스에 주석을 달고 각각의 메소드에 기능을 간단히 달았다.
이 친구의 블로그 글에 나는 다음과 같은 피드백을 했다.
- 프로그래밍을 시작하는 단계에서는 리팩토링보다 무엇인가를 만드는 과정이 훨씬 재미있다. 하지만 일정 시간이 지나면 리팩토링도 재미있는 단계가 된다.
- 리팩토링을 재미있는 단계로 만들어야 한다. 앞으로 네가 프로그래머로 살아가면서 새로운 코드를 만드는 단계보다 기존의 코드(네가 만든 코드이든 남이 만든 코드이든)를 리팩토링하는 과정이 훨씬 더 많다.
- 리팩토링은 네가 한 라인이라도 소스 코드를 구현하는 순간부터 발생한다. 즉, 리팩토링은 다른 사람을 위한 작업이 아니라 자기 자신을 위한 활동이다. 내가 구현한 코드를 보면서 짜증이 나지 않고 즐겁다면 그것보다 좋을 수는 없다. 자신의 코드를 보면서 즐거움을 느꼈으면 한다.
- 새로운 코드를 추가하는 과정보다 기존의 코드를 리팩토링하는 과정이 훨씬 더 어렵다. 능력있는 개발자는 이미 존재하는 코드를 리팩토링하면서 새로운 요구사항을 추가할 수 있는 사람이다. 네가 한 단계 성장하려면 리팩토링에 더 많은 관심을 가지면 좋겠다.
- 리팩토링 과정은 네가 생각하는 것만큼 어렵지 않다. 최초 예상은 많은 시간이 걸릴 거라는 생각 때문에 두려움이 앞선다. 하지만 직접 진행해보면 예상보다 빨리 끝나는 것을 보고 놀라는 경우가 많다.
- 리팩토링 과정에서 대부분의 시간은 기능이 정상적으로 동작하는지를 테스트하는 과정이다. 따라서 리팩토링에 대한 거부감을 줄이고 싶다면 자동화된 단위 테스트를 만들어라. 짧은 리팩토링 사이클을 통해 리팩토링이 고통이 아니라 즐거움이 될 수 있다.
지금 시점에 이 모든 문구가 마음에 와 닿지 않으리라 생각한다. 프로그래밍을 시작하는 친구들에게 리팩토링과 관련해 메시지를 남긴다면 어떤 메시지를 남길 수 있을까?
0개의 의견 from FB
9개의 의견 from SLiPP
본문 과는 별개의 질문인데요. ㅎㅎ 댓글 작성에 쓰이는 에디터는 무엇인가요? 정보 좀 알려주시면 감사하겠습니다.
@pyohwan.jang markitup editor(http://markitup.jaysalvat.com/home/)에다에다) wiki 문법 추가해서 쓰고 있습니다.
어제의 나보다 성장했다면 어제의 내가 작성한 코드보다 오늘의 내가 작성한 코드가 더 좋을 것이고 그 사실을 확인해볼 수 있는 것이 바로 리팩토링이다. 따라서 코딩 테크닉을 발전 시킬 수 있는 가장 좋은 학습도구이다.
한 번 쓰고 버릴 것이 아니라면 해야겠지요.
리팩토링하지 않지 않은 코드는 퇴고하지 않는 글과 같아요. 아무도 자신의 글을 퇴고없이 남에게 보이고 싶어하지 않을거에요. 더 잘할 수 있데 그대로 남겨두면 다른 사람에게 자신의 실력을 평가절하받을거니까요.
어떻게 리팩토링을 할지 고민을 하면 다음 번에는 처음부터 더 괜찮은 코드를 작성할수 있습니다.
저는 학생의 입장을 이해할 수 있을 것 같습니다. 리팩토링은 개발과 함께 왼발과 오른발 같은 것이라고 생각하는데 코드에 기능을 더 할 이유가 없는 프로젝트에서 리팩토링만 한다면 쉽게 지루해질 것 같습니다 리팩토링은 새로운 기능을 빠르고 안정적이게 추가하기 위해서지 작품을 만들려고 하는 것은 아니니까요. 그리고 처음에 쓴 코드가 본인 입장에서는 나름 완성에 가까운 코드일 것이고 아직 여러사람과 협업하거나 커다란 프로젝트를 만들어 본 경험이 없다면 리팩토링이나 추상화, 코드 디자인에 관심이 적은 것이 자연스러운 것 같습니다
현직 선임연구원입니다.
학부 시절 교수님께서 종종 비슷한 이야기 해주실 때가 많았는데... 그땐 이게 뭔 소린가 했습니다만 작금에 이르러서야 본문/리플 내용 가슴에 와닿는군요...
결론은 교수님 말씀 잘 새겨 듣자? ㅋㅎ
의견을 남기기 위해서는 SLiPP 계정이 필요합니다.
안심하세요! 회원가입/로그인 후에도 작성하시던 내용은 안전하게 보존됩니다.
SLiPP 계정으로 로그인하세요.
또는, SNS 계정으로 로그인하세요.