관리 메뉴

Life goes slowly...

[Java] 자바 로직 분리 - DAO / DTO / VO 본문

프로그래밍/Java

[Java] 자바 로직 분리 - DAO / DTO / VO

빨강소 2020. 10. 14. 00:07
728x90
반응형

DAO (Data Access Object)

Java 프로그래밍 코딩중에 Database의 Data에 접근하기 위한 객체로써, Database의 접근을 하기 위한 로직과 비즈니스 로직을 분리하기 위해서 사용합니다.

Database에 접근하기 위한 호출을 하거나 직접 쿼리를 작성하여 사용하는 Class 파일을 말합니다.

요즘에는 Mybatis 등을 사용하게 되면 커넥션풀까지 제공하여 DAO를 별로 만드는 경우가 줄어들게 되었습니다.

 

import java.sql.Connection; 
import java.sql.DriverManager; 
import java.sql.PreparedStatement; 
import java.sql.SQLException; 
public class TestDao { 
	public void add(TestDto dto) throws ClassNotFoundException, SQLException { 
		Class.forName("com.mysql.jdbc.Driver"); 
		Connection connection = DriverManager.getConnection("jdbc:mysql://localhost/test", "root", "root"); 
		PreparedStatement preparedStatement = connection.prepareStatement("insert into users(id,name,password) value(?,?,?)"); 

		preparedStatement.setString(1, dto.getId()); 
		preparedStatement.setInt(2, dto.getName()); 
		preparedStatement.setString(3, dto.getPassword()); 
		preparedStatement.executeUpdate(); 
		preparedStatement.close(); 
		connection.close(); 
	} 
}

 

DTO(Data Transfer Object)

Java 프로그래밍 코딩중에 Data 교환을 위한 객체로써, 일반적인 DTO는 private 변수 선언과 함께 get, set 등을 사용하여 매서드를 구현한 Class 파일을 말합니다.

DTO는 주로 비동기처리를 할 때 사용합니다. 비동기 처리에서도 JSON 데이터 타입으로 변환해야 하는 경우, Spring Boot에서 Jackson 라이브러리를 제공하는데, Jackson은 ObjectMapper를 사용해서 별다른 처리 없이도 객체를 JSON 타입으로 변환시켜 줍니다.

public class PersonDTO { 
	private String id; 
	private String password; 
	public String getId() { 
		return id; 
	} 
	public void setName(String id) { 
		this.id = id; 
	} 
	public String getName() { 
		return name; 
	} 
	public void setName(String name) { 
		this.name = name; 
	} 
	public String getPassword() { 
		return password; 
	} 
	public void setPassword(String password) { 
		this.password = password; 
	} 
}

 

VO(Value Object)

Java 프로그래밍 코딩중에 VO의 핵심 역할은 equals()와 hashcode() 를 오버라이딩 하는 것입니다. 즉, VO 내부에 선언된 속성(필드)의 모든 값들이 VO 객체마다 값이 같아야, 똑같은 객체라고 판별합니다. DTO와 동일한 개념이긴 하지만 read only 속성을 가지고 있습니다. VO 패턴은 데이터 전달을 위한 가장 효율적인 방법이긴 하지만, 클래스 선언을 위해 많은 코드가 필요하다는 단점이 있습니다.

 

728x90
반응형
Comments