파란하늘의 지식창고
반응형
너무 당연하다고 생각하고 아무 생각없이 사용하는 클래스 중에 Integer, String이 있다.

int와 char를 wrapping해주는 클래스인데 mvc를 구현하기 위해서는 이와 같은 wrapping 클래스의 활용이 필요하다.

게시판을 구현한다고 할 때 mvc를 구축하면
  • c
    • 게시판에 대해 request를 받아서 dao쪽으로 던지고 리턴받아 처리하는 (뒷단을 쪼개면 많지만 간단히 설명해서..) 컨트롤러
    • 리턴받은 값을 m으로 감싸준다.
  • m
    • c에서 생성된 값
  • v
    • c에서 만든 m을 가져다 화면에 뿌려주는 뷰

이런 형태를 지니게 된다.

게시판의 view페이지의 경우 스프링 프레임워크에서 대충 다음처럼 선언이 될 것이다.
<bean id="action.board.view" class="net.bluesky.gui.board.ViewAction" p:targetview="swing.board.view" p:articledto-ref="dto.article" p:requestdto-ref="dto.request" p:dao-ref="dao.board" />
<bean id="swing.board.view" class="net.bluesky.gui.board.ViewJFrame" p:articledto-ref="dto.article" />
<bean id="dto.article" class="net.bluesky.model.board.ArticleDTO" />
action 클래스나 view클래스의 구현은 따로 설명하지 않아도 스프링의 bean의 선언을 통해 action과 view를 분리한 것을 알 수 있다.
스프링을 쓰게 되면 controller의 기능을 나누어서 스프링의 applicationContext에서 전체적인 생명주기를 관리하고 action.board.view에서는 게시판의 뷰페이지의 데이터를 호출한다.
action.board.view는 전체 흐름을 관리하는 책임에서 벗어나 view에 대한 데이터를 호출하는 것만 치중하게 된다.

만약 리스트의 호출이면 어떨까?
리스트의 경우 action클래스에서는 List<articledto>를 구현해야 한다.
스프링에서 List에 대한 bean선언은 없다.

따라서 서두에 언급한 wrapper클래스를 통해 해당 리스트에 대한 클래스를 만들어야 한다.
package net.bluesky.model.board.dto;

import java.util.List;

public class ArticleListDTO {
	private List<articledto> articleList;

	public List<articledto> getArticleList() {
		return articleList;
	}
	public void setArticleList(List<articledto> articleList) {
		this.articleList = articleList;
	}
}
List<articledto>의 wrapper클래스
<bean id="action.board.list" class="net.bluesky.gui.board.ListAction" p:articledto-ref="dto.article" p:requestdto-ref="dto.request" p:dao-ref="dao.board" p:targetlist="swing.board.list" p:pageinfodto-ref="dto.pageInfo"/>
<bean id="swing.board.list" class="net.bluesky.gui.board.ListJFrame" p:articledto-ref="dto.article"/>
<bean id="dto.articleList" class="net.bluesky.model.board.ArticleListDTO"/>
위의 ArticleListDTO를 사용한 정의

구현을 할 때 리스트나 테이블과 같은 자료구조형의 데이터의 모델을 만들 때 이러한 wrapper클래스가 유용하다.
반응형
profile

파란하늘의 지식창고

@Bluesky_

내용이 유익했다면 광고 배너를 클릭 해주세요