[Java] DTO, DAO

chael_lo·2021년 6월 23일
0

Java

목록 보기
46/52

DAO(Data Access Object)

웹 서버는 DB와 연결하기 위해서 매번 connection(객체)을 생성한다.
DAO는 DB를 사용해 데이터를 조회하거나 조작하는 기능을 전담하도록 만든 객체다(DB에 data를 CRUD하는 계층이다).
자신에게 필요한 인터페이스를 DAO에게 던지고 DAO는 이 인터페이스를 구현한 객체를 사용자에게 편리하게 사용할 수 있도록 반환해준다.
Mybatis 등을 사용할 경우 커넥션풀까지 제공되고 있기 때문에 DAO를 별도로 만드는 경우는 드물다.

MVC 패턴의 Model에서 DAO와 같은 일을 수행한다.

DAO를 사용하는 이유

  • Database에 접근하기 위한 로직과 비즈니스 로직을 분리하기 위해서 사용한다.
  • 효율적인 커넥션 관리와 보안성 때문이다.
    DB에 대한 접근을 DAO가 담당하도록 하면 다수의 원격 호출을 통한 오버헤드(어떤 처리를 하기 위해 들어가는 간접적인 처리 시간과 메모리)를 줄일 수 있다.

DAO 클래스의 사용

일반적으로 한 개의 DB 테이블 당 한 개의 DAO 클래스를 작성한다.
각 DAO 클래스는 INSERT, SELECT, UPDATE, DELETE 쿼리를 실행해 주는 메소드를 제공한다.
이 메소드들은 하나의 SQL 명령을 전달하여 실행된 결과를 반환하도록 작성한다.
SQL 명령을 전달하면 DTO(테이블의 칼럼과 매핑되는 프로퍼티를 갖는 자바 클래스)를 사용하여 DB에 접근한다.
결과적으로 테이블로부터 데이터를 읽어와 자바 객체로 변환하거나
또는 자바 객체의 값을 테이블에 저장한다.

DAO와 싱글톤

DAO는 하나의 객체에 여러 쿼리를 담는 것이기에 singleton 방식으로 객체를 생성해야 한다.
외부에서 직접 생성하지 못하도록 private 선언하기
즉, main에서 new 생성자를 통해서 객체를 만들 수 있는 길을 차단하고 메서드를 통해서 객체를 생성하도록 만들어야 한다.
static으로 오직 1개의 객체만 생성하기
생성된 객체는 static 객체화를 통해 하나의 객체만이 존재하도록 만들어야 한다.

처음 실행단계: 객체가 null 값
그 이후: return을 통해 이미 존재하는 객체를 계속해서 불러오는 방식

DTO(Data Transfer Object)

DTO는 계층간(Controller, View, Business Layer) 데이터 교환을 위한 자바 빈즈(Java Beans, 자바 클래스 중 하나로 비즈니스 로직 부분을 처리하는 자바 프로그램 단위)를 의미한다.
DTO는 로직을 가지지 않는 데이터 객체이고 getter/setter메소드만 가진 클래스를 의미한다.

VO(Value Object) vs DTO

VO는 값 오브젝트로써 값을 위해 쓰이며, read only 속성을 갖는다.
VO는 특정한 비즈니스 값을 담는 객체다(setter가 없다).
DTO는 각 계층간 데이터 교환을 위한 객체를 말한다(setter를 사용하며 가변의 성격을 가진다).

profile
천천히 꾸준히

0개의 댓글