<Web 개요>

Web/Web 개요 2010. 2. 18. 14:11

1. History of Web
   CGI(Common Gateway Interface) -> Servlet(사용자들의 요청에 응답을 다양하게 할 수 있는 컨테이너)
   -> JSP -> ...
 
2. Web 처리방식
   클라이언트(웹브라우져) -요청(request)-> 서버(server)-응답(response)-> 클라이언트

3. 서비스를 제공하는 Web Application(A/S 센터) Deploy(배포) 구조
                                Root(최상위 폴터)
                                          |
    html img css js      WEB-INF(web.xml)
                                                          |    |          |
                                                  classes  lib(jar)  tld

4. DD(Deployment Descriptor) : web.xml
   -> 웹 어플리케이션을 서버에 deploy 할때 사용되는 배치 기술서

Posted by 미스터네오
,

<JSP 정리>

Web/JSP 정리 2010. 2. 18. 13:55

<<<<<<<<<<<<<<<<<<<<< JSP(Java Server Pages)>>>>>>>>>>>>>>>>>>>
1. 장점

   (1) 서블릿보다 만들기 쉽고, 빠르다
   (2) 디자인(HTML/JS/CSS)과 로직(JAVA)을 분리시킬 수 있다. 즉, 디자이너와 프로그래머의 일을 분업화할 수 있다.
   (3) 프로그래머가 직접 코딩한 Servlet 보다 최적화된 Servlet을 생성시켜 효율적인 코드를 생산한다.
   (4) Java Beans 사용이 쉽다.
   (5) 웹 어플리케이션상에서 변수의 유효범위(scope) 설정이 간편

2. JSP를 이루는 구성인자
   (1) 지시어 (directive)
       <1> 형태 : <%@ 지시어 %>
       <2> 종류 : page, include, taglib ...
              [1] page - contentType(내용물 형식 MIME Type 입력)
                   "text/html; charset=euc-kr"
                    - import(자바 import 동일) "java.sql.*, java.io.*"
                    - errorPage(익셉션 발생시 갈 페이지 지정)
                   "/error/error.jsp"
                    - isErrorPage (현재 jsp를 에러페이지 지정)
                       false(기본값)| true(exception 사용가능)
              [2] include (한 페이지에 다른 페이지를 포함)
              [3] taglib (커스텀 태그를 사용시)
   (2) 스크립팅 원소
       <1> 기능 : JSP 페이지에서 자바코드를 직접 사용할 수 있게 해주는 기능 제공
       <2> 종류 및 형태
              [1] 선언(declaration) <%! 자바코드 %> : 메소드,멤버변수 선언
              [2] 스크립트릿(scriptlet) <% 자바코드 %> : 자바코드 실행
              [3] 식(expression) <%= 자바코드 %> : 화면에 문자를 표시
   (3) JSP 액션 (JSP 태그)
       <1> 정의 : JSP에서 표준으로 정의된 태그
       <2> 형태 : <jsp:태그명>
       <3> 종류 : useBean, setProperty, getProperty, include, forward ...
              [1] useBean : Bean 객체를 생성해서 특정 영역에서 사용
                    - id : 변수명이자 scope(영역)에서 저장될때 이름
                    - class : 실제 만들어질 클래스의 명 ex) dept.DeptService
                    - scope : 객체가 영향을 끼치는 범위 page < request < session < application
                    참고) useBean 태그 바디부(<jsp:useBean>바디</jsp:useBean>에 있는 내용은 Bean 객체가
                            처음으로 만들어질때만 실행된다
              [2] setProperty : Bean 객체에 특정 프로퍼티에 값을 세팅
                   - name(*) : 변수명(useBean의 id)
                   - property(*) : Bean 객체 안의 프로퍼티명(멤버변수명)
                   - param : html의 input 태그 이름같은것들(파라미터명)
                   - value : 직접 값을 세팅
              [3] getProperty : Bean 객체에서 프로퍼티의 값을 가져온다.
                   - name(*)
                   - property(*)
                     c.f.) <%=bean.getProperty()%> 와 같다
              [4] forward : 특정 페이지로 요청을 전달(다른 페이지로 이동)
                   - page : 웹어플리케이션내의 특정 자원의 주소
              [5] include : 특정 페이지를 현재 페이지에 포함
                   (참고) 변수의 범위 설정 (scope 설정)
                   - page : 하나의 jsp 페이지내에서만 유효
                   - request : 하나의 요청에 대한 응답 jsp 페이지(들)에 유효
                   - session : 사용자에 대해 유효(웹브라우져 단위)
                   - application : 하나의 웹 어플리케이션 전체 유효

3. Java Beans
   (1) Beans 의 정의
        - 넓은 의미 : 자바 컴포넌트(기능덩어리)
        - 좁은 의미 : 자바 컴포넌트 중에서 Beans 규약에 맞는 컴포넌트
   (2) Beans 규약
       <1> 기본 생성자 (default constructor) 존재해야한다.
       <2> 속성(property)을 지정(private)
              - 속성이름은 html의 <input> 태그의 이름과 같아야 한다.
       <3> 속성을 세팅하거나 접근할 수 있는 get/set메소드(public)
              - 첫번째 문자는 대문자로 ex) getName, setName
   (3) 종류
       <1> 비주얼 컴포넌트 빈즈(JSP와 상관없음)              ex) TextField, Button
       <2> 데이터 빈즈 (Data Beans) : 데이터를 담아두는 객체를 만드는 컴포넌트
       <3> 서비스 빈즈 (연산이나 서비스 기능 Beans, Worker 빈즈)

4. JSP 디폴트 객체 (9개)
   (1) 정의 : 객체를 따로 생성하지 않고 스크립트릿(<%%>) 사이에서 사용 가능한 객체들을 의미
   (2) 종류
       <1> application -- ServletContext
              -> Web Application 전체의 정보를 가지는 객체
       <2> config    -- ServletConfig
              -> 서블릿/JSP의 구성정보를 가지는 객체
       <3> session   -- HttpSession
              -> 현재 사용자의 세션정보를 가지는 객체
       <4> request   -- HttpServletRequest
              -> 클라이언트의 요청정보를 가지는 객체
       <5> response  -- HttpServletResponse
              -> 클라이언트에게 줄 응답정보를 가지는 객체
       <6> page      -- Object(this)
              -> JSP 현재 페이지 자신을 의미하는 객체
       <7> pageContext -- PageContext(Custom Tag에서 봅니다)
              -> 다른 디폴트 객체들을 자바단에서 접근할 수 있는 방법을 가지는 객체
       <8> out        -- JspWriter
              -> 클라이언트의 브라우져에 연결된 출력 객체
       <9> exception  -- JspException
              -> 에러처리 관련 객체

5. JSP의 라이프 사이클
   jspInit() --> _jspService() --> jspDestroy()

6. EL (Expression Language)
   (1) 스크립팅을 전혀 쓰지 않을 수 있는 최신 기술
   (2) 내장객체 ${map.name}
       <1> pageScope
       <2> requestScope
       <3> sessionScope
       <4> applicationScope
       <5> param   HTTP의 파라미터들 Map
       <6> paramValues  하나의(name이 같은) 파라미터의 값들 Map
       <7> header   헤더정보들 Map 
       <8> headerValues 하나의 헤더의 정보들 Map
       <9> cookie   쿠키들 Map
       <10> initParam  컨텍스트의 초기화 파라미터들 Map
       <11> pageContext jsp 내장객체 (Map 아니다)
   (3) 도트(.) 연산자 사용의 특징
       <1> .의 왼쪽은 Map 이나 Beans 타입이어야 한다.
       <2> .의 오른쪽 항상 Map 의 키값이나 Beans 의 프로퍼티명이다.
   (4) [] 연산자 사용의 특징 (${list["value"]})
       <1> []의 왼쪽은 Map, Beans, 배열, List 타입이 올 수 있다.
       <2> []안의 값은 문자열일 경우 키값, 프로퍼티명, 인덱스가 온다.
       <3> []안의 값이 숫자인 경우는 그냥 인덱스로 인식되는데, 문자여도 숫자형식이면 괜찮다.
       <4> []안은 계속해서 중첩이 가능하다. ${list[list2[0]]}
  (5) EL은 연산자들을 사용할 수 있다.
       <1> 산술연산자 : + - * /(div) %(mod)
       <2> 논리연산자 : &&(and) ||(or) !(not)
       <3> 관계연산자 : ==(eq) !=(ne) <(lt) >(gt) <=(le) >=(ge)
  (6) 예약어들 : true, false, null, instanceof(향후 사용 예정), empty(null 혹은 "" 비었는지 체크)

7. JSTL (JSP Standard Tag Library)
  (1) 설치 : apache -> jakarta -> taglib 에서 다운로드 standard
      <1> jstl.jar, standard.jar 파일을 톰캣의 lib 폴더나 쓰고싶은 어플리케이션의 WEB-INF/lib 폴더에 넣어준다.
      <2> (1.0) *.tld 파일들을 WEB-INF/tld 폴더에 넣는다.
      <3> (1.0) web.xml에 설정을 잡는다.

 <jsp-config>
     <taglib>
        <taglib-uri>http://java.sun.com/jsp/jstl/core</taglib-uri>
        <taglib-location>/WEB-INF/tld/c.tld</taglib-location>
     </taglib>
     <taglib>
        <taglib-uri>http://java.sun.com/jsp/jstl/fmt</taglib-uri>
        <taglib-location>/WEB-INF/tld/fmt.tld</taglib-location>
     </taglib>
 </jsp-config>

  x, sql 도 있다. 
  (2) 코어 라이브러리
      <1> 수식 : catch, out, remove, set
      <2> 제어흐름 : choose, when, otherwise, forEach, forTokens, if
      <3> URL 관리 : import, param, redirect, url

8. 보안
  (1) 보안의 4요소
      <1> 인증(Authentication) : ID와 패스워드를 확인하여 인증된 사용자인지 검증하는 작업
      <2> 인가(Authorization) : 접근 가능한 자원인지를 판단하고 확인하는 작업
      <3> 비밀보장(Confidentiality) : 인증된 사용자만이 특정한 자원에 접근할 수 있다는 개념
      <4> 데이터무결성(Data Integrity) : 전송되는 데이터가 안전하다는 개념(암호화된 데이터 전송)
  (2) 실제 Tomcat 에서 적용방식 (web.xml, server.xml)
      <1> Authentication (인증 : 사용자 검증)
             a. BASIC : 기본적인 인증방식, 데이터를 BASE64 인코딩화
             b. DIGEST : 전송 데이터의 암호화
             c. FORM : jsp 의 form 을 통해서 인증하도록 설정

<form method="post" action="j_security_check">
     <input type="text" name="j_username" />
     <input type="password" name="j_password" />
</form>

             d. CLIENT-CERT : 클라이언트 컴퓨터의 인증서로 인증하는 방식   ex) web.xml

<login-config>
     <auth-method>BASIC</auth-method>
</login-config>

      <2> Authorization (인가 : 인증된 사용자만 자원에 접근 가능)
             <auth-constraint> 를 이용해서 role 정보를 추가해주면 해당 role의 유저만 resource 에 접근할 수 있게 된다.
             web.xml security-constraint 태그 참조
      <3> 데이터 무결성과 비밀보장

  <user-data-constraint>
   <transport-guarantee>CONFIDENTIAL</transport-guarantee>
  </user-data-constraint>

  web.xml 에 설정을 잡고, 서버별 SSL(Secure Socket Layer)
  관련 설정을 잡아줘야 하고, 인증키를 가지고 있어야 한다.
  인증키에는 JKS(Java KeyStore), PKCS11 or PKCS12(인터넷 표준 혹은 Microsoft key-manager) 가 쓰인다.

Posted by 미스터네오
,

<JDBC>

JDBC/JDBC 정리 2010. 2. 18. 13:27

 

1. JDBC (Java Database Connectivity)
  (1) 정의
       JVM의 시스템과 DB시스템을 연결하고 통신하기 위한 JAVA 표준 스펙

  (2) JDBC 프로그램 순서
     <1> Driver 메모리에 로딩 (DB회사에서 JDBC스펙에 맞게 구현해 놓은 클래스들)
     <2> DB와 연결 (Connection 객체 생성)
     <3> SQL구문(쿼리) DB서버로 전송 (Statement or PreparedStatement 객체 생성)
     <4> 쿼리 실행 (ResultSet 생성하거나 결과값을 받음)
     <5> ResultSet 객체에서 원하는 값을 추출 (select일 경우)
     <6> 위의 객체(Connection, Statement, ResultSet)들을 반드시 close() 해준다. (IO개념)

  (3) Connection 을 가져오는 두가지 방법 : DriverManager 와 DataSource
       http://java.sun.com/j2se/1.4.2/docs/guide/jdbc/getstart/datasource.html (원문) --> 5.0 API DOC에서 검색
       http://xrath.com/devdoc/jdk1.5/ko/guide/jdbc/getstart/datasource.html (번역문)
       http://xrath.com/devdoc/jdk1.5/ko/
     <1> DriverManager : Class.forName으로 driver의 객체를 만들면 그 객체가 자동으로 DriverManager에
                                   레지스터된다.
     <2> DataSource : JNDI lookup을 일반적으로 사용하나 사용하지 않을 수도 있다.
            - JNDI : Java Naming and Directory Interface 특정한 이름으로 분산 시스템의 특정 리소스나 객체에
                        접근 가능하게 해주는 기술
   (4) Connection Pooling
        일반적으로 Connection 을 여는 과정이 많아질 경우 DB에 너무 많은 과부하가 생길 수 있다.
        그러한 단점을 극복하고자 일정량의 Connection 을 미리 만들어 놓고 그것을 필요에 따라서만
        내어주는 방식을 취하는 것이 Connection Pooling 이다.

2. 주요 클래스
  (1) Connection
  (2) Statement
     <1> 생성
            con.createStatement();
     <2> 실행
            [1] SELECT문일 경우
                  --> ResultSet rs = stmt.executeQuery(sql);
            [2] INSERT/UPDATE/DELETE 문일 경우
                  --> int n = stmt.executeUpdate(sql);
            [3] 그 외, sql문일 경우
                  --> boolean b = stmt.execute(sql);
  (3) ResultSet
     <1> 생성 :  stmt.executeQuery(sql);
     <2> 실행(추출)
            rs.next();
            rs.getType(); --> 각 데이타타입에 따른 GET메소드.doc 참조
  (4) PreparedStatement (준비된 Statement)
       미리 SQL문이 세팅된 Statement가 DB에 전송되어져서 컴파일 되어지고,
       SQL문의 ?만 나중에 세팅해서 실행이 되어지는 준비된 Statement.
     <1> 장점
            Statement 에 비해서 반복적인 SQL문을 사용할 때 더 빠르다.
            (이유 : ?를 제외한 SQL문에 DB에서 미리 컴파일 되어져서 대기하고 있기 때문)
     <2> 단점
            SQL문마다  PreparedStatement 객체를 각각 생성해 줘야 한다.
            (Statement 객체는 SQL문이 달라지더라도 한개만 생성해서 재사용가능) 

Posted by 미스터네오
,


///////////////////////////////////// Oracle 10g /////////////////////////////////////////

1. 설치시 네트워크 오류 발생에 대한 대처
    DHCP를 이용한 IP 할당이 되지 않을 경우 Microsoft Loopback Adapter를 설치해준다.
    그런다음 IP 설정을 192.168.xxx.xxx 혹은 10.10.10.10, 서브넷마스크는 255.255.255.0 으로 설정을 잡으면
    오라클에서 네트워크 인식이 가능하다.

2. Oracle 에 대한 기본
  (1) 관계형 데이터베이스란?
       자료를 관계와 2차원 테이블(ROW, COLUMN)로 표현하는 방식의 데이터베이스
  (2) DBMS(DataBase Management System)란?
       오라클과 같이 DB와 사용자와의 중간 역할로써, 데이터베이스를 관리해주는 시스템
  (3) SQL(Structured Query Language)이란?
       관계형 DB를 처리하기 위해 고안된 언어, 독자적 문법을 갖는 DB 표준언어(ISO 지정)로서
       질의 방식으로 데이터 처리를 하는 것이 가능하다.
  (4) PL/SQL(Oracle's Procedural Language extension to SQL) 이란?
       오라클에 포함되어있는 절차적 언어(Procedure Language)로서 변수정의, 조건처리, 반복처리 등을
       지원함으로서 효율적인 SQL문 작성을 도와준다.
 (5) 데이터베이스 모델링이란?
      데이터베이스를 구축하는 절차를 뜻하는 것으로 요구분석, 개념적 모델링,  논리적 모델링, 물리적 모델링의
      순서로 이루어진다. 또한 이 절차중 논리적 모델링시 ER다이어그램(Entity-Relationship Diagram)에 대해
      수학적인 검증작업을 하는 것을 정규화(Normalization)라고 부른다.

3. 정규화(Normalization)
   모델링에 맞게끔 테이블을 여러개로 분리하는 작업을 뜻한다.
  (1) 0차 정규화
       데이터를 수집하고 key 값을 결정한 형태
  (2) 1차 정규화
       반복되는 값들을 제거하기 위해 primary key 를 복사해서
       다른 테이블로 나누며 foreign key 로 지정한다.
  (3) 2차 정규화
       복합키(composite key)를 가지는 경우 이를 분리해낸다.
  (4) 3차 정규화
       식별자가 아닌 컬럼이 서로간에 종속적인 속성을 지닌 경우 분리한다.
  (5) 4차 정규화
       일반적으로 3차 정규화까지만 진행을 한다. 하지만 테이블에 완전히 서로에게 비종속적인 식별자들만
       3개 이상 존재하게 될 경우 이것들을 나눠서 2개 이상으로 나누는 정규화
  (6) 역정규화
       사용량이 많게되는 데이터가 있거나,  프로그램 운용시 실행속도를 위해서 유용하도록
       일부러 테이블을 분리하거나 다시 합치거나 하는 정규화

4. Oracle에 접속하는 방법
  (1) iSqlplus
       9i부터 추가된 방식으로 웹을 통하여 오라클에 접근해서 SQL 쿼리문을 실행하는 것이 가능하다.
       http://localhost:5560/isqlplus
  (2) sqlplus
       일반 콘솔창이나 오라클에서 제공하는 전용 프로그램으로 접속이 가능하다.
       sqlplus scott/tiger
  (3) enterprise manager
       10g부터 제공되는 것으로 웹으로 접근 가능한 오라클 관리 프로그램이다.
       http://localhost:1158/em
  (4) 쿼리 분석기 이용방법(toad, sqlgate 등)

5. Oracle의 기본 계정
  (1) sys : super admin. 최고 관리자로써 모든 권한을 다 가지고 있는 계정
  (2) system : 데이터베이스 운영자 계정으로써, 데이터베이스 생성을 제외한 대부분의 기능을 소유한 계정
  (3) scott : 학습용 계정
  (4) hr : 좀 더 진화된 학습용 계정

6. SQL*Plus 주요 명령어
  help index 를 통해서 sqlplus에서 제공하는 명령어들을 볼 수 있고, help ? 의 방식으로 각 명령의 도움말을
  볼 수 있다.
  (1) conn[ect] : 다른 계정으로 접속하기 위한 명령
  (2) @ : 특정위치의 SQL Script 파일을 실행하기 위한 명령
  (3) / : Buffer 에 저장되어있는 최근에 실행된 SQL 쿼리문을 다시 실행
  (4) set : sql*plus 의 환경에 대한 설정을 하는 명령
     <1> set lin[esize] 80 : 보여지는 가로 사이즈 지정
     <2> set pages[ize] 12 : 보여지는 세로 줄 사이즈 지정
  (5) ed[it] : 한번 실행한 명령을 수정하는 것이 가능
  (6) desc[ribe] : 특정 테이블이나 뷰등의 컬럼에 대한 정보에 대해서 간략하게 보는 명령

7. 오라클 기본 용어
  (1) table : 2차원의 구조를 가지는 기본 데이터 저장구조. Entity 라고도 불린다.
                 ex) emp, dept, sal
  (2) row : 테이블의 행 (하나의 유효한 데이터의 집합)
                 ex) 10  ACCOUNTING   NEW YORK
  (3) column : 테이블의 열(속성)
                    ex) deptno, dname, loc
  (4) primary key : 각 row 를 구별할 수 있는 식별자(고유의 값)
                          ex) empno
  (5) foreign key : 다른 테이블의 컬럼의 값을 참조하는 컬럼(외래키, 참조키)
                          ex) emp(deptno)
  (6) tablespace : 논리적인 단위의 테이블이 저장되는 공간
  (7) schema : 스키마. 사용자가 만든 그 사용자의 모든 객체들
  (8) session : 사용자가 login 해서 logout 까지의 단위
  (9) SGA(System/Shared Global Area) : 사용자가 실행한 SQL 문에 의해 검색 또는 변경되는
                                                          테이블 데이터를 임시로 저장하는 메모리 영역. 즉, 오라클 서버의
                                                          메모리 영역을 뜻한다.
  (10) PGA(Program Global Area) : Background process 또는 server process에 대한 
                                                 데이터와 제어 정보를 갖는 메모리 영역
  (11) instance : SGA 와 Background process 를 합쳐서 instance 라 부른다.

8. SQL 언어의 분류
  (1) DQL(Data Query Language) 
              테이블내의 데이터를 조회 (select)
  (2) DML(Data Manipulation Language) 
              데이터의 입력, 수정, 삭제와 객체명 변경 및 저장공간 회수 (insert, update, delete, rename, truncate)
  (3) DDL(Data Definition Language)
              테이블을 생성, 변경, 삭제 (create, alter, drop)
  (4) TCL(Transaction Control Language)
              DML 문에 의한 데이터 변경을 관리 (commit, rollback, savepoint)
  (5) DCL(Data Control Language)
              사용자에게 권한을 부여, 회수 (grant, revoke)

9. select
  (1) select의 실행순서
     <1> from
     <2> where
     <3> group by
     <4> having
     <5> select
     <6> order by
  (2) where 절 사용
     <1> 비교 연산자 : =, !=(<>, ^=), <, <=, >, >=
     <2> 논리 연산자 : AND, OR, NOT
     <3> SQL 연산자 : IN, BETWEEN AND, LIKE, IS NULL, IS NOT NULL, EXISTS ...;
            - LIKE 와 _, % 는 같이 쓰이며 한글자 혹은 0개 이상의 문자와 같은 자료를 검색할때 사용한다.
            - LIKE 에서 _ 나 % 를 문자로써 검색하려면 LIKE '\%' ESCAPE '\' 식으로 검색이 가능하다.
     <4> 연산자 우선순위
            1) prior, connect by
            2) *, /
            3) +, -, ||
            4) <, >, <=, =>, !=, =
            5) IS [NOT] NULL, LIKE, [NOT] BETWEEN, [NOT] IN, EXISTS
            6) NOT
            7) AND
            8) OR
  (3) group by 
       특정 컬럼을 대상으로 그룹을 지어서 데이터를 조회하고 싶을때 사용
       ※ group by 에서 선택한 컬럼이거나 그룹함수만 select에서 사용 가능하다.
  (4) having
       group by 에 의해서 그룹지어진 것들에 대해서 조건을 걸고 싶을때 사용
       실행의 효율성을 위해서 where 절에서 걸어야 할 조건들과 구분해서 사용하는 것이 좋다.
  (5) select 절 사용 
       - UNIQUE, DISTINCT, ALL 을 이용하여 고유의 값만을 찾거나, 중복을 제거하거나 할 수 있다.
  (6) order by 절 사용
     <1> 컬럼명 정렬방식
            ex1) order by ename asc, order by ename desc
            ex2) order by deptno desc, ename asc
     <2> 숫자 정렬방식
            ex) select ename, job, sal from emp order by 1 desc; (ename으로 정렬)
  (7) 집합연산자
       - UNION ALL, UNION(합집합), MINUS(차집합), INTERSECT(교집합)
       - 두개의 select 쿼리문을 합쳐서 똑같은 컬럼타입과 개수로써 데이터를 조회하는 연산자
       - order by 는 마지막 select 문의 뒤에 넣어야만 한다.

10. 단일행 함수(Single-Row Functions)
  (1) 숫자함수
     <1> mod() : 나머지 구하기
     <2> round() : 반올림
     <3> ceil() : 올림
     <4> floor() : 내림
     <5> abs() : 절대값
     <6> trunc() : 절삭
  (2) 문자함수
     <1> lower(), upper() : 소문자, 대문자로 변경
     <2> substr() : 특정 위치의 문자열 추출
     <3> instr() : 특정 문자열의 인덱스값 추출
     <4> reverse() : 문자열 거꾸로 뒤집기
     <5> length() : 길이
     <6> ltrim(), rtrim() : 왼쪽 혹은 오른쪽에서 특정 문자를 삭제
     <7> lpad(), rpad() : 왼쪽 혹은 오른쪽으로 일정 자리수를 특정 문자로 채움
     <8> replace() : 문자열 변환
  (3) 날짜함수
     <1> sysdate : 현재날짜
     <2> add_month() : 달을 더하기
     <3> last_day() : 이 달의 마지막 날
     <4> months_between() : 달과 달의 사이
  (4) 변환함수
     <1> to_char() : 숫자나 날짜를 문자타입으로 변환
     <2> to_date() : 포맷에 맞추어 문자열을 날짜타입으로 변환
  (5) 기타함수
     <1> decode() : switch case 와 비슷
                            decode(
     <2> case 문 : if 문과 비슷
                         CASE value 
                                  WHEN expr1 THEN 구문1
                                  WHEN expr2 THEN 구문2
                                  ELSE 구문3
                         END "별칭"
     <3> nvl(), nvl2()

11. 집합함수(복수행함수, Aggregate Functions)
  (1) avg() : 평균값
  (2) sum() : 합계
  (3) count() : 누적 행의 수
  (4) min() : 최소값
  (5) max() : 최대값
  (6) rank() : 순위

12. 분석함수(Analytical Fuctions)
  (1) first_value() over() : 첫번째 값 가져오기
  (2) last_value() over() : 마지막 값 가져오기
  (3) count() over() : 조건에 맞는 행의 수
  (4) sum() over() : 컬럼의 합 누적
  (5) rank() over() : 순위
  (6) dense_rank() over() : 같은 순위가 여러개일 경우라도 다음 순위는 +1
  (7) row_number() over() : 같은 순위는 있을 수 없고 고유의 번호를 부여

13. 정규 표현식(Regular Expression)
  (1) regexp_like() : 특정 조건을 만족하는 문자열을 찾는 경우
  (2) regexp_substr() : 특정 조건을 만족하는 문자열을 추출하는 경우
  (3) regexp_replace() : 특정조건을 만족하는 문자열을 다른 문자열로 변경하는 경우

'오라클 > 오라클 정리' 카테고리의 다른 글

테이블 스페이스 생성  (0) 2012.06.20
오라클 데이터 중복제거  (0) 2010.11.30
Posted by 미스터네오
,
출처 : http://cafe.naver.com/javachobostudy
책 : 자바의 정석
제가 임의로 편집한 것입니다. 자세한 내용이 궁금하시면 위에 카페로 이동하세요

 1. 요약집으로 가볍게 1독 하라 (이해가 안가더라도 가볍게 눈으로 한번 훑어본다)

 2. 처음으로 1장(자바시작)~5장(배열)을 공부(자바의 기본 문법만 잘 확인)
    프로그래밍의 경험이 전혀 없으신 분들은 1장과 5장 사이를 익숙해질때까지 반복
    (잘모르겠다면 무조건 암기)


3. 객체지향개념을 공부(한두번에 이해하면 천재)
    10번 봤는데도 이해가 안가면 10번 더(이해가 안간다고 이 책 저 책보면 더 헷갈림)


4. 8장(예외처리), 9장(java.lang패키지), 10장(내부클래스)
    9장에서는 Object클래스와 String, StringBuffer클래스의 특징과 메서드들이 중요
    10장은 이해안가는 부분이 있더라도 기본 내용만 확인
    12장(Thread)나 13장(AWT)에서 나오면 다시 10장을 공부하면 실제로 어떻게 사용되는지 이해


5. 11장(컬렉션 프레임웍) Java의 정석에서 객체지향개념 다음으로 난이도가 있는 단원
    일단 언제 어떤 클래스를 사용해야하고, 어떤 결과를 얻을 수 있는지만 알고 패스
    반복하면서 좀더 깊이있게 공부
    단순히 예제를 이해한 수준만으로 Java의 정석을 다 공부했다고 할 수는 없다


6. 12장(Thread), 13장(AWT), 15장(네트워킹실무)에서 잘 쓰이지 않는 부분입니다.
    Java의 기본과정에 포함 일단 넘어가시고 나중에 시간날 때 또는 필요할 때 공부
    채팅 프로그램이나 메신저 이런거 만들기 보다는 JSP나 JDBC등을 먼저 학습


7. 14장(입출력입출력)은 실무에서 자주 쓰이기 때문에 잘 공부
    기본적인 읽기와 쓰기, 바이트 기반과 문자기반의 스트림의 차이등 기본적인 내용을 이해
    실무에서 자주 사용되는 예제를 많이 소개하도록 노력
    11장과 마찬가지로 처음에는 어떻게 사용하는지를 이해하는데 중점을 두세요.


8. 10독이란?
    1번은 부록인 요약집을 눈으로 가볍게 전체적 구성을 보고,
                                                        2독부터 5독 정도 까지는 직접 실습하면서 자세히 반복    

    책의 내용을 충분히 이해했다고 생각되면 Java의 기본 다음 단계인JSP와 JDBC를 공부
    눈으로 Java의 정석을 매일 30분 정도 꾸준히 가볍게 복습하시라는 겁니다.

Posted by 미스터네오
,

1. 스트림(Stream)
  (1) 정의 : 데이터의 흐름
  (2) 흐름도
       Source(키보드, 파일...) --> 데이터의 흐름 --> Destination (모니터, 파일...)
  (3) 특징
     <1> FIFO 구조
            --> 흘러가는 데이터의 순서가 바뀔 수 없다.
     <2> 단방향
            --> 흐름의 방향은 일정하다.
     <3> 지연성
            --> 흐름은 지연될 수 있다.
     <4> 유연한 구조
            --> 다른 Stream(FilterStream)으로 연결해서 쓸 수 있다.

                ex) new BufferedReader (new InputStreamReader(System.in));
                     new BufferedReader (new FileReader(""));

  (4) 구분
     <1> by byte
            [1] 1 byte Stream
            [2] 2 byte Stream (문자 스트림) - java언어에만 존재
     <2> by 입출력 - 기준에 따라 달라질 수 있다.
            [1] Input Stream (Reader)
            [2] Output Stream (Writer)

2. NodeStream
  근본 스트림 (ex:수도)
  --> Data Source(원천지) 또는 Data Destination(목적지)와 직접 연결된 Stream
  (1) InputStream (System.in)
       --> read(), read(b), read(b, 0, len)
  (2) OutputStream & PrintStream (System.out)
       --> print(), println(), write()
  (3) FileInputStream
  (4) FileOutputStream
  (5) FileReader (문자스트림 - 2byte)
  (6) FileWriter (문자스트림 - 2byte)

3. FilterStream (내부적으로 buffer를 사용함.)
  응용 스트림 (ex:샤워기)
  --> NodeStream에 연결해서 다양한 기능(메소드)을 쓸 수 있는 Stream
  (1) BufferedInputStream
  (2) BufferedOutputStream //반드시 flush()
  (3) DataInputStream  // 기본형 데이터 & Unicode String을 읽는다.
  (4) DataOutputStream // 기본형 데이터 & Unicode String을 쓴다.
  (5) ObjectInputStream
  (6) ObjectOutputStream
  (7) BufferedReader (문자스트림 - 2byte)
  (8) BufferedWriter (문자스트림 - 2byte) //반드시 flush()
  (9) PrintWriter, PrintStream (문자스트림 - 2byte)
       --> 장점 1.BridgeStream이 필요없다.
                    2.flush() 생략가능 3.메소드다양 
  (10) LineNumberReader
         getLineNumber() 를 이용해서 읽어들인 행의 번호를 알 수 있다.

4. BridgeStream
  다리 스트림
  --> 1byte Stream을 2byte Stream으로 변환해 주는 Stream
  (1) InputStreamReader
  (2) OutputStreamWriter

5. File 클래스
  (1) 설명 : 파일과 디렉토리를 객체로 만들기 위해 설계된 클래스
  (2) 생성자
     <1> File(File parent, String child)
     <2> File(String pathname)
     <3> File(String parent, String child)
     <4> File(URI uri)
   (3) 메소드
     <1> exists()
     <2> getName()
     <3> getPath()
            --> 상대경로를 String으로 리턴
                  getAbsolutePath()
            --> 절대경로를 String으로 린턴
                  getCanconicalPath() throws IOException
            --> 정규화(시스템에서 사용하는 형식)된 절대경로를  String으로 변환
                  ex) 유닉스 --> 심볼릭 링크로 연결된 파일을 실제 경로로 바꾸어준다.
           윈도우 --> 실제 존재하는 파일의 경우 대소문자까지 원래의 경로 및 파일명에 맞추어 준다.    
            참고 ) IOException 은 시스템으로부터 파일시스템 정보를 요청하기 때문에 걸린다.
     <4> getParent()
            --> 전체 경로로 생성해야 결과값이 리턴 됨.
     <5> list()
            --> 파일 객체 하위의 파일과 디렉토리를 String[] 로 리턴
     <6> isDirectory(), isFile(), canRead(), canWrite()
     <7> mkdir()
            --> 부모 디렉토리가 실제 존재해야 자식 디렉토리가 생성
  (4) 필드
     <1> File.separator
            --> OS에 맞는 파일경로 구분자를 리턴해준다.

Posted by 미스터네오
,

 
1. 자바의 역사
  (1) 1991년 : James Gosling외 개발자들에 의해 Oak 란 언어로 제작
  (2) 1997년 : jdk 1.1 발표
  (3) 1998년 : jdk 1.2 발표
  (4) 2000년 : jdk 1.3 발표
  (5) 2002년 : jdk 1.4 발표
  (6) 2004년 : jdk 1.5 발표 (J2SE 1.5 -> Java SE 5.0)
  (7) 2007년 : jdk 1.6 발표 (Java SE 6)

2. 자바의 특성
  (1) 객체지향언어
  (2) 플랫폼(OS)에 독립적
  (3) 멀티 쓰레드를 지원한다.
  (4) 자동 메모리 관리 : JVM이 자동으로 관리를 해준다.
  (5) 기본적으로 네트워킹 가능 언어이다.

3. 자바의 실행절차 (인터프리터 언어)
  .java 파일 작성 -> javac(컴파일러)를 이용해서 .class 파일 작성
    -> java(Java 실행기)를 이용해서 class 파일 실행 -> JVM 에 의해서 main() 메소드 실행 
        c.f.) JVM (Java Virtual Machine) : 자바 가상 머신, 자바의 실행에 관련한 모든 것을 책임지는 프로그램.  
  운영체제에 상관없이 자바 클래스를 실행하거나, 메모리를 관리해주는 프로그램이다.
    - 가비지 콜렉터(Garbage Collector) : 메모리 관리 프로그램으로써 객체가 더이상 쓰일 가능성이 없으면 자동으로
       메모리에서 삭제를 한다. (JVM에 내장)

4. 객체지향언어 용어 정리
  (1) 객체(Object) : 모든것이다. class 를 통해서 만들어진 구현물, 유형, 무형의 것들을 표현
  (2) 클래스(class) : 객체를 만들어내는 틀(blueprint, 설계도)
  (3) 속성(Field, Property, Member Variable) : 객체의 속성, 성질. 클래스에 정의되어있다.
  (4) 메소드(Method) : 객체가 할 수 있는 기능(행위)
  (5) 생성자(Constructor) : 객체를 만들기 위해서 호출되는 메소드 형태의 것(new 와 함께 호출하면 객체 생성)
       - 클래스 이름과 동일한 단어(대문자로 시작한다)
       - 메소드와 동일한 형태(예 : Hello())
       - 반환타입(return type)이 없다.
       - 생성자가 하나도 없는 경우에는 컴파일러가 기본생성자(default Constructor)를 자동으로 만들어준다.

5. OOP의 특징
  (1) 상속성(inheritance) : 기존의 클래스를 확장(extends)해서 새롭게 기능(method)이나 특성(field)을 정의하거나
                                      추가하는 것을 뜻한다. 부모클래스가 자식클래스에게 멤버변수, 메소드를 물려주는 것을 뜻.
  (2) 다형성(polymorphism) : 상속과 형변환(type casting)과 더불어 사용되는 단어로써, 메소드에서 호출된
                                              객체의 메소드가 객체의 본질(실체)에 따라 다양하게 실행될 수 있다는 뜻.
  (3) 은닉성(Information Hiding) : 객체의 특성과 메소드의 세부구현을 숨김으로써 객체가 완전한 독립성을
                                          유지
하도록 하는 개념 (예전엔 모듈화 라는 개념으로도 불렸다.)
  (4) 캡슐화(Encapsulation) : 은닉성의 대표적인 예로써, 클래스의 속성(Field)의 접근 제한자를 private 으로 하고
                                               메소드에 대해서는 public 을 선언함으로써, 특정 메소드를 빼고는 세부구현 내지는
                                              속성에 대한 것들을 숨김으로써, 마치 알약(캡슐)처럼 안쪽 내용을 전혀 알 수 없게
                                          만드는 형태
를 뜻한다.

6. 자바(class)의 구조
  (1) package 선언
  (2) import 구문
  (3) class 선언

  {
    (4) 속성 선언 및 초기화
    (5) 생성자
    (6) 메소드 선언
  }

7. 자바의 주석
  (1) // 한줄짜리 주석
  (2) 여러줄짜리 주석

    /*
        라인1
        라인2
      */

   (3) javadoc

   /**
     API 문서 작성용 주석
   */

8. 자바의 변수
  (1) 유효범위에 따라서
     <1> 멤버변수 (Member Variable)
            - 클래스의 속성으로서 정의된다.
            - 초기화가 자동으로 된다.(각각의 초기값으로)
     <2> 메소드 지역변수 (Local Variable)
            - 메소드의 안쪽에서만 정의되고 쓰인다.
            - 초기화를 반드시 해줘야 한다.
  (2) 변수 Type에 따라서
     <1> 기본형 변수(Primitive Type) 변수 (8개)
            - 존재이유 : 실행의 효율성 때문이다.(모두 객체로 실행하면 메모리 공간을 많이 차지한다)
            - 형변환 방향
               byte(1) -> short(2) -> int(4) -> long(8) -> float(4) -> double(8)
                                                          |
                                                 char(2)
               boolean
     <2> 참조형 변수(Reference Type) 변수
            - 형변환 방향 (위로)
               Object
                   |
               Human
                   |
             Superman
            - 형변환(Type Casting)의 예

               Human h = new Superman(); // 암시적 형변환
               Superman s = (Superman) h; // 명시적 형변환

9. 제한자
  (1) 정의
       클래스, 인터페이스, 변수, 메소드, 생성자 앞에 붙어서 기능을 제한하는 keyword
  (2) 종류
     <1> 접근 제한자
            public(제한없음) > protected(상속관계) > default(같은 패키지내) > private(같은 클래스내)
     <2> 소유 제한자
           
static
            - static 이 붙으면 class 의 소유가 되고, 안붙으면 객체의 소유가 된다.
            - static 메소드 안에서는 다른 static 메소드나 다른 static 변수만을 쓸 수 있다.
              (객체에 소속되어있는 메소드를 쓰려면 객체를 생성해서 호출한다.)
     <3> 수정 제한자
            
final
            - class, Field, method 앞에 붙어서 더이상의 수정을 할 수 없게 만드는 제한자
            - class 는 상속 불가, Field 수정불가(상수), method 오버라이딩 불가
     <4> 추상 제한자
            abstract
            - class 앞에 붙으면 추상클래스(객체를 생성할 수 없다. 완벽한 설계도가 아니다)
                        : 추상 메소드가 0개 이상 있는 클래스 (1개 이상 있으면 반드시 추상 클래스)
            - method 앞에 붙으면 추상메소드 : body {} 부분이 없는 메소드
     <5> 기타
            synchronized, transient, volatile, native ....

10. 오버로딩과 오버라이딩 (다형성)
  (1) 오버로딩 (over-loading)
     <1> 정의
            메소드의 이름은 같은데, 인수의 갯수나 Type 이 다른 형태의 메소드로써 
            설계, 사용의 편의성을 위해서 존재한다.
     <2> 조건
            - 반환타입이 달라도 된다.
            - 인수(parameter)의 갯수나, Type 이 다르거나 순서가 달라야 한다.
      <3> 종류
            - 생성자 오버로딩
            - 메소드 오버로딩

  (2) 오버라이딩 (over-riding)
     <1> 정의
            상속관계가 있는 클래스에서 부모 메소드의 내용을 자식 클래스에서 재정의 하는 것
     <2> 조건
            - 반환타입이 같아야 한다.
            - 인수(parameter)의 갯수나 Type 이 같고, 순서도 같아야 한다.
            - 부모 메소드의 접근제한자보다 오버라이딩한 메소드의 접근 제한자가 같거나 더 
               범위가 커야 한다.

11. 객체 지시 예약어
  (1) this - 자기 자신(class)의 객체
  (2) super - 바로 위 부모 클래스의 객체

12. 식별자(Identifier)
  (1) 정의
       개발자가 임의로 만드는 패키지명, 클래스명, 메소드명, 변수명 등을 의미
  (2) 규칙(어길시 컴파일 오류 발생)
     <1> 식별자의 첫문자는 특수문자, 숫자여서는 안된다.(_,$는 예외)
     <2> 문자와 숫자, 특수문자(_,$)로 조합할 수 있다.
     <3> 예약어(keyword)를 사용하면 안된다.
     <4> 길이의 제한 없다.
  (3) 관례
     <1> 의미있는 단어를 사용한다.
     <2> 클래스와 인터페이스의 첫문자는 대문자로 한다.
     <3> 메소드와 변수의 첫문자는 소문자로 한다.
     <4> 단어의 결합으로 되어있을 경우 다음 단어의 첫번째글자를 대문자로 하거나
            _로 연결한다. ex) TestClass, getName(), set_name
     <5> $문자는 사용하지 않는다.

13. 연산자
  (1) 산술연산자
        +, -, *, /, %
  (2) 증감연산자
        ++, --
  (3) 대입연산자
        =
  (4) 산술할당(대입)연산자
        +=, -=, *=, /=, %= ...
  (5) 비트연산자
        &, |, ^, ~, 쉬프트연산자(<<, >>, >>>)
  (6) 비교연산자
        ==, !=, <, >, <=, >=
  (7) 논리연산자
        &&, ||, &, |, !
  (8) 조건연산자(삼항 연산자)
        조건식 ? 참일때 : 거짓일때
  (9) instanceof 연산자
        - 형식 : Reference Type 변수 instanceof Class 명
        - 앞의 변수가 뒤의 클래스와 상속관계인지(형변환 가능한지) 알아보는 연산자

14. 조건문
  (1) if(조건식){}문
  (2) if(조건식){} else{} 문
  (3) if(조건식){} else if(조건식) {} 문
  (4) if(조건식){} else if(조건식) {} ... else{} 문
  (5) switch(값) { case : ... default:} 문

15. 반복문
  (1) for(초기식;조건식;증감식) {}
  (2) while(조건식)
  (3) do{}while(조건식);
  (4) 확장 for 문
   for(변수 : 배열 혹은 Collection)

16. 제어의 이동
  (1) break
  (2) continue
  (3) return

17. 인터페이스 (interface)
  (1) 정의 : 명세서(골격), 설계자가 원하는 메소드, 상수값, JavaDoc 을 통해서 다른 객체와
                소통할 수 있는 수단을 만들어 내는 것.
                모든 메소드가 추상 메소드, 모든 Field 가 상수로 구성된 것.
  (2) 특징
     <1> 인터페이스끼리 다중상속이 가능하다.
     <2> 클래스에서 인터페이스를 다중 상속 가능하다.
     <3> 모양
            - Field 에는 public static final 예약어가 생략되어 있다.
            - Method 에는 public abstract 예약어가 생략되어 있다.
     <4> 인터페이스를 상속하는 클래스에서는 반드시 메소드를 재정의(오버라이딩)해야 한다.

18. 배열 Array
  (1) 정의 : 같은 타입(type)의 객체 또는 기본형 자료를 저장하는 저장소로써, 
                생성될 때 그 크기가 고정되는 저장소
  (2) 선언
            -> (저장될 객체나 기본형 Type) + 변수명[];
            ex) int i[]; int[] i; int []i;
  (3) 생성
            -> new int[5];
            -> new int[]{1, 2, 3, 4, 5};
            -> {1, 2, 3, 4, 5};

19. 중첩클래스 (Nested class)
  (1) 정의 : 클래스 안에 클래스
  (2) 종류
     <1> static nested class
     <2> inner class
     <3> anonymous inner class

20. 예외처리
  (1) 예외(Exception)의 정의
       프로그램이 정상적으로 진행되지 못하게 하는 돌발상황
  (2) 계층도
              Throwable
                   |  |
           Error  Exception
                   |  |
 RuntimeException  CheckedException
  (3) 예외처리의 목적
       프로그램 실행시에 발생할 수 있는 상황들을 정해놓고, 해당상황 발생시
       적절한 조치를 취해서 프로그램이 정상적으로 작동하도록 하는데에 목적이 있다.
  (4) 예외처리의 특징
     <1> Exception 은 메소드에서 발생한다.
     <2> 발생시킬때 throw 라는 예약어를 사용한다.
     <3> Error 나 RuntimeException 을 제외하고는 항상 잡거나(try catch) 
            자신이 처리하지 않고 던지게끔 선언해야한다.(throws)
     <4> try catch
            try {
                예외가 발생하는 구문(메소드)
            } catch(Throwable 의 자식 e) {
                예외처리구문
            }
     <5> catch 절에서 2개 이상의 Exception 을 잡을 경우 하위 Exception 부터 잡는다.
     <6> finally 절
            try 와 같이 쓰이며, 어떤 상황하에서도 실행되는 구문.
            (단, System.exit() 는 제외)
     <7> Error, RuntimeException
            1) throws 선언하지 않아도 자동으로 던져진다.(메소드 호출한 곳으로)
            2) try catch 안해도 컴파일 오류 발생하지 않는다.
     <8> 주요 메소드
            1) getMessage() : 익셉션 생성시 생성자에 넣어둔 문자열 가져오는 메소드
            2) printStackTrace() : 익셉션 최초 발생 부분 부터의 stack 메소드 구조를 다 보여주는 메소드

21. Package
  (1) 컴파일 방법
       javac -d . *.java : -d 옵션으로 class 파일이 저장될 위치를 정한다.
  (2) 실행 방법
       java com.study.StudyA 식으로 실제 패키지명을 다 명시해야한다.
  (3) jar 작성
       jar cvf test.jar 디렉토리명

//////////////////////// 주요 클래스 //////////////////////////////
22. Object (가장 상위 root class)
     equals(), hashCode(), toString(), getClass(), finalize()(객체 소멸 직전 호출), 
     clone()(Cloneable interface 상속 Calendar 객체 복사시 유용)
 ※ 참고 : Hashtable 에서 직접 만든 빈즈 객체를 키(key)로 사용하고 싶다면 반드시 equals() 와 hashCode()메소드를
              오버라이드 하는게 좋다. (안하면 키값을 제대로 못찾는 경우 발생)

23. Class (클래스를 대변하는 클래스)
     getName(), getSuperclass(), getDeclaredFields(), getDeclaredMethods()

24. Wrapper class (기본형 변수를 객체형 변수로 변경해야할 경우 사용)
     Byte, Short, Integer, Long, Character, Float, Double, Boolean

25. String class (immutable 불변 클래스 Wrapper class 포함)
  (1) 한번 생성된 객체의 내용을 연산이나 메소드의 사용에 의해  변화시키는 것이 불가능하다.
  (2) 문자열의 비교시는 (== X) equals 메소드를 써야한다.

26. Math (객체 생성 불가)
     수학연산과 관련된 메소드가 존재하는 유틸 클래스

27. Calendar
     날짜 및 시간을 위한 클래스

28. SimpleDateFormat, DecimalFormat
     날짜나 숫자 등을 원하는 방식으로 변환할때 사용

29. System
     exit(0) : 인자값으로 0이면 정상종료, 0 아니면 비정상종료
     gc() : 가비지 컬렉터를 가능한한 빨리 실행되도록 하는 메소드
     arraycopy() : 배열 복사시 사용
     currentTimeMillis() : 시스템의 현재시간을 long 타입으로 가져옴

30. Collection Framwork (자료구조)
  (1) hierachy(계층구조)
            Collection                             Map
             |    |    |                      |
  Set  List   Queue      SortedMap
  |
 SortedSet

  (2) interface
     <1> Collection : 컬렉션 계층구조의 root
     <2> Set : 중복된 요소(element)를 허용하지 않는다.
      ex) 트럼프 카드
     <3> List : 순서가 있는 컬렉션(sequence 라고도 한다.) 중복된 요소 허용, 인덱스로 각 요소에 접근 가능
     <4> Queue : 우선순위를 가지는 여러개의 요소를 가지고 있는 컬렉션 FIFO(First-in First-out)
     <5> Map : key와 value로 이루어진 객체, 중복된 key는 불가
      // 순서가 있는 계열
     <6> SortedSet : 오름차순(ascending)의 순서로 요소를 가진다.
     <7> SortedMap : key 값을 오름차순의 순서로 가진다.
      ex) 사전, 전화번호부
  
     // ETC
     <8> Enumeration : 요소를 나열된 형태로 가지고 있다.
     <9> Iterator : remove 가 가능하다
 
  (3) Implementations (구현체들)
     <1> Set
            1) HashSet : TreeSet 보다 빠르다.
            2) TreeSet : SortedSet 에서 구현
     <2> List
            1) ArrayList : LinkedList 보다 빠르다.
            2) LinkedList : 각각의 요소가 연결되어 있는 리스트
                List 의 계속 요소(element)를 추가하거나 List 를 순환하면서 값을 삭제하거나 하는 일이 많을때 사용
                단, 데이터의 빠른 검색에는 적합하지 않다.(검색시 2번 인덱스를 찾기 위해서 0부터 찾아가기 때문)
               Queue 와 Stack 으로 사용 가능
                  -Queue : offer()(넣기), poll()(가장 앞의것 빼오기), 
                                peek()(삭제안하고 가져오기)
                  -Stack : addLast(), removeLast(), getLast()
     <3> Map
            1) HashMap : 빠르다. null key, null value 허용
            2) TreeMap : 순서가 있다.(SortedMap 구현물)
            3) LinkedHashMap : 집어넣는 순서로 정렬, 거의 
                HashMap 만큼 빠르다.
     <4> synchronized(동기화) 계열
            1) Vector (List 계열)
            2) Hashtable (Map 계열) : null key, null value 허용 안함
  (4) Collections : 각종 Collection 관련 유틸 클래스
  (5) Arrays : 배열 관련 유틸 클래스

31. Thread
  (1) Process : 컴퓨터 OS 내에서 실행중인 프로그램
  (2) Thread
       하나의 프로세스내에서 실행되는 일련의 명령흐름.
       즉, 프로세스의 구성단위
  (3) 특징
       한 프로그램내에서 동시에 두가지 이상의 일 수행하는 것으로 프로세스보다 작은 단위이며 프로세스의 자원
       (resource)을 공유하기 때문에 가볍다는 장점이 있다.
  (4) 생성과 실행
     <1> 쓰레드 대상 생성방법
            1) Thread 클래스를 상속받는 방법

     <2> 쓰레드 생성과 실행
            Thread th = new Thread(대상객체);
            th.start(); 
            start() 메소드를 호출하면 ready 상태가 되고,
            JVM에 의해서 자동으로 run() 메소드가 실행된다.
  (5) 소멸
        run() 의 body를 모두 수행뒤에 terminated 된다.
  (6) Life Cycle - ppt 자료 참조
  (7) 동기화 (synchronized)
        synchronized 블럭에 하나의 쓰레드가 객체에 대한 lock(monitor)을 소유하고 실행이 끝난 뒤 unlock 해주는 것
        즉, 한번에 하나의 쓰레드만 실행된다.
 

Posted by 미스터네오
,