-저는 아직 공부하고 있는 학생이기 때문에 틀린 내용이 있을 수 도 있습니다. -
Map과 VO(Value Object)는 오래전부터 어떤 것이 더 좋은지 논쟁이 많았다고 해요. 어떤 것이 더 좋은지는 Map과 VO의 차이를 먼저 알아야겠죠!
저는 Map객체를 JDBC에서 Query문에 객체를 보내주기 위해 사용했는데요.
Map<String, Integer> param = new HashMap<String, Integer>(); param.put("page", 1) param.put("limit", 4) jdbc.queryForObject(쿼리문, params, 클래스(또는 rowMapper));
그리고 VO의 경우는 같은 조건으로 본다면
public class PageVO { private Integer page; private Integer limit; } PageVO param = new PageVO(); param.setPage(1); param.setLimit(4);
이런식으로 될 수 있겠죠.
여기서의 차이를 보시면 Map의 경우는 변수명을 바꿔가면서 계속적으로 put할 수가 있어요.
그에 반해, VO는 지정한 변수에만 set할 수 있는 거죠.
구현과정에서 차이를 본다면, Map에 경우에 key값에 null값이 들어갈 일이 없습니다. put("key", null) 이렇게 쓸 일이 없기 때문이죠. 하지만, VO에 경우 set을 안해준다면 key값이 null값으로 들어갈 수 가 있어요. 이 부분에서 Map이 더 좋다고 볼 수 있죠
수정과정에서 차이를 본다면, 새로운 변수를 추가해야하는 경우 VO는 class의 변수를 추가하고 getter, setter 메서드를 구현하고 set( ? )하는 반면, Map은 put("lastPage", ? ) 하나만 더 써주면 됩니다.
이 부분에서 Map이 효율적이기 때문에 더 좋다고 생각할 수도 있겠지만, Map을 사용할 경우 어느부분에서 에러가 생겼는지 확인하기 어렵고, 객체값을 삽입하면서 객체명을 직접 입력해주기 때문에 실수의 여지가 더 생깁니다.
유지보수 측면에서 본다면, VO의 경우는 class의 변수만 잘 관리하면 새로운 변수가 들어올 경우가 없기 때문에 비정상적인 작동이 일어날 확률이 적습니다.
또한, 다양한 타입이 들어올 때는 Map<String, Object>로 작성해서 두 번째 인자값의 타입을 Object로 설정해야하는데 이렇게 되면 다양한 형태의 변수들이 들어오거나, key에 맞지 않는 타입이 들어오게 되어 에러 또는 실수를 일으킬 수 있습니다.
이외에도 Map과 VO의 차이점을 두고 어떤 것이 더 좋은지를 논쟁을 합니다. 하지만 최근에는 VO를 사용하는 것이 더 좋다는 평가를 많이 받고 있습니다. 하지만 모든 부분에서 VO가 낫다는 것은 아닙니다. 간단한 코드에서는 Map을 사용하고 이해하기 쉽기 때문에 저는 Map을 사용해서 구현하는 것을 더 선호했습니다.
아직 초보 개발자라 많이 부족합니다. 틀린부분이 있거나 내용의 의견이 있으시면 댓글 부탁드리겠습니다.
'JAVA웹 개발' 카테고리의 다른 글
Enum 활용방법 (0) | 2021.05.22 |
---|---|
N-tech Service 인턴 교육 후기 (0) | 2021.05.20 |
댓글