DAO와 DTO란?

2020. 11. 8. 16:37

○ DAO(Date Access Object)

   데이터에 접근을 목적으로 하는 객체. 리소스를 매우 크게 소모하는 커넥션 객체를 하나만 두고
   여러 사용자가 DAO 인터페이스를 사용하여 필요한 데이터에 접근할 수 있도록 한다.
   즉, Database 와 연계하여 처리할 프로그램을 규정화 해 둔 클래스를 의미한다.

   - DTO 객체를 만들어 편집 및 조작을 한다.
   - DTO 를 데이터베이스 서버에 저장하기도 하고 데이터베이스 서버로부터 레코드를 select 해서 DTO 객체로
     변형해 가져오기도 한다.
   - insert, update, delete, select 등 데이터 액션 처리를 주 목적으로 한다.

 

DAO 예시 코드

public class MemberDAO
{
	// 주요 변수 선언 → DB 연결 객체
	private Connection conn;
	
	// 생성자 정의 → 사용자 정의 생성자
	public MemberDAO() throws ClassNotFoundException, SQLException
	{
		// DB 연결
		conn = DBConn.getConnection();
	}
	
	// 기능 → 메소드 정의 → 데이터를 입력하는 기능 → insert 쿼리문 수행
	public int add(MemberDTO dto) throws SQLException
	{
		...
	}
	
	// 기능 → 메소드 정의 → 인원 수를 파악하는 기능 → select 쿼리문 수행
	public int count() throws SQLException
	{
		...
	}
	
	// 기능 → 메소드 정의 → 데이터 전체를 조회하는 기능 → select 쿼리문 수행
	public ArrayList<MemberDTO> lists() throws SQLException
	{
		...		
	}
	
	// 기능 → 메소드 정의 → 데이터베이스 연결 종료
	public void close() throws SQLException
	{
		DBConn.close();
	}
}// end MemberDAO

○ DTO(Data Transfer Object)

   데이터가 포함된 객체를 특정 시스템에서 다른 시스템으로 전달하는 작업을 처리하는 객체
   메소드 호출 횟수를 줄이기 위해 데이터를 담고 있는 객체이다.
   즉, 데이터를 하나의 객체로 관리할 목적으로 만들어 둔 클래스의 객체를 의미한다.
   setter 와 getter 메소드를 가지고 직렬화(Serializable)를 구현한다.

   - 폼에서 입력된 데이터들은 하나의 DTO 객체로 변환될 수 있다.
   - 일반적으로 하나의 데이터베이스 레코드를 저장하며 레코드와 같은 구조를 가지고 있는 경우가 많다.
   - 하나의 레코드는 빈즈 클래스 하나로 매핑된다.

DTO 예시 코드

public class MemberDTO
{
	// 주요 속성 구성
	private String sid, name, tel;
	
	// getter / setter 구성
	public String getSid()
	{
		return sid;
	}

	public void setSid(String sid)
	{
		this.sid = sid;
	}

	public String getName()
	{
		return name;
	}

	public void setName(String name)
	{
		this.name = name;
	}

	public String getTel()
	{
		return tel;
	}

	public void setTel(String tel)
	{
		this.tel = tel;
	}
	
}

○ VO(Value Object)

   Value Object 는 관계형 데이터베이스의 레코드에 대응되는 자바 클래스.
   형태는 DB 레코드를 구성하는 필드들을 Value Object 의 Attribute 로 하고,
   해당 변수에 접근할 수 있는 setter, getter 메소드의 조합으로 형성된 클래스이다. 
   특성은 대체로 불변성이고, equals() 메소드를 통해 비교할 경우 객체를 구성하고 있는 모든 값을 비교해야 한다.
   

   ※ DTO 와 유사한 개념이지만, 특정 비즈니스 로직만 전달한다는 것으로 이해하는 것이 구분에 용이하다.
      즉, 일반적으로 Value Object 는 read only 속성을 갖는다.

   - Network Traffic 을 줄여 성능을 향상시킬 수 있다.
   - 장점으로는 비 서버 측에 해당하는 클라이언트도 네트워크 오버레드 ㅇ벗이 영속적 데이터베이스에 

     액세스 할 수 있다는 점이다.
   - 데이터 전달을 위해 가장 효율적인 방법이지만, 클래스의 선언을 하기 위해서는 많은 코드가 필요하다.
     즉, 파일 수가 많아지게 되고 관리도 힘들어지게 된다는 단점이 있다.

 

※ VO 와 DTO 비교
   VO 와 DTO 의 차이점은 특정한 비즈니스 로직을 담는 객체를 VO 라고 하고  레이어 간의 통신 용도로 

   오가는 객체를 DTO 라고 한다. 실무적으로도 대부분의 사람들이 VO 와 DTO 를 거의 같은 개념으로 다루고 있다.

'JDBC' 카테고리의 다른 글

DAO와 DTO를 이용한 JDBC 실습(2)  (0) 2020.11.09
DAO와 DTO를 이용한 JDBC 실습(1)  (0) 2020.11.08
JDBC 프로그래밍 절차  (0) 2020.11.07
JDBC 사전 설정  (0) 2020.11.07
JDBC란?  (0) 2020.11.07

+ Recent posts