본문 바로가기

프로젝트/고민

전략패턴을 이용한 리팩토링

문제점

현재 팩토리 메소드 패턴을 이용해 결제 시스템의 확장을 생각하며 구현하였다. 기존의 코드를 살펴보면 다음과 같다.

 

 

결제 종류를 인자로 받아 알맞은 결제 url로 리다이렉트 시켜주는 방법이다. 

 

다음은 결제 종류가 담겨있는 팩토리 클래스이다. 현재 카카오페이만 구현한 상태이므로 종류에는 kakao 만 있다. 해당 클래스는 결제 종류를 인자로 받아 알맞은 구현체를 반환한다.

 

 

인터페이스 코드

 

구현체 코드

 

 

컨트롤러의 코드를 보면 알 수 있듯이, 팩토리에서 구현체를 반환했지만 구현체를 이용하지 않고 경로만 redirect 시켜주는 일만 한다. 

 

따라서 생성 패턴이 아닌 행동 패턴을 적용하는게 적당해 보인다. 이에 사용자의 입력에 따라 결제의 행위를 적용시킬 수 있도록 전략패턴을 통해 구현했다.

 

리팩토링

개선된 코드는 다음과 같다.

 

1. 결제 전략들을 enum 클래스로 생성하였다.

 

 

2. 해당 결제 경로로 연결시켜주는 Handler 클래스를 작성하였다.

 

 

3. 컨트롤러에서 해당 핸들러를 이용해 알맞은 결제 경로로 redirect 시켜준다.

 

 

위와 같이 구현하면 결제의 종류에 따라 구현체를 제공하지 않고 행위만 결정짓게 하여 더욱 간단하고 확장성 또한 갖춘 코드가 된다.

 

마치며

초기에 결제를 구현할 때, 확장성을 고려하여 팩토리 메소드 패턴을 사용했다. 초기 구현 방식은 확장성을 가졌지만 코드의 효율성이 부족하다고 판단하여 더 적합한 디자인 패턴을 찾게 되었고, 결과적으로 전략 패턴을 사용하게 되었다. 코드에 대한 고민이 깊어질수록 개선 가능성이 높아진다는 것을 느끼게 되었다.