0. 현재상황

중계서버를 만들고 있다. 개발하다 보면 흔히 있는 일인데, 앞단(통칭 A)에서 전달해주는 JSON Key와 우리가 전달해줘야 하는 뒷단(통칭 B)의 JSON Key가 다른 경우가 있다. 같은 의미의 파라미터라고 하더라도, A서버는 "testEMail" 이라는 Key로 전달해줄 때, B서버는 "test_email"이라는 key로 받아야 한다. 그럴 땐 대충 아래와 같이 작업하는 편이다.

1
2
3
4
5
Map<String, Object> bMap = new HashMap<String, Object>();
//bMap에 담아서 B서버로 전달
if ( jsonResult.containsKey("testEMail")) {
   bMap.put("test_email", jsonResult.get("testEMail"));              
}
cs

뭐 근데 쓰다보면 불편한 점이 참 많다. 간단하게 한두개야 이렇게 한다손 치더라도, 후에는 오류가 생길 수 있다. 담당 개발자가 바뀐다거나 또는 Parameter Key가 변경된다거나 하는 정도로. 그래서 이래저래 고민하다 찾아보니 Enum이 있더라. 그래서 냅다 바꿨다.

 

1. Enum class

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
@Getter
public enum aParamMapper {
    //좌측 - a서버 , 우측 - b서버
    testNm("testNm""test_nm"),    //사용자명
    testTelNo("testTelNo""test_tel_no"), //사용자전화번호
    testEMail("testEMail""test_email"), //사용자이메일
    ;
 
    private String aParam;
    private String bParam;
 
    bParamMapper(String aParam, String bParam) {
        this.aParam = aParam;
        this.bParam = bParam;
    }
}
 
cs

enum class를 하나 만들어서, 4~6번 라인과 같이 매칭시켜줄 것들을 만든다. 타입에는 arraylist도 들어가고 많은데, 아직 그런 활용성은 생기지 않았다.

 

2. 사용

1
2
3
4
5
6
7
8
Map<String, Object> bMap = new HashMap<String, Object>();
//bMap에 담아서 B서버로 전달
if ( jsonResult.containsKey(bParamMapper.testNm.getbParam())) {
   bMap.put(
       bParamMapper.testNm.getbParam()
       , jsonResult.get(bParamMapper.testNm.getaParam())
        );
}
cs

* 소스가 좀  길어져서 임의로 줄바꿈 함

0. 현재상황 의 4번 라인은 key/value 값이 각각 String 인자값으로 하드코딩 되어있는데 반해, 2.사용 의 5~6번 라인은 key/value 값을 enum을 통해 가져오는 방식으로 바뀌었다.

한두군데에서 쓰는 방식이라면 굳이 enum을 써야하나 싶긴 한데, 이를 활용하면 공통되는 부분을 모두 대체할 수 있는 데다가, 향후 Parameter Key가 변경되었을 때의 대처방안, 대소문자 구분자에 대한 해결방안 등도 모두 대응할 수 있을 것으로 생각된다. 

블로그 이미지

김생선

세상의 모든것을 어장관리

,