"데이터 접근 객체"의 두 판 사이의 차이

9번째 줄: 9번째 줄:
*[[데이터접근계층]]<ref>[[J2EE 패턴]]에서는 [[통합 티어]]</ref>을 구성하는 객체 중 하나
*[[데이터접근계층]]<ref>[[J2EE 패턴]]에서는 [[통합 티어]]</ref>을 구성하는 객체 중 하나
*흔히 DB테이블 1개당 하나의 클래스 작성. [[CRUD]] 메소드 제공
*흔히 DB테이블 1개당 하나의 클래스 작성. [[CRUD]] 메소드 제공
==구현==
*생성자에 데이터소스를 입력받음
*[[인스턴스 생성]]시: 실제 커넥션을 맺는 것은 아니고, 어떤 DB에 접속해야 하는지만 저장
*데이터 요청시: DB커넥션 클래스(싱글턴 패턴 응용)로부터 getConnection<ref>커넥션 재사용함으로써 커넥션 비용 감소</ref>


==그림 예시==
==그림 예시==

2015년 1월 15일 (목) 10:52 판

1 개요

data access object; DAO
데이터 접근 객체, 데이터 액세스 개체

2 구현

  • 생성자에 데이터소스를 입력받음
  • 인스턴스 생성시: 실제 커넥션을 맺는 것은 아니고, 어떤 DB에 접속해야 하는지만 저장
  • 데이터 요청시: DB커넥션 클래스(싱글턴 패턴 응용)로부터 getConnection[4]

3 그림 예시

패턴 구조[5]

 

객체간 상호작용[6]

 

4 구현 예시 1

public class Person {
  ... (생략)
}
public class PersonDao {
  protected DataSource dataSource = null;

  public PersonDao(DataSource dataSource){
    this.dataSource = dataSource;
  }

  public Person readPerson(long personId){
    Connection connection = this.dataSource.getConnection();
    Person person = ... (생략)
    return person;
  }
}
Person person = personDao.readPerson(123);

5 구현 예시 2

class Employee {
  protected $id;  
  protected $name;  
  protected $birth;  
  function __contruct($row) {
    $this->id = $row['id'];
    $this->name = $row['name'];
    $this->birth = $row['birth'];
  }
}
class EmployeeDao {
  protected $dataSource = null;

  function __construct(DataSource $dataSource) {
    $this->dataSource = $dataSource;
  }
  function readEmployee($employeeId) {
    $connection = $this->dataSource->getConnection();
    $row= $connection->query_row("SELECT * FROM employee WHERE id=?", $employeeId);
    return new Employee($row);
  }
}

6 같이 보기

7 주석

  1. 주로 DB
  2. 데이터베이스 또는 파일시스템
  3. J2EE 패턴에서는 통합 티어
  4. 커넥션 재사용함으로써 커넥션 비용 감소
  5. 클래스 다이어그램
  6. 시퀀스 다이어그램

8 참고 자료

문서 댓글 ({{ doc_comments.length }})
{{ comment.name }} {{ comment.created | snstime }}