데이터베이스의 data접근을 위한 객체입니다. 데이터베이스 접근을 위한 로직과 비즈니스 로직을 분리하기 위해 사용합니다. DAO는 데이터를 조회하거나 조작하는 기능을 전담하도록 만든 오브젝트입니다.
사용자는 자신이 필요한 Interface를 DAO에 건네주고 DAO는 이 인터페이스를 구현한 개체를 사용자에게 편리하게 사용할 수 있도록 반환해줍니다.
DTO (Data Transfer Object)
계층간 데이터 교환을 위한 자바빈즈를 말합니다. 여기서 계층은 컨트롤러, 뷰, 비즈니스, 퍼시스턴스 계층을 말하며 각 계층간 데이터 교환을 위한 객체를 말합니다.
계층들간의 데이터 교환을 위해 통일성있는 오브젝트를 제공할 필요가 있으며 그것을 그룹한 것이 DTO입니다. 데이터베이스 레코드의 데이터를 매핑하기 위한 데이터 객체나, 다양한 basic 폼을 제공해줍니다. 데이터를 담을 그릇이라고 생각하면 될 것 같습니다.
Getter와 setter 메소드가 존재하며 JAVA에서는 문법적으로 제공된 않지만 표면적으로 set과 get이후에 나오는 단어가 property라고 약속합니다. Get과 set이 쌍을 이루어 get에 매칭된 set값들을 가지고 오게 됩니다. 파이썬의 딕셔너리 구조의 key-value와 비슷하다고 생각하면 될 것 같습니다.
VO (Value Object)
값 오브젝트로써 값을 위해 쓰입니다.
DTO와 공통점은 데이터를 getter를 통해 사용하므로 주 목적은 같습니다. 하지만 VO는 불변의 성격을 가졌기에 차이점이 있습니다.
이러한 클래스는 중간에 값을 바꿀 수 없고 새로 만들어야 한다는 특징이 있습니다.
예를들어 Color클래스에 Red를 표현하기 위해 Color.Red등을 사용하며 getter 기능만이 존재합니다.