[DB] DAO | DTO | VO

Jeini·2023년 5월 15일
0

🗂️ DB | SQL

목록 보기
2/5
post-thumbnail

💡 DAO(Data Access Object)


✔️ DB의 데이터에 접근하기 위한 객체이며 데이터베이스 접근을 하기 위한 로직과 비즈니스 로직을 분리하기 위해 사용

  • 사용자는 자신이 필요한 Interface를 DAO에게 던지고 DAO는 이 Interface를 구현한 객체를 사용자에게 편리하게 사용할 수 있도록 반환한다.

  • 직접 DB에 접근하여 data를 삽입, 삭제, 조회 등 조작할 수 있는 기능을 수행한다.

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

✏️ DAO 예시

import java.util.Vector;
import javax.servlet.ServletContext;


public class StudentDAO {
	private static ServletContext application;
	public static void init(ServletContext application) {
		StudentDAO.application = application;
	}
	
	public static Vector<Student> getAll() {
		Vector<Student> list = (Vector<Student>)application.getAttribute("list");
		if(list == null) {
			list = new Vector<Student>();
			application.setAttribute("list", list);
		}
		
		return list;
	}
	
	public static boolean insert(Student student) {
		return getAll().add(student);
	}
	
	public static boolean delete(int s_id) {
		Vector<Student> list = getAll();
		
		Student s = getStudentById(s_id);
		return list.remove(s);
	}
	
	public static Student getStudentById(int s_id) {
		Vector<Student> list = getAll();
		Student s = new Student(s_id);
		int idx = list.indexOf(s);
		
		Student target = null;
		if(idx >= 0) {
			target = list.get(idx);
		}
		return target;
	}
	
	public static boolean update(Student s) {
		Vector<Student> list = getAll();
		int idx = list.indexOf(s);
		
		boolean flag = false;
		if(idx >= 0) {
			list.set(idx, s);
			flag = true;
		}
		
		return flag;
	}
	
	public static Vector<Student> getStudentsByClass(String s_class) {
		Vector<Student> list = getAll();
		
		Vector<Student> result = new Vector<Student>();
		for(Student s : list) {
			if(s.getS_class().equals(s_class)) {
				result.add(s);
			}
		}
		return result;
	}
	
	public static Vector<Student> getStudentByName(String s_name) {
		Vector<Student> list = getAll();
		
		Vector<Student> result = new Vector<Student>();
		for(Student s : list) {
			if(s.getS_name().equals(s_name)) {
				result.add(s);
			}
		}
		return result;
	}
}

💡 DTO(Data Transfer Object)


✔️ 계층 간 데이터 교환을 위한 Java Beans 또는 데이터베이스 레코드의 데이터를 매핑하기 위한 데이터 객체

  • 보통 로직을 가지고 있지 않다.

  • data와 그 data에 접근을 위한 getter, setter만 가지고 있다.

  • DB에서 data를 얻어 ServiceController등으로 보낼 때 사용하는 객체를 말함.

✏️ DTO 예시

package kr.ac.jipark09;

public class StudentDTO {
	private int id;
	private String name;
	private String tel;
	private int grade;
	private String group;
	
	public StudentDTO(int id) {
		setId(id);
	}
	public StudentDTO(String name, String tel, int grade, String group) {
		setName(name);
		setTel(tel);
		setGrade(grade);
		setGroup(group);
	}
	
	
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	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;
	}
	public int getGrade() {
		return grade;
	}
	public void setGrade(int grade) {
		this.grade = grade;
	}
	public String getGroup() {
		return group;
	}
	public void setGroup(String group) {
		this.group = group;
	}
}

💡 VO(Value Object)


✔️ 값 오브젝트로써 값을 위해 쓰이며, Read-Only특징을 가진다.

  • DTO와 유사하지만, getter기능만 가진다.

❗️ Read-Only

  • 사용하는 도중에 변경 불가능하며 오직 읽기만 가능

📌 DTO와 VO 차이점


📎 DTO

  • 인스턴스 개념
  • 가변적인 성격을 가진 클래스 (setter 활용)
  • 단지 데이터를 담는 그릇의 역할 + 데이터가 전달되어야 할 대상일 뿐
  • 전달될 데이터를 보존해야하는 특성

📎 VO

  • 리터럴 값 개념
  • 불변의 성격을 가진 클래스
  • Read-Only를 보장해줘야 존재의 신뢰성이 확보
  • 값 자체에 의미가 있음
profile
Fill in my own colorful colors🎨

0개의 댓글