JAVA/Refactoring2008. 12. 10. 12:27
리팩토링은 가동중인 프로그램을 취해서, 동작을 바꾸는 것이 아니라 우리가 빠른 속도로
개발할 수 있도록 하는 특성을 좀더 많이 주어, 프로그램의 가치를 높이는 것이다.


프로그램은 두 종류의 가치를 가지고 있다. 하나는 오늘 당장을 위한 것이고, 다른 하나는
내일을 위한 것이다
. 우리가 프로그래밍을 할 때는 대부분 오늘 당장을 위한 기능에 초점을 맞춘다.
버그를 잡든, 기능을 추가하든, 우리는 오늘의 프로그램의 기능을 더 많게 하여 더 유용하게
만드는 것이다.

프로그램이 오늘 하는 것은 단지 일부분에 지나지 않는다는 것을 깨닫지 못한다면 프로그래밍을
오래 할 수 없다
. 만약 오늘의 일을 오늘 되게 할 수 있지만, 그런 식으로 내일의 일을 내일 되게
할 수 없다면, 실패하는 것이다. 오늘은 무엇이 필요한 지를 알지만, 내일에 대해서는 확실하지가 않다.
이것을 하게 될지, 저것을 하게 될지, 아니면 상상도 하지 못했던 일을 하게 될지도 모른다.

나는 오늘 할 일에 대해서는 충분히 알고 있다. 하지만 내일 할 일에 대해서는 충분히 알지 못한다.
그러나 만약 내가 오늘만을 위해서 일한다면, 내일은 전혀 일을 할 수 없을지도 모른다.
리팩토링은 이런 곤혹스런 상황에서 빠져 나오는 방법이다. 어제의 결정이 오늘 더 이상
적합하지 않으면, 결정을 바꿀 수 있다. 이제 오늘의 일을 할 수 있다. 내일, 오늘의 이해가 부족해
보인다면, 그것 역시 바꿀 수 있다.
무엇이 프로그램에 대한 작업을 어렵게 하는 걸까? 이 글을 쓰면서 내가 생각할 수 있는 네가지는
다음과 같다.

  • 읽기 어려운 프로그램은 수정하기 어렵다.
  • 중복된 로직을 가지고 있는 프로그램은 수정하기 어렵다.
  • 실행중인 코드를 변경해야 하는 특별한 동작을 요구하는 프로그램은 수정이 어렵다.
  • 복잡한 조건문이 포함된 프로그램은 수정하기 어렵다.


따라서, 우리는 읽기 쉽고, 모든 조직은 중복되지 않도록 한곳에서만 존재하고, 기존 동작을
위험에 빠뜨릴 변경을 허용하지 않으며 조건 로직은 가능한 단순하게 표현되는 프로그램을 원한다.

리팩토링은 가동중인 프로그램을 취해서, 동작을 바꾸는 것이 아니라 우리가 빠른 속도로
개발할 수 있도록 하는 특성을 좀더 많이 주어, 프로그램의 가치를 높이는 것이다.

Posted by B정상