내가 생각하는 VO

Structure of Knowledge·2021년 1월 21일
0

Spring MVC Exercise in BIT

목록 보기
15/19

  DB에서부터 MVC의 각 단계별로 수많은 정보들이 오고간다. 이 때, 많은 정보들을 한번에 보낼 수 있는 정보 그릇이 필요하다. 정보 그릇에 대해 내 나름대로 구분을 하고 개념을 세워보았다.

DTO, VO의 정의

  1. DTO : 정보 근원지인 DB의 테이블 컬럼을 모델링한 클래스. 한 테이블의 모든 컬럼을 멤버변수로 가진다.

  2. VO : DTO 외의 정보그릇, 테이블 컬럼 이외의 정보를 담아줘야 할 때, 쓰이는 정보그릇.

    2-1. 어떤 뷰에 필요한 모든 정보를 가지고 있는 VO.
    2-2. mapper.xml에 파라미터로 넘겨주기 위한 VO.

VO의 사용


  JSP           :   ${VO.abcd} or ${abcd} == vo.getAbcd();

  Mapper.xml :  #{VO.abcd} or #{abcd} == vo.getAdbc();


 여기서 알 수 있는 것은 VO클래스의 멤버변수가 아니더라도, getAbcd() 메소드를 만들면, 원하는 값을 JSP나 Mapper.xml에 보낼 수 있다.
 즉 mapper나 jsp에 필요한 값에 대한 연산 로직을 서비스나, 모델 단이 아닌 VO클래스 내부로 보낼 수 있다는 장점이 있다!

ex) mapper.xml에 정보를 전달할 때, hashMap이용과 VO 차이

public class BoardVo {
	String keyword; //for 검색 , 확장성
	
	private int cp;//페이지 번호 
	private int ps;//페이지 사이즈
	{
		cp = 1;
		ps = 5;
	}
	public int getStartRow() {
		return (cp-1) * ps; //ex) 0 * 5 = 0
	}
	public int getEndRow() {
		return cp * ps; //ex) 1 * 5 = 5
	}
}

위 소스의 VO와 아래 소스의 VO는 별개. hashMap을 사용할 때, 연산로직을 서비스단에서 해줬다는 것을 보이기 위해 가져옴.

public interface BoardMapper {
	List<Board> list(Map<String,Integer> map);
}    

@Autowired
private BoardMapper boardDao;
@Override
public BoardVo listS(int cp, int ps) {
	Map<String, Integer> map = new HashMap<String,Integer>();
	int initRow = (cp-1)*ps;
	int lastRow = cp*ps;
	map.put("initRow",initRow);
	map.put("lastRow", lastRow);
		
	List<Board> list = boardDao.list(map);
}

hashMap 같은 경우에 넘겨야 할 파라미터가 많지 않을 경우, 그리고 연산이 필요없는 경우에 VO를 설계하는 것보다 편리할 것 같다.

profile
객체와 제어, 비전공자 개발자 되기

1개의 댓글

comment-user-thumbnail
2021년 1월 22일

먼말인지모르겠음너무어려움

답글 달기