JAVA

[리팩토링] 리팩토링이란?

블루티카 2022. 1. 30. 15:21

오늘은 진행했던 프로젝트의 하자 보수 요청이 와서 코드를 보던 중 조금 더 효율적으로 코드를 작성 할 수 있지 않을까에 대한 생각이 들어 문득 리팩토링에 대한 생각이 나서 공부를 해보고자 한다.

리팩토링이 뭐하는 건가?

소프트웨어의 겉보기 동작은 그대로 유지한 채, 코드를 이해하고 수정하기 쉽도록 내부 구조를 변경하는 기법

마틴 파울러의 리팩토링이라는 책에서 나와 있는 문구이다.
위 글로만 봤을 때는 단순히 읽기 어려운 코드를 깔끔하게 정리한다는 것이 아닌 개발자가 만든 기능은 유지 하면서 기능 안에 있는 여러 단계(예. 메서드, Funtion 등등)를 세분화 또는 간략화 시키는 과정이라고 할 수 있다.

리팩토링은 어떻게 하는가?

개인적으로는 OKKYCON: 2018 에서 박재성님의 의식적인 연습으로 TDD, 리팩토링 연습하기 라는 영상에 있는 기준을 참 좋아하고 또한 그 기준에 따라 리팩토링을 시작하는 것을 추천한다.
핵심만 보면

메소드 분리 - 한 메서드에 한단계의 들여쓰기만 한다.
else 예약어를 쓰지 않는다.
클래스 분리
일급 콜렉션을 쓴다.

이 외에도 여러가지가 있지만 나는 아직 익숙하지 않아 위 내용만이라도 익히고 진행하려고 한다.
실사용 예제를 보면 이해가 빠를것이다. 아래 내용을 확인 하면,

리팩토링 전 코드

전 회사에서 개발 하던 코드 중 일부를 가져온 것인데, 소셜(카카오, 네이버 등)로 회원가입 하는 고객들에 대한 정보를 저장하고자 하는 내용이다. 위 코드를 나름대로 리팩토링을 해보았는데,

각각의 기능에 따라 묶을 수 있는 기능들로 메서드를 따로 분할하고, 최대한 언어에서 제공하는 메서드를 사용하여 임의로 데이터를 조작하는 행위를 최소화 하였다. 또한 else와 같이 불필요하게 코드를 읽지 않도록 if 단락에서 마치도록 하였다.

마무리

사실 위 코드를 보고, '이게 어떻게 리팩토링인가?' 라고 하시는 분들이 더 많을 수도 있다. 나보다 더 많은 경험과 경력과 실력을 가진 사람이 많을 것이기에... 아직도 수정해야 할 것이 많지만 자잘하게 진행하면서 연습중인 코드이니 이런 느낌이구나 하고 했으면 좋겠다.
오늘은 리팩토링에 대해 슬쩍 알아보는 시간이었는데, 깊게 들여다 보면 많은 내용이 필요한 부분인거 같다. 그래도 리팩토링이 어떤 것인지 대충이라도 아는 것과 아예 모르는 것은 천지 차이이니 신입 개발자는 이정도라도 알고 있으면 나쁘지 않다고 생각한다.