갈림길 이정표

[JSP] javaBeans *개념 미완성* 본문

Programming Language/Servlet & JSP

[JSP] javaBeans *개념 미완성*

이몽뇽 2020. 8. 26. 19:35

구구단 예제는 하도 많이 풀어봐서 for문을 써야 된다는 원리는 잘 알고 있다. 만약 Gugudan이라는 1~9와 곱한 결과를 배열로 저장시키는 java Class (POJO) 를 생성하고 JSP를 이용하여 호출할 경우 <% ... %>태그안에 Gugudan 객체 생성 (호출할 때마다 새로운 객체를 생성하므로 비효율적), 혹은 인스턴스를  생성 [Singleton패턴] 및 공유하며 HTML문서와  왔다갔다 하느라 코드의 길이가 길어지고 가독성이 떨어진다.

하지만 만약 이 과정을 한줄 코드로 사용 가능하다면 어떨까?

 

오늘은 이것을 가능하게 해주는 javaBeans에 대해 알아보자


 javaBeans (자바빈즈)

자바로 작성된 소프트웨어 컴포넌트이다. (Servlet & JSP 책 참고)


[gugu.html]

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>beans구구단</title>
</head>
<body>
'beans'를 사용한 구구단 출력 <br>
<form action="gugu.jsp" method="post">
 단 입력: <input type="text" name="dan">
<input type="submit">
</form>
</body>
</html>
[Gugudan.java]

package pack;

public class Gugudan {	//POJO (순수 자바 멤버들로 구성된 클래스)
	
	private static Gugudan gugudan = new Gugudan();	//GOF의 Singleton 패턴
	
	public static Gugudan getInstance() {
		return gugudan;	//한번만 생성(?)
	}
	
	public Gugudan() {

	}
	
	public int[] computeGugu(int dan) {
		int[] gu = new int[9];
		for (int i = 1; i < 10; i++) {
			gu[i-1] = dan * i;
		}
		return gu;
	}
}
[gugu.jsp]

<%@ page import="pack.Gugudan"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
**(beans를 알기 전)현재 내 기술로 할 수 있는 방법 **<br>
<%
int dan = Integer.parseInt(request.getParameter("dan"));
out.println(dan + " 단 출력<br>");

//Gugudan gugudan = new Gugudan();
/*(상속(is a)은 할 수 없어) 클래스 포함(has a)관계 → 하지만 매번 새로운 객체를 생성하기 때문에 비효율적 ∴해결책: 싱글톤*/
Gugudan gugudan = Gugudan.getInstance();
/*Singleton 패턴(객체 생성 X, Instance 한개 생성해 하나의 주소를 공유) → 포함관계로써 여전히 부담스러움. 	∴해결책: BEANS*/

int re[] = gugudan.computeGugu(dan);
for(int a = 0; a < 9; a++){
	out.println(dan + "*" + (a + 1) + "=" + re[a] + "&nbsp;&nbsp;");
}	//나중에 ELJST를 이용해 해결 가능
%>

<hr>

**Beans 사용 **<br>
<jsp:useBean id="gugu" class="pack.Gugudan" scope="page"/>
<!-- 새로 만들 객체명, PATH명을 정확히 배워야 함 (싱글톤 패턴을 내부적으로 해줌) -->
<!-- scope="page"가 default = 현재 jsp 페이지에서만 유효하다는 뜻
| application: 서비스가 되는 모든 페이지에 유효(너무 범용적이라 안씀)
| session: 하나의 클라이언트의 모든 파일에서 유효 (초기화되지 않음)
| page, request: 클라이언트가 부를 때마다 계속 초기화됨-->
<%
int re2[] = gugu.computeGugu(dan);	//gugu!
for(int a = 0; a < 9; a++){
	out.println(dan + "*" + (a + 1) + "=" + re2[a] + "&nbsp;&nbsp;");
}	
%>
</body>
</html>

위 코드블럭에서 보듯이 javaBeans에는 규칙이 있다.

Comments