이전글
자바빈(Java Beans)이란
자바빈은 자바빈 규약 또는 자바빈 관례에 따라 만들어진 클래스를 의미합니다. 즉 자바빈 규약이라는 어떠한 관례(또는 규칙)이 있고 이 규칙에 맞게 작성된 Java 클래스를 말합니다. 이 클래스로 만들어진 인스턴스(객체)를 자바빈 객체라고 합니다. 규약은 대략 다음와 같습니다.
-
패키지 - 자바빈은 기본(default)패키지 이외의 특정 패키지에 속해 있어야 한다.
-
기본 생성자가 존재해야 한다.
-
멤버변수의 접근제어자는 private로 선언되어야 한다.
-
멤버변수에 접근 가능한 getter 와 setter 메서드가 존재해야 한다.
-
getter 와 setter는 접근자가 public으로 선언되어야 한다.
-
직렬화 되어 있어야 한다. (선택사항)
특정한 규약에 부합하여 작성하였기 때문에 자바빈 클래스들의 구조는 동일한 규칙성을 가지게 됩니다. 규약에 대해서 자세히 알고 싶은 분은 이전글을 참고해 주시기 바랍니다. 여튼 이러한 규칙성을 이용하면 여러 장점이 있습니다.
다음은 자바빈 규약에 맞게 작성된 User 클래스입니다.
package com.dololak;
//default 패키지가 아닌 com.dololak.servlet 패키지에 속함
public class User {
//멤버 변수의 접근 제어자는 private
private String name;
private Long age;
private String address;
//기본 생성자가 존재함
public User() {}
/*
* 멤버 변수에 대한 getter setter가 존재하며,
* get 또는 set 이후에 첫글자는 멤버변수명의 대문자로
* 그 이후는 소문자로 함
*/
public String getName() { return name; }
public void setName(String name) { this.name = name; }
public Long getAge() { return age; }
public void setAge(Long age) { this.age = age; }
public String getAddress() { return address; }
public void setAddress(String address) { this.address = address; }
} |
cs |
getter와 setter메서드는 메서드명에 get 또는 set으로 표기하고 멤버변수명의 첫 글자를 대문자로 변경하는 식으로 작성합니다. 나중에 액션태그에서 이러한 명명규칙을 이용하기 때문에 규칙을 지켜주어야 합니다. 멤버변수가 boolean 형식인 경우 isManager 와 같이 is~~~ 형식으로 메서드를 명명합니다.
자바빈 객체를 사용했을때 장점
것들을 할 수 있는데, 그중 대표적인것이 JSP의 <jsp:useBean> 액션태그를 사용할 수 있다는 점 입니다.<jsp:useBean> 액션태그는 현재 JSP 페이지가 서블릿으로 변환되는 과정에서 자바코드로 변경되는데, new MyBean().. 과 같이 자바빈 객체가 생성되는 코드로 변환됩니다. 즉 스크립트 태그로 간단하게 자바 코드를 대체하는 것입니다.
또한 평소에 사용하는 HTML의 FORM 데이터를 자바빈 객체를 이용하여 추출할 수 있습니다. 우리가 알고 있는 방법은 HttpServletRequest 즉 request 객체의 getParameter() 메서드를 통해 추출하는 방법이지만 파라미터가 여러개라면 개수가 증가할수록 번거로워집니다. 그러나 FORM 데이터에 맞게 작성된 자바빈을 이용하면 한번에 추출이 가능합니다.
마지막으로 자바빈은 여러개의 JSP 페이지에서 전달과 공유가 용이합니다. 따라서 여러개의 데이터를 여러 페이지에서 공유해야 하는 경우 하나의 자바빈 객체로 만들어 간단하게 전달할 수 있습니다. 표준 액션태그로 자바빈 사용을 지원하기 때문에 간결한 코드를 통해 기능을 구현할 수 있습니다. 그렇게 되면 웹 어플리케이션의 생산성 및 유지보수성이 늘어나게 됩니다.
정리하자면 다음과 같습니다.
-
FROM 태그에 입력한 여러개의 요청 파라미터를 하나의 자바빈으로 처리 가능
-
JSP 페이지간의 데이터 전달 및 공유시 자바빈을 통해 한번에 처리 가능
-
자바빈을 사용하기 위한 표준 액션태그들로 인해 코드가 간결해짐
<jsp:useBean> 액션태그로 자바빈 객체 생성하기
useBean 액션태그를 사용하면 자바빈 객체를 생성할 수 있습니다. 자바빈 관련 액션태그가 존재하지 않았을 때에는 다음과 같이 개발자가 직접 코딩을 해주어야 했습니다. 우리가 평소에 사용하는 생성자를 이용한 객체 생성입니다.
User newUser = new User(); |
cs |
useBean을 사용하면 다음과 같이 변경됩니다. class 속성에는 빈 객체로 생성할 클래스명을 적어주고 id에는 생성된 자바빈 객체를 구분할 수 있는 식별자를 지정해줍니다. 이는 JSP가 서블릿으로 변환되었을 때 변수명으로 사용됩니다. useBean 액션태그는 내부적으로 기본생성자를 사용하기때문에 자바빈 클래스에는 기본 생성자가 존재해야 합니다.
<jsp:useBean class="com.dololak.User" id="newUser" /> |
cs |
만약 id가 기존에 생성된 자바빈과 중복이 되는 경우 새로 자바빈 객체를 생성하지 않고 사용합니다. 즉 기존에 생성되었던 자바빈 객체를 그대로 이용합니다. 기존에 사용되지 않는 id값이었다면 새로 생성합니다. 만약 자바빈 알고리즘을 표현한다면 다음와 같습니다.
User myUser = new User();
if (myUser == null) { //기존에 myUser 빈이 있다면 새로 생성하지 않음.
myUser = new User();
} |
cs |
<jsp:useBean> 액션태그의 속성
useBean 액션태그의 사용 형식은 다음과 같습니다.
<jsp:useBean id="빈 객체의 식별자" class="자바빈 클래스" scope="자바빈 객체의 사용 범위" /> |
cs |
-
id - JSP페이지에 생성된 자바빈 객체에 접근할 때 사용될 식별자입니다.
-
class - 자바빈 클래스를 패키지 경로까지 포함하여 지정합니다.
-
scope - 자바빈 객체가 생성되고 살아가는 생존 범위를 지정합니다. 이 값에 따라서 자바빈의 공유 범위가 달라집니다. page, request, session, application 중 하나를 갖으며, 지정하지 않는 경우 page 범위를 갖습니다. 속성 값은 글 상단의 이전글 링크의 기본객체 범위와 관련 있습니다.
다음은 useBean 액션태그에 scope를 request로 지정해 주는 경우입니다.
<jsp:useBean id="myUser" class="com.dololak.User" scope="request" /> |
cs |
이경우 액션태그는 실제로 다음과 같이 동작합니다. 만약 scope 값을 다른 영역으로 지정한 경우에는 해당 영역의 attribute에 저장되어 범위에 맞게 공유될 수 있습니다.
User myUser = (User)request.getAttribute("myUser");
if (myUser == null) {
myUser = new User();
request.setAttribute("myUser", myUser);
} |
cs |
속성을 다루는 액션태그
이번글에서는 <jsp:useBean>액션태그에 대해 알아보았습니다. 자바빈 객체를 생성하거나 얻는경우에는 <jsp:useBean> 액션태그를 사용한다고 했는데, 결정적으로 객체는 자기 자신만의 상태값들을 가집니다. User 객체의 경우는 name과 age, address가 있었습니다.
그렇다면 이러한 상태값. 즉 속성을 다루는 액션태그도 존재할 것입니다. 상태값을 다루는 액션태그에는 <jsp:setProperty>와 <jsp:getProperty>가 있습니다. 이 둘에 대해서는 다음글을 통해서 알아보도록 하겠습니다.
다음글
'Servlet&Jsp' 카테고리의 다른 글
[서블릿/JSP] 쿠키(Cookie)에 한글 데이터 저장하고 가져오기 (0) | 2018.09.11 |
---|---|
[서블릿/JSP] 톰캣 쿠키(Cookie)에 한글 저장시 Control character in cookie value or attribute 오류 (1) | 2018.09.11 |
[서블릿/JSP] 자바빈(Java Beans)의 속성을 다뤄보자. <jsp:setProperty>와 <jsp:getProperty> 액션태그 (0) | 2018.09.06 |
[서블릿/JSP] include 또는 forward시에 request 객체를 통해 데이터 공유하기 (0) | 2018.09.03 |
[서블릿/JSP] <jsp:forward> 액션 태그 <jsp:param> 태그로 데이터 전달하기 (0) | 2018.09.02 |