본 글은 사내 자동화 툴의 사용성 확장에 대비하여 코드를 개선한 리팩토링 내용을 다룹니다. 처음 설계에서는 특정 도메인만을 대상으로 하였는데 요구사항이 확대되어 다른 도메인에서도 사용하게 된 경우입니다. 이와 같은 비즈니스 요구사항에 대한 대응으로 코드 레벨의 복잡성을 개선한 경험을 공유하고자 합니다.
기존의 Deserializer
구현은 각 Payload
별로 분리되어 있어, 중복 코드와 복잡도가 높았습니다.
Payload
마다 별도의 Deserializer
클래스가 정의되어 있습니다.PayloadAction enum
에서 Deserializer
클래스를 관리하며, 각 Payload
별로 다른 Deserializer
클래스를 사용하고 있었습니다.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);
}
}