리팩토링 (1)
Java, 리팩토링
- 회사 비즈니스상 고객들의 서버와 컴퓨터에 설치되어 비즈니스를 수행하는
Java, Client Program
유지/보수/개발 업무를 맡고 있음. - Java 1.6 Base로 개발되어 현재는 1.7로 포팅된 상태이고, 1.7 기반으로 유지/보수/개발 이 진행 중임.
- 멀티 쓰레드 기반이며, 영속성 ORM 도구는 MYBATIS를 사용중
답답하다.
- 처음 인수 인계 받고도 막막했지만, 익숙해진 지금도 막막하다.
- 클래스 관계는 꼬여 있으며, 하나의 클래스에 다 때려박아 놓는
갓 클래스
가 존재하며, 멀티 스레드 환경이 제대로 통제된 느낌이 없다. - 그때 그때 요구 사항을 개발하며,
작동만
하게끔 만들어논 티가 물씬 풍긴다.
처음에는.
- 나도 처음에는 모든 열정을 품고 새로 만들거나 고쳐 보려는 시도를 했지만, 이미
존재
하는 프로그램을 새로 짤 이유를 찾지 못했어며, 리팩토링
시도는 내가 수정한 부분이 어디까지 영향을 끼칠지 감이 오지 않아서 시도를 하지 못했다.
지금은.
- 내 업무를 받을 후임에게도 미안하고, 내 자신에게도 부끄러운 코드가 지속되고 있다고 생각하니, 참을 수 없었다.
- 우선 패키지를 정돈하고, 클래스 네이밍 수정 및 변수 정리 그리고
잘게 쪼개어지고 서술적인 이름을 가진 클래스 내 메소드
를 Intellij의 Extract
기능들을 이용해 정돈중이다.
분석중.
- 책을 읽으며 습득한 지식으로 혼자 고민하며, 변경이 지속될 부분을 찾고 있으며, 디자인 패턴 적용도 고려 중이다.
이것은… 파괴적인… 혼돈의… 자바 코드에 생명을 불어넣기 위한 일지이다…
쓰레드
- 멀티 쓰레드 환경에서 쓰레드는 항상 비정상 동작을 염두에 두고 대비책을 세워야 한다.
- 해당 프로그램은 Thread를 관리하는 데몬 스레드가 존재하며, 해당 데몬 스레드는 비즈니스 스레드를
감시
하고, 준비 및 시작
하며, 종료
까지 책임 진다. - 이 모든 기능이 클래스 하나에 때려박혀 있으니… 이게
갓 클래스
가 아니면 무엇이겠는가…
따라서, 쓰레드 감시 클래스를 기능 별로 분류해 책임을 분산시켰다.
- 메인 감시 스레드는 각각의 기능 동작 주기만을 관장한다.
- 이니시에이터 클래스는 초기화를 담당한다.
- 익스큐터 클래스는 시작을 담당한다.
- 인스펙터 클래스는 감시를 담당한다.
문제는
- 메인 감시 클래스에 모든 스레드 정보가 담겨있는 맵이 존재하는데, 이 맵은 스태틱이며 메인 감시 클래스에서만 접근이 가능해, 각각의 하위 클래스에 정보로 전달이 불가능했다.
- 어느 책인지 기억이 나진 않지만,
클래스
가 멤버 변수가 없다면 클래스가 아니다
라는 글귀가 기억이 나는데, 이 글귀에 따르자면 각각의 하위 클래스는 클래스가 아니다… - 이렇게 스태틱으로 관리되는 맵이 있으면, 하위 클래스가 이를 전달받기 위해서는 어떻게 해야 할까? 상속? 인터페이스?… 이 부분을 고민해야 겠다.