bean 이란 무엇일까?

bean 은 jsp 프로그래밍에서 데이터를 담는 그릇 이라고 보면된다.

흔히 이것은 데이터베이스 테이블에 하나의 row 를 담는 용도로 쓴다.

그런데 여기서 문제는 그 프로그램이 간단할때는 상관없다.

점점 복잡해 지면 질수록 이 bean 을 뜯어 고치는일이 정말 귀찮은 일이라는 것이다.

솔직히 완벽한 기획이라는것은 없다고 본다.

기획을 해놓고 고치고, 고치고, 고치면서 프로그램이 완성되어 나가는것이지 처음부터 완벽할순 없다.

여기서 고치고,고치고, 고치는 과정에서 bean 까지 고쳐야 하는 상황이 빈번하다.

bean 을 고치게되면 그것을 쓰게되는 상위 계층의 모든 프로그램을 약간씩 수정해 줘야한다.

예를들어 어떤 테이블에 필드가 하나 추가되었다고 하자.

이 상황을 어떻게 반영시킬 것인가?

예를들면..

일단 그 테이블에 해당하는 bean의 set 과 get 을 추가한다.

bean 을 쓰는 상위계층(예를들면 dao 같은... )에서 추가된 set 과 get 을 적용할수 있도록 약간씩 수정해준다.

마지막으로 출력부에서 get 을 이용하여 출력하는부분을 손봐준다.

이건 간단한 프로그램을 예로든거지만 복잡하면 할수록 더욱 계층화 되어있을수도 있다.

이거 무지하게 귀찮은 작업이 아닐수가 없다.

이런 귀차니즘을 해결하기위해 서는 고정적인 bean 말고 가변적인 collection 객체를 사용하는게 낳을꺼 같다.

필드가 변경되면 알아서 갱신되도록 만든다면 저런 귀찮은작업 없이 쉽게 할수있지 않을까?

'자유글' 카테고리의 다른 글

메리대구 공방전 중에서..  (20) 2007.07.14
우리 포도밭 guard 를 소개합니다.  (748) 2007.07.06
웹2.0 과 framework  (42) 2007.07.02
PDA 수리 사이트  (46) 2007.06.09
천상고원  (42) 2007.05.25
by cranix 2007. 7. 3. 00:21

예를들어 Bean 클래스를 만들었는데 toString 메소드를 만들어서 출력하게 하고싶다고 치자 어떻게 해야할까?

뭐 가장 쉬운 방법은 get 메소드를 하나하나 호출해서 붙혀서 알맞게 출력하는 방법이겠지만, 그게 답이라면 이글을 쓸필요도 없겠다.

정말 간단한 답이 있었다.
일단 아파치 자카르타 프로젝트의 Commons Lang 에서 제공하는 API 를 이용하여 메소드들을 쉽게 구현할수 있다.
이 라이브러리는 toString 말고도 equals,hashCode 도 쉽게 만드는 방법을 제공한다.

BaseObject 라는 클래스를 아래와같이 만들어서 모든 Bean 클래스에 적용해 주면된다.



- BaseObject.java

[code]package dic.model;

import java.io.Serializable;

import org.apache.commons.lang.builder.*;

@SuppressWarnings("serial")
public class BaseObject implements Serializable {
 public String toString() {
  return ToStringBuilder.reflectionToString(this,ToStringStyle.MULTI_LINE_STYLE);
 }
  public boolean equals(Object o) {
  return EqualsBuilder.reflectionEquals(this, o);
 }
 
 public int hashCode() {
  return HashCodeBuilder.reflectionHashCode(this);
 }
}[/code]

- Member.java

[code]package dic.model;

import java.util.Date;

import javax.servlet.http.HttpSessionBindingEvent;
import javax.servlet.http.HttpSessionBindingListener;

import dic.member.MemberManager;

public class Member extends BaseObject implements HttpSessionBindingListener{
 private String id;
 private String password;
 private String name;
 private String auth_id_list;
 private String file_id_list;
 private Date reg_date;

 public String getId() {
  return id;
 }
 public void setId(String s) {
  id = s;
 }
 
 public String getPassword() {
  return password;
 }
 public void setPassword(String s) {
  password = s;
 }
 
 public String getName() {
  return name;
 }
 public void setName(String s) {
  name = s;
 }
 
 public String getAuthIdList() {
  return auth_id_list;
 }
 public void setAuthIdList(String s) {
  auth_id_list = s;
 }
 
 public String getFileIdList() {
  return file_id_list;
 }
 public void setFileIdList(String s) {
  file_id_list = s;
 }
 
 public Date getRegDate() {
  return reg_date;
 }
 public void setRegDate(Date d) {
  reg_date = d;
 }
 
 // 세션에 입력될때
 public void valueBound(HttpSessionBindingEvent event) {
  MemberManager.getInstance().doLogin(this);
 }
 // 세션에서 제거될때
 public void valueUnbound(HttpSessionBindingEvent event) {
  MemberManager.getInstance().doLogout(this);
 }
 
 public static void main(String args[]) {
  Member m = new Member();
  m.setId("cranix");
  m.setPassword("1234");
  m.setName("크래닉스");
  System.out.println(m);
 }
}[/code]


 - 실행결과

dic.model.Member@8813f2[
  id=cranix
  password=1234
  name=크래닉스
  auth_id_list=<null>
  file_id_list=<null>
  reg_date=<null>
]


' > Spring' 카테고리의 다른 글

Spring jsp 예외처리 전략  (20) 2007.05.30
Spring 의 exception 처리 전략  (26) 2007.05.29
기본 Controller 지정하기.  (23) 2007.05.24
SPRING  (25) 2007.02.28
JSTL 사용하기  (28) 2007.02.28
by cranix 2007. 5. 26. 01:10
| 1 |