본문 바로가기
JAVA웹 개발

Map과 VO(Value Object)의 차이

by 편의점소세지 2021. 5. 26.
반응형

 -저는 아직 공부하고 있는 학생이기 때문에 틀린 내용이 있을 수 도 있습니다. -

 

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이 더 좋다고 볼 수 있죠

 

 수정과정에서 차이를 본다면, 새로운 변수를 추가해야하는 경우 VOclass의 변수를 추가하고 getter, setter 메서드를 구현하고 set( ? )하는 반면, Mapput("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

댓글