본문 바로가기

개발일지/TIL

Map vs DTO 사용

현업 코드를 작성하며 Map 사용

💬 입장 대기열을 위한 코드를 작성을 하게 되었다. 코드 작성을 하며, 요구 사항이 계속해서 변경이 되는 상황이었다. 그러다보니 User 데이터에 저장이 되어야 하는 값들이 계속해서 변경이 되었다. 유연하게 데이터가 변경이 되더라도 대응 가능한 Map을 사용하기로 했다. 

 

Map을 사용하며 느낀 장단점

💬 Map을 사용을 하다보니 계속 변경이 되는 저장 값들을 쉽게 대응할 수 있었다. 처음에는 빠르게 작업을 진행하는 데에 많은 도움이 되었다. 그런데 코드가 늘어나고 대기열 User 데이터가 사용되는 곳이 많아지자 오히려 작업 속도가 현저히 줄어들게 되었다. User 데이터를 가져다가 사용하기 위해 들어있는 Key 값을 기억하고 있어야 했으며, 상황에 따라 뭐가 들어있었는지 확인하는 시간이 소요가 되었던 것이었다. 

 

DTO를 사용해야 하는 이유

💬 Map 사용으로 인해 Key 값을 항상 기억하고 확인해야 하는 문제는 코드의 양이 늘어날수록 치명적으로 다가왔다. 무엇보다 Key 값을 잘못 입력을 했을 경우 없는 값을 가져오다보니 에러가 터지는 경우가 종종 발생을 했다. 그래서 이러한 문제를 막고 코드의 지속적인 유지보술르 위해 DTO를 사용을 해야한다는 것을 절실하게 느끼게 되었다.

 

 DTO로 변환

Map을 사용한 구현

HashMap<String, Object> user = new HashMap<>();

user.put("userIndex", userIndex);
user.put("userName", userName);
...


DTO를 사용한 구현

public class User {
  int userIndex;
  String userName;
  ...
}

결론

💬 HashMap을 Class로 변환을 하여 관리를 하니 확실히 코드를 작성하며 발생할 수 있는 실수를 미연에 방지할 수 있었다. 그리고 매번 각 자료 타입으로 캐스팅해줄 필요도 없었으며, 값들을 타입에 안전하게 사용을 할 수 있었다. 이러한 장점을 느꼈으니 앞으로 이러한 상황이라면 Class를 기준으로 사용을 해야겠다. 하지만 항상 옳은 것은 아니라고 생각이든다. 데이터를 유연하게 변경을 할 수 있다는 장점이 있기 때문에 코드의 규모가 작고 의미없는 DTO가 늘어나면 오히려 득이 되지 않은 경우 Map 상황도 고려해볼 것이다.