전체 글 (165)
2024-11-24 22:44:12

데이터 정의어

  • 데이터베이스의 3층 스키마를 정의
  • 데이터베이스 여러 개체 기술

 

개체

  •  Table : 행과 열로 구성된 2차원 테이블로 데이터를 저장하는 개체
  • View : 하나 이상의 테이블로부터 유도된 데이터의 부분집합 개체
  • Index : 빠른 검색을 위해 사용하는 개체
  • Sequence : 순차적인 숫자 값을 생성하는 개체

테이블 (Table)

  • 테이블은 데이터를 저장할 수 있는 개체
  • 테이블 생성 : Create Table
    • CREATE TABLE table‐name
      ( column‐name1 data‐type default‐value,
      column‐name2 data‐type default‐value,
      ┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉┉
      column‐name data‐type default‐value );
    • CREATE TABLE table‐name
      AS sub‐query;
타입 속성
NUMBER(n, m) 숫자 데이터에 대한 정의에 사용
CHAR(n) 문자 데이터에 대한 정의에 사용
VARCHAR2(n) 가변길이 문자데이터에 대한 정의에 사용
DATE 날짜 데이터에 대한 정의에 사용
LONG  2GB의 가변길의 문자 데이터에 대한 정의에 사용
TIMESTAMP 년, 월, 일, 시, 분, 초 6자리 소수부 초 형태로 시간정보를 정의에 사용
LOB 4GB의 텍스트, 동영상, 이미지, 사운드 등에 대한 정의에 사용
ROWID 각 행에 대한 논리적인 위치( 주소), 의사열
  • 테이블 변경 : Alter Talble
    • 새로운 열 추가
    • ALTER TABLE table‐name
      ADD (column‐name1 data‐type,
      column‐name2 data‐type,
      ┉┉ );
    • 열 구조 변화
    • ALTER TABLE table‐name
      MODIFY (column‐name1 data‐type,
      column‐name2 data‐type,
      ┉┉ );
    • 열 삭제
    • ALTER TABLE table‐name
      DROP ( column‐name1 , column‐name2 ┉┉ );
  • 테이블 삭제 : Drop Table
    • Drop Table table-name;
  • 테이블 이름 변경
    • Rename old_table_name To new_table_name;
  • 테이블 내의 데이터 삭제
    • Truncate Table table-name;

 

제약 조건

  • 도메인 제약 조건 : 각 열의 값은 반드시 해당 도메인에 속하는 원자
  • 키 제약 조건 : 테이블에는 테이블의 각 레코드를 유일하게 실별할 수 있는 수단 즉, 최소한 하나의 기본키를 가지고 있어야 한다.
  • 무결성 제약 조건 (integrity constraint)
    • 엔티티 무결성(entity integrity) : 기본키 속성들의 값은 어떠한 경우에도 널 값을 가질 수 없다.
    • 참조 무결성(referential integrity) : 한 테이블에 있는 레코드가 다른 테이블에 있는 레코드를 참조하려면 반드시 참도되는 레코드가 그 테이블 내에 존재해야 한다.(외래키)
제약 조건 설 명
NOT NULL 열에 NULL 값을 허용하지 않음
UNIQUE KEY 열 또는 열의 조합이 유일성(유일한 값)을 가져야 함
PRIMARY KEY 열 또는 열의 조합이 NULL값이 아니며, 유일성을 가져야 함
FOREIGN KEY 다른 테이블의 열을 참조하는 테이블에 값이 존재하여야 함
CHECK 열에 들어갈 값에 대한 조건을 명시함

제약 조건 선언

  • Not Null - constraint 제약조건 이름 NOT NULL
  • Unique Key - constraint 제약조건 이름 UNIQUE
  • Primary Key - constraint 제약조건 이름 PRIMARY KEY(속성 명);
  • Foreign Key - constraint 제약조건 이름 FOREIGN KEY (속성 명) REFERENCES 테이블명(속성 명);
  • CHECK - constraint 제약조건 이름 CHECK (속성 명 - 조건);

제약 조건 확인

select * from user_constraints where 테이블 명 = '테이블 명';

제약 조건의 삭제

DROP CONSTRAINT 제약조건 명

  • ALTER Table 테이블 명 drop constraint 제약조건 명

제약 조건의 활성화, 비활성화

Alter Table 테이블 명

Disalbe / Enable CONSTAINT 제약조건 명;

 

뷰 (VIEW)

  • 외부단계
  • 가상 테이블
  • 질의 변형
  • 장점 
    • 데이터베이스를 재구성하여 논리적 데이터 독립성 제공
    • 원하는 데이터 만을 조작함으로 데이터의 보완기능 강화

VIEW의 생성과 삭제

생성

Create View 뷰 이름

AS 부질의

 

삭제

Drop View 부 이름

 

VIEW의 종류

단순 뷰

단순 뷰는 단일 베이스 테이블로 부터 유도된 뷰이다.

Create or replace view v_student1

as select * from student where sty_dept='컴퓨터정보';

조인 뷰

조인뷰는 2개 이상의 베이스 테이블로부터 유도된 뷰이다.

Create or replace view v_enrol1

as select sub_name, a.sub_no, stu_no, enr_grade

from enrol a, subject b

where a.sub_no = b.sub_no;

인라인 뷰

인라인 뷰는 From절에 SELECT 문으로 정의된 뷰이다.

select stu_no, stu_name, a.stu_dept, stu_height

from student a, (select stu_dept, avg(stu_height) as avg_height

from student

group by stu_dept) b

where a.stu_dept = b.stu_dept

and a.stu_hegiht > b.avg_height;

TOP-N 뷰

최댓값 또는 최솟값을 가진 열에 몇 개의 레코드만 추출할 때 사용되는 기능

Select stu_no, stu_name, stu_height

from (select stu_no, stu_name, stu_height

from student

where stu_height is not null

order by stu_height desc)

where rownum <= 5;

 

인덱스 (INDEX)
빠른 검색을 위하여 정의되며, 한 개 이상의 열로 구성됨.
학생 테이블의 학번은 기본 키이므로 자동으로 인덱스 정의.
이름으로 검색하는 질의가 많을 경우 이름으로 인덱스를 정의.
학과로 검색하는 경우가 극히 적다면 학과를 인덱스로 정의할 경우 활용도가 떨어지며, 기억공간은 낭비된다.
데이터 사전의 USER_INDEXS, USER_ID_COLUMS


학생의 이름으로 인덱스 생성 - Create INDEX i_stu_name on student(stu_name);

학생의 학번과 이름을 합쳐서 인덱스를 생성 - Create INDEX i_stu_no on student(stu_no, stu_name);

유일한 값으로 인덱스 생성 - Create UNIQUE INDEX i_stu_name on student(stu_name);

함수나 수식을 이용하여 인덱스 생성 - Create INDEX i_stu_weight on student(stu_weight-5);


인덱스 생성 유무 및 상태 분석

Select * from user_indexes

where table_name='STUDENT';


인덱스 삭제

drop index i_stu_name;



시퀀스 (SEQUENCE)
어떤 연속적인 숫자 값을 자동적으로 증가하여 사용



시퀀스 생성

Create SEQUENCE 시퀀스 명

Increment by n

Start n

Maxvalue n | NoMaxvalue

Minvalue n | NoMinvalue

Cycle | NoCycle

Chache | NoCache;



시퀀스 삭제

Drop SEQUENCE 시퀀스 명

'SQL' 카테고리의 다른 글

패키지 / 트리거  (1) 2024.11.25
프로시저 / 함수 / 커서 - 페치 / 예외처리  (0) 2024.11.25
PL/SQL  (0) 2024.11.25
join  (0) 2024.10.08
2024-10-17 00:51:04

표준 태그 라이브러리

  • Jsp Standard Tag Library의 약자
  • JSP에서 개발자가 추가할 수 있는 커스텀 태그를 모아놓은 표준
    • <jsp:include> 와 같은 태그를 개발자가 추가할 수 있는 태그
  • 역할
    • 스크립틀릿 코드의 사용빈도 감소
    • 더욱 간결하고 이해하기 쉬운 JSP 코드를 작성 가능
  • 종류
라이브러리 주요 기능 접두어 관련 URI
코어 변수 지원
흐름제어
URL 처리
c http://java.sun.com/jsp/jstl/core
XML XML 코어
흐름 제어
XML 변환
x http://java.sun.com/jsp/jstl/xml
국제화 지역
메시지 형식
숫자 및 날짜 형식
fmt http://java.sun.com/jsp/jstl/fmt
데이터베이스 SQL sql http://java.sun.com/jsp/jstl/sql
함수 컬렉션 처리
String 처리
fn http://java.sun.com/jsp/jstl/functions

JSTL 코어 태그

변수 설정이나 if-else 와 같은 논리 처리에 사용되는 스크립트 코드를 대체하는 태그를 제공한다

 

taglib 디렉티브 추가

<%@  taglib prefix="c" uri="htp://java.sun.com/jsp/jstl/core" %>

기능 분류 태그 설 명
변수 지원 set JSP에서 사용할 변수를 설정한다
remove 설정한 변수를 제거한다
흐름 제어 if 조건에 따라 내부 토드를 수행한다
choose 다중 조건을 처리할 때 사용한다
forEach 컬렉션이나 Map의 각 항목을 처리할 때 사용된다
forTokens 구분자로 분리된 각각의 토큰을 처리할 때 사용한다
URL 처리 import URL을 사용하여 다른 자원의 결과를 삽입한다
redirect 지정한 경로로 리다이렉트 한다
url URL을 재작성한다
기타 태그 catch 익셉션을 처리할 때 사용
out JspWriter에 내용을 출력한다

 

  • 변수 지원 태그 - <c:set>, <c:remove>
    • EL 변수의 값이나 EL 변수의 프로퍼티 값을 지정할 때 사용
    • set
      • <c:set var="변수명" value="값" [scope="영역"] />
      • <c:set var="변수명" [scope="영역"] > 값 </c:set>
      • <c:set target="대상" property="프로퍼티 이름" value="값" />
      • <c:set target="대상" property="프로퍼티 이름"> 값 </c
    • remove
      • <c:remove var="변수명" [scope="영역"/>
      • 주의 : 삭제할 변수의 scope를 지정해주지 않으면 동일한 이름으로 저장된 모든 영역(request, response, page, application)의 변수를 삭제한다.
  • 흐름 제어 태그 - <c:if> <c:choose> <c:forEach> <c: forToken>
    • if
      • 자바 언어의 if 블록과 유사한 기능을 제공
      • <c:if test="조건"> --- </c:if>
    • choose / when / otherwise
      • 자바의 switch 구문과 if-else 블록을 혼합한 형태
      • 다수의 조건문을 하나의 블록에서 수행할 때 사용
      • <c:choose>
             <c:when test=“${member.level == ‘trial’}”>
                  . . .
             </c:when>
             <c:otherwise>
                  . . .
             </c:otherwise>
        </c:choose>
    • forEach 
      • 배열, Collection 또는 Map에 저장되어 있는 값들을 순차적으로 처리할 때 사용
      • 자바의 for, do-while 등을 대신해서 사용할 수 있다
      • < c:forEach var=“변수” items=“아이템">
             . . .
             ${변수 사용}
             . . .
        < /c:forEach>
    • forToken
      • 주어진 문자열을 구분자로 나누어  토큰으로 만듦
      • < c:forTokens var=“토큰” items=“문자열“ delims=“구분자”>
             ${token}의 사용
        < /c:forTokens>
    • url 처리 태그 url - redirect
      • URL 관련 처리를 위한 태그
      • URL 생성 : <c:url>
        • <c:url value="URL" [var="변수명" scope="영역">
                <c:param name="이름" value="값"/>
          </c:url>
        • 리다이렉트 처리 : <c:redirect>
          • <c:redirect url="URL 변수/ 경로"/>
    • out
      • JspWriter에 대이터를 출력할 때 사용되는 태그
      • <c:out value="값" [escapeXml="(true/false)"]
      • escapeXml의 값이 true면 특정 문자가 변환되어 출력된다

JSTL 국제화 태그

  • 특정 지역에 따라 알맞은 메시지를 출력해야 할 떼 사용
  • JSP 페이지에서 다양한 언어에 맞는 메시지 출력 기능을 제공

<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt>

 

기능 분류 태그 설 명
로케일 지정 setLocale Locale을 지정한다
requestEncoding 요청 파라미터의 캐릭터 인코딩을 지정한다
메시지 처리 bundle 사용한 번들을 지정한다
message 지역에 알맞은 메시지를 출력한다
setBundle 리소스 번들을 읽어와 특정 변수에 저장한다
숫자 및 날짜 포맷팅 formatNumber 숫자를 포맷팅한다
formatDate Date 객체를 포맷팅한다
parseDate 문자열로 표시된 날짜를 분석해서 Date 객체로 변환
parseNumber 문자열로 표시된 날짜를 분석해서 숫자로 변환
setTimeZone 시간대 정보를 특정 변수에 저장한다
timeZone 시간대를 지정한다

 

  • <fmt:setLocale> : 국제화 태그들이 사용할 로케일을 지정
  • <fmt :requestEncoding> : 요청 파라미터의 캐릭터 인코딩을 지정

'JSP공부' 카테고리의 다른 글

표현 언어 Expression Language  (0) 2024.10.04
JavaBeans 자바빈  (0) 2024.10.04
JSP 액션 태그  (1) 2024.10.03
JSP  (1) 2024.10.03
Servlet  (0) 2024.10.03
2024-10-15 10:55:24

202144098이상현_SW프로젝트계획서.hwp
9.33MB

2024-10-08 14:49:50

cross 조인

  • 크로스 조인은 관게 대수가 가지는 8가지 연산 중 카티션 프로덕트를 구현함
  • 2개 이상의 테이블을 조건 없이 실행하는 조인 연산

SELECT *
FROM STUDENT CROSS JOIN ENROL;

Equi 조인 

  • 2개 이상의 테이블에 관련있는 공통 열의 값을 이용하여 논리적으로 결합하는 연산이 수행되는 조인
    • NATURAL JOIN
      • select stu_no, stu_name, stu_dept, stu_grade
        from student natural join enrol;
      • 두 테이블에 같은 열의 이름이 2쌍 이상 존재하면 사용 못함
    • Join ~ Using
      • select stu_no, stu_name, stu_dept, stu_grade
        from student join enrol using(stu_no)
    • Join ~ on
      • select stu_no, stu_name, stu_dept, stu_grade
        from student join enrol on student.stu_no = enrol.stu_no

 

Non-Equi 조인

  • where 절에서 사용하는 '=' 이 아닌 연산자를 사용
  •  select empno, ename, sal, grade
     from salgrade, emp
     where sal between losal and hisal

 

SELF 조인

  • 같은 테이블 간의 조인, 테이블의 별칭을 사용함
  • select a.empno as 사원번호, a.ename as 사원이름,b.empno as 상급자사원번호, b.ename as 상급자이름
    from emp a, emp b
    where a.mgr = b.empno; 
  • join ~ on 만 사용 가능
  • select a.empno as 사원번호, a.ename as 사원이름, b.empno as 상급자사원번호, b.ename as 상급자이름
    from emp a join emp b on a.mgr = b.empno;

 

'SQL' 카테고리의 다른 글

패키지 / 트리거  (1) 2024.11.25
프로시저 / 함수 / 커서 - 페치 / 예외처리  (0) 2024.11.25
PL/SQL  (0) 2024.11.25
데이터 정의어 - DDL  (0) 2024.11.24
2024-10-06 01:55:01

Tab Control

  • 기능 : 한 화면에 다양한 Function 표현

ProgressBar Control

  • 기능 : 작업 진행 상태 표현
    private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {                                         
        // TODO add your handling code here:
        //Thread thread = new PBarThread(jProgressBar1);
        new Thread()
        {
            @Override
            public void run()
            {
                int Delay = 50;
                int minvalue = jProgressBar1.getMinimum();
                int maxValue = jProgressBar1.getMaximum();

                for (int i = minvalue; i < maxValue; i++)
                {
                    try{
                        int iValue = jProgressBar1.getValue();
                        jProgressBar1.setValue(iValue + 1);
                        Thread.sleep(Delay);
                    }catch(Exception ex){}
                }
            }
        }.start();
        // 익명함수를 이용하여 Thread 클래스 사용
    }
    // 프로그레스 바 진행

 

Slider Control

private void jSlider1StateChanged(javax.swing.event.ChangeEvent evt) {                                      
        // TODO add your handling code here:
        int volume = 0;
        volume = jSlider1.getValue();
        String str = Integer.toString(volume);
        
        lblVolume.setText(str);
        txtInput.setText(str);
    }    
    //슬라이더의 변화를 label, textField에 출력
    
    
   private void txtInputActionPerformed(java.awt.event.ActionEvent evt) {                                         
        // TODO add your handling code here:
    }                                        
    class PBarThread extends Thread
    {
        JProgressBar objProgressBar;
        public PBarThread(JProgressBar objPB)
        {
            objProgressBar = objPB;
            objProgressBar.setStringPainted(true);
        }
        
        public void run()
        {
            int minValue = objProgressBar.getMinimum();
            int maxValue = objProgressBar.getMaximum();
            
            for (int i = minValue; i < maxValue; i++)
            {
                try {
                int iValue = objProgressBar.getValue();
                objProgressBar.setValue(iValue + 1);
                Thread.sleep(500);
                }
                catch(InterruptedException ex) {}
            }
        }
    }
    //textField의 변화를 Slider에 적용

'Window프로그래밍' 카테고리의 다른 글

Checkbox, Radio Button, Choice, Combo Box, List  (2) 2024.10.05
Label, Button, TextField/Area  (0) 2024.10.05
Window 프로그래밍 개요  (0) 2024.10.05
2024-10-05 23:30:31

Checkbox control

  • 기능 : 다중 선택 구현
  • 생성자
Constructor 기 능
Checkbox() Blank checkbox 생성
Checkbox(String text) Text 문자열의 checbox 생성
Checkbox(String text, Boolean state) Text 문자열을 가지며. state 값에 따라 선택 여부를 결정
Checkbox(String text, Boolean state, CheckboxGroup group) Text 문자열을 가지며, state 값에 따라 선택 여부 결정한다.
group 으로 명시된 그룹의 check box 생성
  • 메서드
Method 기 능
setText(Strign text) Check Box의 텍스트 지정
String getText() Check Box의 text 반환
setSelected(Boolean b) Check Box의 선택 여부 지정
Boolean isSelected() Check Box의 선택 여부 반환

Radio Control

  • 기능 : 단일 선택
  • 메서드
Method 기 능
setText(String text) Radio Button의 text 지정
String getText() Radio Button의 text 반환
setSelected(Boolean b) Radio Button의 선택 여부 지정
Boolean isSelected() Radio Button의 선택 여부 반환

Combo Box Control

  • 기능 
    • Drop-Down 리스트 구현
    • addItem() 메서드를 사용하여 drop-down 항목 추가
  • 메서드
Method 기 능
int getItemCount() Item 수 반환
String getItemAt(int index) Index 에 해당하는 Item 반환
void addItem(Object obj) Obj를 Combo Box Item으로 추가
Object getSelectedItem() 선택된 Item 반환
int getSelectedIndex() 선택된 Iten의 Index를 반환

Choice Control

  • 기능
    • Drop-down 리스트를 구현할 때 사용
    • addItem() 메서드를 사용하여 drop-down 항목 추가
  • 메서드
Method 기 능
int counrItems() Choice 컨트롤의 Item 수 반환
String getItem(int index) Index 에 해당하는 Item 반환
void addItem(String item) Item을 choice Item으로 추가
String getSelectedItem() 선택된 Item 반환
int getSelectedIndex() 선택된 항목의 Index 반환
void selected(int index) index에 해당하는 Item 선택
void selected(String str) str에 해당하는 Item 선택

List Control

  • 기능 : 다중 Item이 리스트에 나타나도록 구현
  • 생성자
Constructor 설 명
JList() 전달 인자가 없는 Constructor
JList(Object[] listData) 배열 형태로 데이터를 갖는 list 생성
JList(Vector<T> listData) 벡터를 데이터로 갖는 list 생성
JList(ListModel dataModel) 데이터 모델을 갖는list 생성
  • 메서드
Method 기 능
getSize() List의 Item 수 반환
void setListData(Object[] listData) Object 클래스로 List에 추가
void setListData(Vector<T> listData) Vector 클래스로 List에 추가
int getSelectedIndex() 선택된 Item의 Index 반환
int[] getSelectedIndices() 다중 선택 모드일 때, 선택된 Item의 index를 배열로 반환
int setSelectedIndex() 선택된 Item의 index 지정
int[] setSelectedIndices() 다중 선택 모드일 때, 선택된 Item의 index배열 지정

'Window프로그래밍' 카테고리의 다른 글

TablePane, Progress Bar, Slider Control  (0) 2024.10.06
Label, Button, TextField/Area  (0) 2024.10.05
Window 프로그래밍 개요  (0) 2024.10.05
2024-10-05 21:55:46
  • Label  Control
  • 기능 : 고정 문자열을 표시
  • 생성자
Constructor 기 능
Label() Black label 생성
Label(String text) Text가 좌측에 Layout 되는 label 생성
Label(String text, int alignment) Alignment 값에 따라 text가 Layout된 lable 생성
Alignment 값
○ Label.LEFT
○  Label.CENTER
○  Label.ROGHT
  • 메서드
Method 기 능
String getText() Label의 Text 반환
String setText(String label) Label에 Text 설정
void setAlignment(int align) Lable의 Text 위치 결정
int getAlignment() Label의 Text 위치를 반환

Button Control

  • 기능 : Button을 생성할 떄 사용
  • 생성자
Constructor 기 능
Button() 제목 없는 Button 생성
Button(String label) Label로 주어진 문자열 제목의 Button 생성
  • 메서드
Method Function
String getLable() Button 제목 return
void setLabel(String label) Button 제목 변경

TextField Control

  • 기능 : 단일 문자열 입력
  • 형식
TextField strInput = new TextField(str, size)
str Textfiled에 표시될 기본 문자열
size Textfield 크기

 

  • 메서드
Method 기 능
public String getText() 입력된 문자열 반환
void setText(String str) 문자열 str을 TextField에 지정
public String getSelectedText() 선택된 문자열 반환
public void setEditable(boolean b) TextField에 입력 여부 결정 (true/false)

 

TextArea Control

  • 기능 : 다중 문자열 입력
  • 형식
TextArea strInput = new TextArea(str, rows, cols)
str TextArea에 표시될 기본 문자열
rows
cols
  • 메서드
Method 기 능
void append(String str) 기존의 문자열에 str 문자욜 추가
int getColumns Column 수 반환
int getRows Row 수 반환

 

2024-10-05 18:50:05

AWT

  • AWT (Abstract Windows ToolKit)
  • 정의 : GUI를 구축하기 위한 클래스들의 모음
  • 종류 
    • 사용자 Interface 클래스
    • 그래픽 처리 클래스
  • 구조
    • Compoent : Window 환경의 Compoenet(Button, CheckBox, ---)
    • java.awt 클래스로 객체 모델링
Component Function
Lable 고정 문자열 표시
Button 버튼
TextField 1 line 문자열 입력
TextArea 여러 line 문자열 입력
Checkbox 체크박스, 옵션 버튼을 작성
Choice Drop-down 리스트를 작성
Camvas 그리기 공간 작성
List 리스트 작성
Scrollbar 스크롤바 작성

  • 메서드
Method Function
Public Dimension getSize() Component 현재의 크기를 Dimensoin 클래스 객체로 변환
Public void setForeground(Color c)
Public void setBackground(Color c)
Text 색 결정
Text 외의 색 결정
Public void setFont(Font f) Font 설정
Public void setEnabled(boolean b) false : inactive status
void setBounds(int x, int y, int width, int hegith)
void setSize(Dimension d)
Component 위치 지정
Component 크기 지정
void setVisible(boolean b)  true : 화면에 출력
false : 화면에서 사라짐

 

Swing

  • 정의 : 순수한 자바 언어로 지원되는 GUI 개발 도구
  • 특성
    • Plattform에 독립적이다
    • 새로운 Component 제작이 쉽다
    • ToolTip Function을 제공
    • AWT Component를 제공
  • AWT vs Swing
    • AWT : plattform에 종속적인 c언어 기반으로 작성
    • Swing : 100% Java로 구현되어 Plattform에 독립적
  • Swing의 클래스 구조 
    • java.lang.Object 
    • java.lang.Component
    • java.awt.Container
    • javax.swing.JComponent

Event

  • 정의 : 윈도우 컴포넌트가 클릭되었을 때 발생하는 메시지
  • 구성
    • Event Source
      • Event를 발생시키는 Button, Mouse, Keyboard, --- 등의 Component
    • Event Class
      • 특정 Component에 따라 발생하는 Event를 분류한 것
    • Event Handler
      • Event 처리를 위한 Class
Event Class 설 명
ActionEvent Component가 활성화 될 때 발생
AdjustmentEvent 스크롤바와 같이 조정 가능한 Component에서 조정이 있을 때 발생
ContainerEvent Container에 Component가 추가/삭제 되는 경우 발생
FocusEvent Component에 focus가 들어왔을 때 발생
ItemEvent List, choice, --- 등의 Component에서 선택 항목이 선택될 때 발생
KeyEvent 키보드 입력에 의해서 발생
MouseEvnet 마우스 움직임에 의해서 발생
PaintEvent Component가 그려져야 할 때 발생
TextEvent Text Component의 내용이 변화할 때 발생
WindowEvent Window 활성화, 또는 종료할 때 발생

Event Handler

  • Listner Interface
    • 각 Event를 처리하기 위해, 준비된 mothod를 선언한 Interface
    • Evnet + Listner
    • 예제
class MyActionListener implements ActionListener
{
    public void actionPerformed(ActionEvent ae)
    {
        System.out.println(“Action Event가 발생했습니다.”);
    }
}
2024-10-04 05:00:36

표현 언어(EL)란

  • 다른 형태의 스크립트 언어로서 스크립트 요소 중 하나이다.
  • 표현식보다 간결하고 편리하다
  • 기능
    • JSP의 네 가지 기본 객체가 제공하는 영역의 속성 사용
    • 수치 연산, 관계 연한, 논리 연산자 제공
    • 자바 클래스 메소드 호출 기능 제공
    • 쿠키, 기본 객체의 속성 등 JSP 를 위한 표현 언어늬 기본 객체 제공
    • 람다식을 이용한 함수 정의와 실행
    • 스트림 API를 통한 컬렉션 처리
    • 정적 메소드 실행
  • 구성
    • ${ expression }
  • EL 에서 사용할 수 있는 기본 객체
기본 객체 설 명
pageContext JSP의 pageContext 기본 객체와 동일하다
pageScope pageContext 기본 객체에 저장된 속성의 <속성, 값> 매핑을 저장한 Map 객체
requestScope request 기본 객체에 저장된 속성의 <속성, 값> 매핑을 저장한 Map 객체
sessionScope session  기본 객체에 저장된 속성의 <속성, 값> 매핑을 저장한 Map 객체
applicationScope application  기본 객체에 저장된 속성의 <속성, 값> 매핑을 저장한 Map 객체
param 요청 파라미터의 <파라미터 이름, 값> 매핑을 저장한 Map 객체
paramValues 요청 파라미터의 <파라미터 이름, 값 배열> 매핑을 저장한 Map객체
header 요청 정보의 <헤더 이름, 값> 매핑을 저장한 Map 객체
headerValues 요청 정보의 <헤더 이름, 값 배열> 매핑을 저장한 Map 객체
cookie <쿠키 이름, Cookie> 매핑을 저장한 Map 객체
initParam 초기화 파라미터의 <이름, 값> 매핑을 저장한 Map 객체

 

예제

<%@ 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>
<%
	request.setAttribute("name", "홍길동");
	session.setAttribute("ID", "admin");
	application.setAttribute("appValue", "EL Object");
%>

<h3>
 요청 URI : ${pageContext.request.requestURI}<br>
 code의 파라미터 : ${param.code }<br>
 쿠키의 JSESSIONID 값 : ${cookie.JSESSIONID.value}<br>
 request의 name 속성: ${requestScope.name }<br>
 session의 ID 속성: ${sessionScope.ID }<br>
 application의 appValue 속성: ${applicationScope.appValue}<br>
	request의 name 속성 : ${name }<br>
	session의 ID 속성 : ${ID }<br>
</h3>
</body>
</html>

include혹은 forward로 받은 param이 없기 때문에 code의 파라미터는 공백

EL의 기본 연산자

  • 수치 연산자 : +, -, *, / (또는 div), % (또는 mod), 단항연산자(-)
    • 자바 연산자와 동일
    • 수치 연산자는 정수 타입과 실수 타입에만 적용
    • 숫자 타입과 객체를 수치 연산자와 함께 사용하는 경우
      • 해당 객체를 숫자로 변환 후 연산 수행
      • $ {"10" + 1} => 11
  • 비교 연산자 : ==, !=, <, >, <=, >=
    • 자바 연산자와 동일
    • 문자열을 비교할 경우 String.compateTo() 메소드 사용
    • ${ value == "홍길동" } 으로 사용 가능
  • 논리 연산자 : && (and), || (or), ! (not)
  • empty 연산자 : 검사할 객체가 텅 빈 객체인지 검사
    • empty<값>
    • <값> 이 null 이면 true
    • <값> 이 빈 문자열 ("") 이면 true
    • <값> 이 길이가 0인 배열이면 true
    • <값> 이 빈 Collection이면 true
    • 이 외의 경우에는 false 
  • 비교 선택 연산자 : <수식> ? <값> : <값2>
  • 문자열 연결
    • + 연산자를 이용한 문자열 연결은 불가능
    • += 연산자를 통해 문자열 연결
  • 세미콜론 연산자
    • 세미콜론 연산자를 이용하면 두 개의 식을 붙일 수 있다.
    • ex) ${ 1 + 1; 10 + 10 }  => 출력 결과는 20
  • 할당 연산자
    • 할당 연산자를 이용하면 코드를 사용하여 EL 변수를 생성할 수 있다.
    • ex) ${ var = 10 }
    • 주의점 : 할당 연산자도 출력 결과를 생성하므로, 할당만 원할 경우 세미콜론(;)  후에 빈 문자열 ('')로 출력을 안보이게 해야함

<%@ 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>
<jsp:useBean id="calc" class="Week6.calc"/>
<jsp:setProperty name="calc" property="*"/>
<body>
<h3>EL 연산자 결과</h3>
<br>
x = ${calc.num1 }, y = ${param.num2 }<br>
x + y = ${requestScope.num1 + calc.num2 }<br>
x - y = ${pageScope.num1 + param.num2 }<br>
x * y = ${paramValues.num1[0] * calc.num2 }<br>
x / y = ${calc.num1 / calc.num2 }<br>
x % y = ${calc.num1 % calc.num2 }
<hr>
x와 y가 모두 양수입니까? ${calc.num1 > 0 && calc.num2 > 0 }<br>
x와 y가 같습니까? ${calc.num1 == calc.num2 }
<hr>
${id ="admin"}<br>
${strArr = ['가', '나', '다']; '' }<br>
strArr의 값은 ${strArr }입니다.
<hr>
${var == "admin" }<br>
${strArr[0] += strArr[1] += strArr[2] }<br>
</body>
</html>

 


람다식

람다식 호출 방법

  • 람다식은 함수의 일종
  • 람다식을 할당한 greaterThan을 함수처럼 호출
    •  ${ greaterThan = (a, b) -> a > b ? true : false; '' }
    • ${ greaterThan(1, 3) }
  • 람다식을 특정 변수에 할당하지 않고 바로 호출 가능
    • ${ ((a,b) -> a > b ? true : false)(1, 3) }
  • 재귀 호출도 가능
    • ${ factorial = (n) -> n == 1 ? 1 : n * factorial(n - 1); '' }
    • $ {factorial(5) }

<%@ 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>
<h3>람다식 예제</h3>
1. 두 개의 숫자 중 큰 수 찾기<br>
${max = (a, b) -> a > b ? a : b;'' }
(3, 5) 중 큰 수 = ${max(3, 5) }<br><br>

2. 두 문자열이 같은지 체크하기<br>
${strEQ = (str1, str2) -> str1 == str2; '' }
("admin", "홍길동") 두 문자열은 같은가? ${strEQ("admin", "홍길동") }<br><br>

3. 피타고라스의 정리<br>
${Func = (a, b) -> Math.sqrt(a*a + b*b); '' }
두 변의 길이가 3, 4인 직각 삼각형의 빗변의 길이는 ${Func(3, 4) }이다<br>
</body>
</html>

 

스트림 API 

  • EL문은 for문이나 while 문과 같은 반복문을 제공하지 않는다.
  • EL 3.0 버전부터는 컬렉션 객체를 위한 스트림 API가 추가되었다.
  • 세미콜론 연산자와 할당 연산자를 사용하면 EL 만으로 표현 가능
    • ${ lst = [1, 2, 3, 4, 5]; sum = lst.stream().sum();'' }
  • 스트림(stream)은 컬렉션의 저장 요소를 하나씩 참조해서 람다식으로 처리할 수 있도록 해주는 반복문
    • 기본 형식

  • stream()을 이용한 스트림 생성
    • List를 포함한 java.util.Collection 타입의 객체에 대해 stream() 메소드를 실행하면 EL 스트림 객체를 생성한다
    • 일단 스트림을 생성하면 스트림 객체를 이용해서 중간 변환과 최종 연산을 통해 새로운 결과를 생성할 수 있다.

사용 가능한 메소드

  • distinct() 중복 제거
  • filter() 원하는 조건에 맞는 데이터 추출
  • map() 데이터 변환
  • sorted() 데이터 정렬
    • 내림차순으로 정렬하고 싶은 경우에는 sorted() 메소드에 값을 비교할 때 사용할 람다식을 전달한다
    • (x1, x2) -> x1 < x2 ? 1 : -1
    • 두 값을 비교해서 순서를 바꿔야 한다면 1, 그렇지 않다면 -1
  • limit() 데이터 개수 제한
  • toList(), toSet(), toMap() : 자료 구조로 리턴
  • sum() : 합계
  • count() : 계수
  • average() : 평균
  • min(), max() : 최소값, 최대값

<%@ 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>
	${varList = [2, 11, 7, 4, 8, 5, 8]; '' }
	${varList.stream().distinct().toList() }<br>
	${varList.stream().filter(x -> x % 2 == 0).toList() }<br>
	${varList.stream().sorted((x1, x2) -> x1 < x2 ? 1 : -1).toList() }<br>
	${varList.stream().sorted().toList() }<br>
	${varList.stream().sum() }<br>
	${varList.stream().count() }<br>
	${varList.stream().average().get() }<br>
	${varList.stream().min().get() }<br>
	${varList.stream().max().get() }<br>
	${varList.stream().map(x -> x * x).toList() }<br>
	
	
</body>
</html>

 

'JSP공부' 카테고리의 다른 글

표준 태그 라이브러리 JSTL  (0) 2024.10.17
JavaBeans 자바빈  (0) 2024.10.04
JSP 액션 태그  (1) 2024.10.03
JSP  (1) 2024.10.03
Servlet  (0) 2024.10.03
2024-10-04 03:24:30

자바빈의 개요

  • 자바빈은 속성(데이터), 변경 이벤트, 객체 직렬화를 위한 표준
    • JVM 메모리의 객체 데이터를 바이트 형태로 변환하는 기술
  • JSP에서는 속성을 표현하기 위한 용도로 사용
  • 현재까지 작성해온 JSP 페이지의 문제점
    • JSP 페이지에 화면 표출 부분과 데이터 핸들링 부분이 혼재
    • 동일한 데이터를 사용할 경우 페이지마다 코드가 반복됨
    • JSP 페이지와 데이터 로직을 분리해거 모듈화하는 작업이 필요
    • JSP 페이지의 데이터 속성 부분을 분리
    • 자바빈을 이용한 코드 재사용으로 프로그램의 효율을 높임
    • 프로그램 유지 보수 관리도 용이자바빈을 사용하는 목적

작성 순서

  1.  package 명 기술
  2. 사용할 package import
  3.  JavaBean 클래스 선언
    • 클래스명 규칙
    • 첫 글자는 영문 대문자로 시작하고, 나머지는 소문자를 사용
    • 단어를 여러 개 합칠 때는 시작되는 단어의 첫 글자를 대문자로
  4. 자바빈의 속성(property, 멤버 변수) 선언
    • 각 속성들의 접근 제한자는 private로 선언해야 한다
  5. 자바빈의 메소드 선언
    • 속성들에 접근하기 위한 getter(), setter() 메소드는 접근 제어자를 public으로 선언해서 작성
package Week5;

public class MemberInfo {
	// 자바빈 클래스
	// 속성(property)은 반드시 private
	
	private String id;
	private String password;
	private String name;
	private String registerDate;
	private String email;
	// property를 읽기 위한 getter,
	// 쓰기 위한 setter가 필요
	// getter와 settet는 소문자로 이루어져있다가 가져와야 할 데이터가 대문자로 되어있어야만 인식한다.
	public String getId() {
		return id;
	}
	public void setId(String id) {
		this.id = id;
	}
	public String getPassword() {
		return password;
	}
	public void setPassword(String password) {
		this.password = password;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getRegisterDate() {
		return registerDate;
	}
	public void setRegisterDate(String registerDate) {
		this.registerDate = registerDate;
	}
	public String getEmail() {
		return email;
	}
	public void setEmail(String email) {
		this.email = email;
	}
}

 

<jsp:useBean> 태그를 이용한 자바 객체 사용

  • JSP 페이지의 주된 기능은 데이터를 보여주는 것이다.
  • 게시판의 글 목록보기,  글 읽기, 회원 정보 보기 등 자바빈과 같은 클래스에 담아서 값을 보여주는 것이 일반적.

자바빈을 사용하기 위한 3가지 액션 태그

자바빈 액션 태그 설 명
<jsp:useBean> 자바빈 객체를 생성하는 액션 태그
<jsp:setProperty> 생성된 자바빈 객체에 프로퍼티 값을 저장하는 액션 태그
<jsp:getProperty> 생성된 자바빈 객체에서 저장된 프로퍼티 값을 가져오는 액션 태그

 

<jsp:useBean> 액션 태그를 사용하여 객체 생성하기

<jsp:useBean id="[빈 이름]" class="[자바빈 클래스 이름]" scope="[범위]" />

액션 태그 속성 설 명
id JSP 페이지에서 자바빈 객체에 접근할 때 사용할 이름을 지정
class 패키지 이름을 포함한 자바빈 클래스의 완전한 이름을 입력
scope 자바빈 객체를 저장할 영역을 지정
page, request, session, appliction 중 하나를 값으로 가진다.
기본값은 page

 

ex) <jsp:useBean name="member" class="week5.MemberInfo" scope="request" />

<jsp:setProperty> & <jsp:getProperty>

<jsp:setProperty> 액션 태그를 사용하면 생성한 자바빈 객체의 프로퍼티 값을 변경 할 수 있다.

액션 태그 속성 설 명
name 프로퍼티의 값을 변경할 자바빈 객체의 이름을 지정한다.
<jsp:useBean> 액션 태그의 id 속성에서 지정한 값을 사용한다
property 값을 지정할 프로퍼티의 이름을 지정한다
value 프로퍼티의 값을 지정한다
표현식 (<%= 값 %>)이나 EL(${값}) 을 사용할 수 있다

 

ex) <jsp:setProperty name="member" property="name" value="홍길동">

 

<jsp:getProperty> 액션 태그를 사용하면 생성한 자바빈 객체의 프로퍼티 값을 읽어올 수 있다.

액션 태그 속성 설명
name <jsp:useBean> 액션 태그의 id 속성에서 지정한 값을 사용한다
property 출력할(값을 읽어올) 프로퍼티의 이름을 지정한다

 

ex) <jsp:getProperty name="member" property="name">

'JSP공부' 카테고리의 다른 글

표준 태그 라이브러리 JSTL  (0) 2024.10.17
표현 언어 Expression Language  (0) 2024.10.04
JSP 액션 태그  (1) 2024.10.03
JSP  (1) 2024.10.03
Servlet  (0) 2024.10.03