본문 바로가기

TIL

다된 코드에 리팩토링 뿌리기(22.07.26TIL)

어제 노아님의 피드백을 듣고, 허겁지겁 ToDoList를 마무리하려고 온 힘을 쏟았다. 어찌저찌 체크, 삭제, 추가가 작동하는 mvp를 만들 수 있었다. 호기롭게 리팩터링을 진행했지만, 생각만큼 쉽지 않았다...

 

 

다된 코드 망쳐버리기~

 

 

리팩터링의 뜻은 작동이 똑같이 되게 코드의 구조를 더 낫게 고치는 것인데, 작동이 안된다. 다시 퍼즐조각 짜맞추듯이 하나하나 클래스파일을 건드려보다가, 결국 포기했다. 리팩터링 전의 코드로 돌아가서 다시 진행하는게 오히려 낫겠다는 판단이 든 것이다.

 

아니 마카오뱅크 리팩터링도 쉽지 않게 진행했는데 왜 여기서 막힌걸까?? 분명 노아님이 투두리스트가 더 쉽다고 했는데...

 

정답은 간단하다. 아직 아샬님의 코드를 제대로 체화하지 못한것이다. 내가 친것은 아샬님의 코드를 외운것일 뿐이지, 실전에서 내가 인출할 수 없는 단순한 암기에 불과한 것이다. 

 

본질을 놓치는 리팩터링을 피하기 위해서는 어떻게 해야할까?? 회고를 하던 중 앞으로 시도해 볼 두가지 방법이 떠올랐다.

극단적인 관심사의 분리

아샬님의 강의에서 나온 말 그대로다. GUI와 도메인 객체를 확실하게 분리하자! 이번 리팩터링에서 문제가 되었던 부분은, 버튼을 클릭했을때 액션리스너의 처리를 도메인객체에서 진행하려다 벌어졌다. 액션리스너는 버튼을 수반하는 GUI역할인데, 이것을 도메인 객체에서 처리하려니 만지면 만질수록 코드가 망가졌다. 앞으로는 GUI 컨트롤이 들어간 구문은 도메인객체에 발도 들이지 말것!

중간중간의 테스트!

GUI라서 테스트가 조금 귀찮지만, main메서드를 이용해서 리팩터링 중간중간 테스트를 해야한다. 한번에 메서드 여러개를 클래스파일 이리저리 옮겨다니니 어디가 문제인지 도무지 파악할 수가 없다. 조금 느리겠지만, 완전히 망쳐버린 코드를 복구하는데 드는 시간에 비하면 정말 값싼 방법이다. 테스트를 습관화하자!

 

'TIL' 카테고리의 다른 글

확장성(22.07.28TIL)  (0) 2022.07.28
번아웃(22.07.27TIL)  (0) 2022.07.27
학습의 추월차선(22.07.25TIL)  (0) 2022.07.25
사생활 침해를 멈춰주세욧!!(22.07.24TIL)  (0) 2022.07.24
마카오뱅크 뜯어보기(22.07.23TIL)  (0) 2022.07.23