레이블이 JDK인 게시물을 표시합니다. 모든 게시물 표시
레이블이 JDK인 게시물을 표시합니다. 모든 게시물 표시

2010년 7월 12일 월요일

JDBC와 DAO

JDBC

 

 1. Java DataBase Connectivity
  - 자바의 표준 DB접속 방법
  - DataBase와 독립적인 구현
 
 2. JDBC Driver Type
  - type1 : JDBC-ODBC 브리지(UserCode -> JDBC -> JDBC-ODBC -> ODBC -> DB)
  - type2 : native API Driver (UserCode -> JDBC -> DB library(native) -> DB)
  - type3 : network-protocol driver (UserCode -> JDBC -> DB Midleware -> DB)
  - type4 : native protocol driver (UserCode -> JDBC -> DB)
  
 3. JDBC Spec.
  - 커넥션, SQL 질의 및 파라미터, 결과의 수신,
  - 기본 매핑(SQL Type & Java Type), 메타데이터 제공, 트랜잭션, 로깅 등
  
 4. 커넥션 방법
  - DriverManager로 접속하는 방법
    Driver 로딩 : Class.forName("com.driver.class.name");
    DriverManager로 커넥션 획득 : DriverManage.getConnection("접속정보");
   
  - javax.sql.DataSource(JDBC 2.0)
    WAS start(DataSOurce Configuration) -> Referenceable -> JNDI
    Context.lookup(UserCode <-> JNDI <-> DataSources)
    DataSource.getConnection(UserCode <-> DataSource)
   
  - PooledDataSource
    UserCode <-> Pooled Connection <-> ConnectionPool <-> PoolingDataSource

 

Data Access Layer

 

 1. DAO FrameWorks
   - JDBC Templates
   - SQL Mappers
   - OR Mappers
  
 2. JDBC Templates
   자주 사용하는 표준적인 DB접근, 질의 등을 템플릿 형태로 사용함
   장점 - 쉽다, 설정필요이 따로 필요 없다
   단점 - 코드안에 모든내용포함 된다, 코드가독성이 낮다, DB 의존적이다
  
 3. SQL Mappers
   쿼리 등을 외부로 빼내고 쿼리에 대한 결과를 매핑해주는 기능으로 bean에 결과를 매핑한다.
   장점 - 코드가 줄어듦, 배우는게 쉽다, 코드와 쿼리가 분리된다
   단점 - XML설정이 필요하다, DB에 의존적이다
  
 4. OR Mappers
   테이블의 Row를 하나의 객체로 인식하고자 함
   설정을 통해서 테이블과 클래스, Row와 인스턴스를 연결하고 객체만을 사용
   장점 - 코드가 줄어듦, 직관적이다, 쿼리와 DB의존적이지 않다
   단점 - XML설정이 필요하다, 배우기 어렵다
  

2009년 10월 27일 화요일

JDK5의 새로운 기능 - 1부. 비정형인자(Varargs)

과거 JDK2버전부터 개발해온 입장에서 항상 새로운 JDK가 릴리즈되면

무엇이 차이인지 궁금한 마음에 이것 저것 찾아보았지만

막상 JDK5의 기능으로 구성된 소스들을 보게 되면 아리송한 내용이 많았다.

그래서 정리를 해보도록 하겠다.

 

1부 비정형인자(Varargs)

 

개발을 하다보면 메소스 생성시 인자의 수가 정해지지 않은 메소드가 필요할 경우가 있다.

보통은 이런 경우에 Set나 Map, List 등의 Collection을 이용해서 인자로 전달하게되는데

Collection들의 경우 전달하는 측에서 Instance를 생성해야한다는 불편과 더불어

처리하는 쪽에서도 Casting을 해야하는 불편이 있다.

(Casting문제는 다음편에 다룰 제너릭에서 답을 구할 수있다)

 

JDK5에서는 이러한 불편함을 해소하기 위해서 임의의 수의 인자를 전달하는 선언이 가능하게 되었다.

 

인자로 받는 수를 더해주는 add 라는 메소드가 필요할 경우

 

//JDK 1.4 이전

List args = new ArrayList();

args.add(10);

args.add(11);

args.add(12);

add(args);

 

public int add(List args) {

  int sum = 0;

  for(Iterator iter=args.iterator(); iter.hasNext(); ) {

    int arg = (Integer) iter.next();

    sum += arg

  }

  return sum;

}

 

//JDK 5

add(10,11,12);

public int add(int... args) {
  int sum = 0;
  for(int arg : args) {
    sum += arg;
  }
}

 

대단히 간편하게 인자의 수를 지정할 수 있다.

 

한가지 주의해야할 점은

비정형 인자도 다수의 인자와 함께 사용이 가능하지만 인자 선언부에서

비정형인자는 마지막에 단 한번만 사용할 수 있다.

 

public int add(String a, int... args) //올바른 선언(O)
public int add(int... args, String a) //잘못된 선언(X), 비정형인자가 마지막이 아님
public int add(int... args, String... a) //잘못된 선언(X), 비정형인자가 두번 사용됨