JSP

[JSP] (7)Java Beans 컴포넌트

EunaSon 2022. 5. 9. 10:21

앞선 예제들은 순수하게 JSP만 이용해 HTML 코드와 Java 코드를 뒤섞어 놓은 코딩이었다.

이런 방식으로 코딩을 하면 페이지가 복잡해질수록 html 코드와 jsp 코드를 알아보기 힘들어 지고,

중복되는 코드, 예를 들어 database 커넥션을 얻는 등의 과정들이 페이지마다 일어나야 한다면 각 페이지마다 수작업으로 코딩해주어야 한다.

 

JSP에서는 java beans 라고 하는 컴포넌트 모델을 제공해준다.

컴포넌트 모델을 사용하면 정적인 컨텐츠, 즉 html 디자인 부분과 jsp 코드를 분리할 수 있다.

view 쪽을 담당하는 프리젠테이션 부분과 비즈니스 로직은 Java Beans를 사용해 분리할 수 있다.

* 비즈니스 로직

 

컴포넌트란 컴포넌트 자체에 인스턴스 필드와 해당 필드에 대해 특정 작업을 수행할 수 있는 메소드로 이루어진 하나의 집합체이다.

이렇게 묶인 컴포너느는 외부의 어떤 지시에 의해 자신의 로직을 충실히 수행하여 그 결과치를 다시 외부로 전달해준다.

* 인스턴트 필드, 필드 개념 :

 

이 컴포넌트 모델인 자바 빈즈는 크게 어떠한 결과치를 눈으로 보여주는 빈즈와 눈에 보이지 않는 작업을 해주는 두 가지 형태가 존재한다.

 

결과치가 눈에 보이는 형태의 대표적인 프로그램들은 Visual Tool들이다.

AWT나 Swing 같은 프로그램을 작성할 때 Jbuilder 같은 프로그램을 사용하게 되면 버튼이나 기타 컴포넌트 모델들을 작성할 때 마우스로 만들고자 하는 컴포넌트를 선택하고 속성을 부여하게 되면 해당 컴포넌트의 속성이 프로그램에 반영되게 된다.

이러한 작업들은 자신이 어떠한 변수를 가지고는 있지만 그 변수의 값이 미리 정의되지 않은 상태에 있고, 사용자가 어떠한 값을 집어넣으면 그 값에 대해 작동할 수 있는 로직을 만들어두고 들어온 값에 대한 비즈니스 로직을 수행한 후 결과를 비주얼하게 보여준다는 것이다.

눈에 보이지 않는 형태는 누에 보여지는 형태와 동작은 비슷하지만 결과치를 눈으로 보여주지 않는다는 차이만 있다.

 

이러한 컴포넌트 모델은 캡슐화 되어 있어 자신의 비즈니스 로직은 철저히 내부로 숨기고 그 결과치만 사용자에게 통보하게 되어있으므로 컴포넌트를 사용하는 사용자는 ~~한 메소드를 호출하면 ~~한 결과가 나온다는 것만 알고 있으면 된다.

이러한 비즈니스 로직에 대한 수정작업이 이루어질 때에도 프레젠테이션 로직에는 영향이 없고 반대인 경우에도 마찬가지이다.

 

컴포넌트 중심 설계는 시간과 비용의 절감과 페이지(사용자에게 보여지는 화면) 설계(코딩)의 단순화의 장점을 갖는다.

예를 들어, 자동차 한 대를 만들기 위해서는 엔진 배기량, 최대 승객 수, 최고 속도 등에 대한 규약이 있듯 어떠한 표준이 부여되어 있다.

이러한 규약을 준수해 엔진 컴포넌트, 차체 컴포넌트, 차량용 오디오 컴포넌트 등을 각각의 컴포넌트로 개발하고, 이렇게 만들어진 컴포넌트를 하나로 조립하면 자동차가 나온다.

이처럼 어떠한 프로젝트를 진행할 때 표준이 매우 중요하며, 컴포넌트 설계를 통한 분업화, 컴포넌트의 재사용성을 말할 수 있다.

조립된 하나의 자동차(=웹 어플리케이션)를 타다가 핸들이 맘에 들지 않으면 우리는 핸들과 관련된 컴포넌트(표준을 준수한!)를 교체하면 된다.

 

- 자바 빈즈의 구성

클래스 설계 시 객체지향적이며 재사용성을 고려하고, 작성된 클래스가 빈즈 스펙을 따르면 된다.

자바 빈즈는 사용되는 곳과 기능에 따라 크게 세 가지로 나눠볼 수 있다.

 

1) 눈에 보여지는 컴포넌트를 만들어 낼 수 있는 빈즈

2) EJB... 옛날방식. 지금은 안씀. -> Spring Framework가 나옴

3) JSP 내에서 사용하는 JSP 빈즈 => 우리가 공부할 것. 

 

빈즈의 내부는 프로퍼티 부분, 프로퍼티의 값을 정의하는 부분, 프로퍼티의 값을 얻어오는 부분으로 구성된다.

프로퍼티는 빈이 가지고 있는 고유의 특성을 정의한다.

프로퍼티는 인스턴스 변수라고 볼 수 있고, 이 프로퍼티는 자신의 변수 값을 private 로 은폐하고 있다.

프로퍼티는 그 값을 클래스를 통하여 직접 변경하지 못한다. 프로퍼티 값을 바꾸거나 값을 얻어오려면 해당 프로퍼티에 대해 작동하는 메서드를 호출하여야 한다.

 

프로퍼티에 대하여 값을 읽어낼 수 있는 성질을 read 속성이라 부르며, 값을 정의하는 성질을 write 속성이라 한다.

하나의 프로퍼티에 대해 읽기 속성만 있다면 그 프로퍼티는 read-only 성격, 프로퍼티에 값을 설정하는 부분만 있다면 write-only 성격, 두 가지의 성질이 같이 부여되어 있다면 read/write 프로퍼티라고 한다.

 

해당 프로퍼티에 대해 동작할 수 있는 메서드를 만들 때 약간의 규칙이 있다.

프로퍼티에 대해 동작하는 메서드는 반드시 public 속성이어야 하며, 값을 읽어와야 하는 read 속성을 지정한 메서드 이름은 get으로 시작해야 하고, 값을 정의하는 wirte 속성의 메서드는 set으로 시작해야 한다.

 

이러한 이름 규칙을 지키고 하나의 클래스를 작성하게 되면 프로퍼티 시트를 만들 수 있다.

프로퍼티 시트는 해당 빈의 프로퍼티들이 가질 수 있는 값들에 대한 설명, 가능한 액세스 등의 정보를 테이블 형태로 표현한 것을 말한다.

이를 근거로 빈의 프로퍼티의 이름, 사용목적, 사용 방법 등을 알 수 있다.

 

프로퍼티들의 동작방식을 알아보자.

 

- 이벤트

이벤트는 어떠한 행위가 일어났을 때 다른 빈들에게 이를 알려주는 역할을 한다.

컴포넌트에 행위가 가해졌을 때 리스너들은 이벤트 오브젝트에 알리고, 이벤트 핸들러 메소드에 의해 처리된다.

 

- 프로퍼티

프로퍼티는 빈이 가지고 있는 고유한 특성을 정의하며 각각의 프로퍼티에 대한 기능과 행동 양식을 정의할 수 있는 setter/getter 메소드를 가지고 있다.

Setter 속성이 write 속성이고, getter 속성이 read 속성이 된다.

 

프로퍼티는 반드시 전역변수(not 지역변수, 함수 밖에서 선언된 변수)인 것은 아니다.

만약, TimeStamp(1970년 1월 1일 0시 이후 현재까지의 초)를 매개변수로 넘겨주고, 그것을 사람이 알아보기 쉬운 형태의 날짜로 반환하는 메서드가 있다고 할때, 이것은 메서드 내부에 프로퍼티를 설정하고 가공한 결과치를 프로퍼티에 대입해 해당 메서드를 호출한 지점으로 반환하면 된다.

 

자바 빈 스펙에서 사용할 수 있는 빈 프로퍼티의 종류와 사용방법에 대해 알아보자.

자바 빈 스펙에서는 프로퍼티를 네 가지로 분류한다.

 

- Simple Properties

심플 프로퍼티는 일반적인 프로퍼티처럼 setter/getter 메서드를 갖는 일반적인 빈즈의 프로퍼티를 말한다.

 

- Index Properties

빈 프로퍼티는 반드시 하나의 값을 받고 값을 던져야 할 이유는 없다.

상황에 따라 여러 개의 데이터를 설정해야 할 경우도 있고, 여러 개의 값을 받아야 할 경우도 있다.

만약, 직원 명단을 알아야 하는 경우에는 배열로 반환해야 하고, 직원들을 새로 작성할 때에는 값을 배열로 넘겨줘야 할 것이다.

인덱스 프로퍼티에 담기는 값들은 동일한 타입이어야 한다.

 

- Bound Properties

바운드 프로퍼티는 빈 객체의 생성을 알리거나 프로퍼티의 값이 변화했다는 것을 다른 객체에 알리는 역할을 하는 메소드가 사용하는 속성을 말한다.

만약, 직원들을 나타내는 프로퍼티 중 부서를 나타내는 프로퍼티가 바뀐다면 해당 부서의 매니저도 바뀔 것이다.

즉, dept 프로퍼티가 바뀜으로 인해 manager 프로퍼티도 같이 바뀌어야 하는 것이다.

하나의 프로퍼티 값이 바뀌면 다른 프로퍼테에 영향을 미치고, 이때 영향을 주는 프로퍼티를 바운드 프로퍼티라고 한다.

 

- Constrained Properties

이 속성은 프로퍼티의 값이 제한된다는 말이다.

즉 하나의 프로퍼티는 유효한 범위 내의 값을 가져야 할 때 사용하게 되는 메서드이다.

만약 날짜를 입력받는 프로퍼티가 있을 때, 이 프로퍼티는 1일~31일 까지의 숫자만 입력받아야 한다. 이때 입력받은 수가 1보다 작거나 31보다 크다면 이 날짜는 유효한 날짜가 아니라는 말이다.

프로퍼티의 값이 일정한 범위 내에서 액세스 되야 하며 이 범위 내에서만 설정이 되어야 하는 것을 말한다.

 

'JSP' 카테고리의 다른 글

[JSP] (8)JSP 파일에서 자바빈 사용하기  (0) 2022.05.11
[JSP] (6)쿠키와 세션  (0) 2022.05.08
[JSP] (5)JSP Action 태그  (0) 2022.05.08
[JSP] (4)JSP 내장객체  (0) 2022.05.02
[JSP] (3)JSP의 이해  (0) 2022.04.27