0. 개요

본 글은 사내 자동화 툴의 사용성 확장에 대비하여 코드를 개선한 리팩토링 내용을 다룹니다. 처음 설계에서는 특정 도메인만을 대상으로 하였는데 요구사항이 확대되어 다른 도메인에서도 사용하게 된 경우입니다. 이와 같은 비즈니스 요구사항에 대한 대응으로 코드 레벨의 복잡성을 개선한 경험을 공유하고자 합니다.

1. 목차

  1. 개요
  2. 목차
  3. 1차 리팩토링 - Deserializer를 일반화하여 41개의 중복 클래스를 통합하기
    1. 문제 정의
    2. 목표 설정
    3. 리팩토링 전략
    4. 결과 및 평가
  4. 2차 리팩토링 - enum의 제거와 대안
    1. 문제 정의
    2. 목표 설정
    3. 리팩토링 전략
    4. 결과 및 평가
  5. 결론

2. 1차 리팩토링

2.1 문제 정의

문제 상황

기존의 Deserializer 구현은 각 Payload 별로 분리되어 있어, 중복 코드와 복잡도가 높았습니다.

As-Is

public enum PayloadAction  {
    PayloadAction1(Deserializer1.class),
    PayloadAction2(Deserializer2.class),
    PayloadAction3(Deserializer3.class),
    PayloadAction4(Deserializer4.class),
    PayloadAction5(Deserializer5.class),
   // ...
}

세부 구현 예시는 다음과 같습니다.

@Component
public class Deserializer1 implements PayloadDeserializer<Payload1> {
    @Override
    public Payload1 deserialize(JsonObject json) {
        return GsonConverter.getGson().fromJson(json, Payload1.class);
    }
}