본문 바로가기
가치관 쌓기/개발 돌아보기

왜 코드 리팩토링을 수행해야 될까?

by simplify-len 2023. 9. 26.

 지극히 개인적인 생각으로 다른분들과 생각이 다를 수 있습니다.

https://unsplash.com/photos/XJXWbfSo2f0

들어가기

 개발을 하면서 코드가 '다소 객체지향적이지 않다'는 느낌의 코드 나래비를 목격하는 경우가 더러 있다. 그럼 우리는 이따금씩 이런 생각이 든다. '이거 내가 좀더 객체지향스럽게 디자인패턴이나 적절한 메소드나 용어를 활용하여 고칠 수 있을 것 같은데?' 라고 말이다.  그리곤 코드를 수정한다. 그리고 배포한다.

과연 이 의식의 흐름대로 행동하는 것이 맞을까? 개발하고 있는 서비스에서 유사한 일이 나에게 반복적으로 발생했다.

이것은 과연 문제일까? 아닐까? 개발자로서 장인정신에 입각하여 당연히 해야되는 것은 아닐까?

 

나는 리팩토링을 통해 무엇을 얻고 싶었던 걸까?

 어떤 코드를 보고 위에서 언급한 것처럼 의식의 흐름으로 고치던 리팩토링을 어느 시점부터 멈쳤다. 이유는 '심적으로 얻을 수 있는 안정감'과 '피드백을 얻지 못함'에 있다고 생각했다. 더불어 내가 개발해야만 하는 기능에 대한 추가된 코드를 리팩토링된 코드 스페이스에서 추가할 수 있다면 그나마 다행이지만, 아무런 관련이 없는 코드에 대한 코드 리팩토링은 어떠한 성취감이나 만족감을 주지 못한다.

 리팩토링을 하는 이유는 요구사항에 맞는 개발된 소스코드를 추가하기 전 넣을 자리를 깨끗하게 만들기 위해 리팩토링한다고 생각해왔다. 추후에 또 다른 요구사항이 들어오더라도 '이곳에 코드를 넣으면 되겠구나' 라는 생각이 자연스럽게 이어질 수 있도록 말이다.

 그런데 이번에는 같은 상황에서 아주아주 쉬운길을 선택해보았다. 코드를 리팩토링하지 않고 IF문 분기로 가득한 코드에 내가 넣고자 하는 코드를 억지로 우겨넣어봤다. 결론은 아무런 일도 일어나지 않았다. 코드는 잘 동작되었고- 순조롭게 배포가 마무리 되었다. 그리고 나는 그 뒤로 관련된 코드를 더이상 보지 않았다.
 농담이 아니고 진짜 그 뒤로 관련 코드를 조금도 찾아보지 않았다. 깨끗하지 않는 코드이고 IF문 분기로 가득차있어서 더 보고 싶지 않았다. 더군다나 내가 우겨넣은 코드까지 정상 동작한다면 더할나위 없이 볼 이유가 없었다.

 그러면서 문득 그런 생각이 들었다. 리팩토링을 하는 이유는 안정감, 피드백 이런게 아니라 단순히 코드에 대한 관심도를 높이기 위한 것이 아니였을까?

 흔히 리팩토링을 하는 목적에 대해서 이렇게 말한다. '응집도가 높아지고 결합도를 낮추기 위해' 라는 말을 종종한다. 진짜 맞을까? 응집도가 높아지고 결합도가 낮아지는건 누가 보장해줄 수 있을까? 그 다음 요구사항이 들어와도 똑같이 응집도가 높아지고 결합도를 여전히 낮출 수 있을까? 내 생각에는 '응집도가 높아지고 결합도를 낮추기 위해'라는 말은 지극히 개인의 이상적인 주관을 말하고 있는게 아닐까 싶다.

 객체지향 프로그래밍은 늘 응집도와 결합도 사이 어딘가에서 트레이드오프를 해오며 개발한다. 이미 개발을 할 때부터 이 트레이드오프를 적절히 활용하며 개발을 해왔는데 더 그렇게 한다? 그건 사실 개발자의 욕심이라고 생각한다. 더하여 쉽게 지칠 수 있는 부분이라는 생각도 든다.

리팩토링은 내가 이 코드에 얼만큼의 관심도를 주입하는가? 라는 것이 가깝다고 본다. 리팩토링 된 코드는 시간이 지나도 다시 보게된다. '내가 어떻게 변경했었지? 이것을 왜 이렇게 했지?' 라고 스스로 생각할 여지를 더 만들어주게 된다.

댓글