๐[Java] DAO, DTO, VO์ ๋ํด์โฆ
DAO, DTO, VO๊ฐ ๋ญ๊น?
DAO
, DTO
, VO
๋ ๋ชจ๋ ๋ฐ์ดํฐ์ ์ฐ๊ด๋ ๊ฐ์ฒด๋ผ๋ ๊ณตํต์ ์ด ์๋ค.
Spring
์ผ๋ก ๊ฐ๋ฐ์ ํ ๋ ์ด๋ค ๊ฐ์ฒด๊ฐ ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉํ๊ณ , ์ด๋ค ๊ฐ์ฒด๊ฐ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ง์ ์ฐ๋ํ๋์ง๊ฐ ์ด๋ ค์ ๋ง์ด ํด๋งธ๋ค.
์ฌ๊ธฐ์ ๊ทธ๋ฐ ์ญํ ์ ํ๋ ๊ฐ์ฒด๋ค์ธ DAO
, DTO
, VO
์ ๋ํด ์ ๋ฆฌํ๊ฒ ๋ค.
DAO (Data Access Object)
DAO
๋, ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉ
ํ ์ ์๋ ๊ธฐ๋ฅ์ด ๋ด๊ธด ํด๋์ค์ด๋ค.
DB์ ์ ๊ทผํ๊ธฐ ์ํ ๋ก์ง๊ณผ ๋น์ฆ๋์ค ๋ก์ง์ ๋ถ๋ฆฌํ๊ธฐ ์ํด ์ฌ์ฉํ๋ค.
๊ทธ๋์ DB Connection
๋ก์ง๊น์ง ์ค์ ๋์ด ์๋ ๊ฒฝ์ฐ๊ฐ ๋ง๊ณ , DB๋ฅผ ์ฌ์ฉํด ๋ฐ์ดํฐ๋ฅผ CRUD
ํ๋ ๊ธฐ๋ฅ์ ์ ๋ดํ๋ค.
Spring
์์ @Repository
์ ๋
ธํ
์ด์
์ด ๋ถ์ ํด๋์ค๊ฐ DAO
๋ผ๊ณ ํฉ๋๋ค.
CRUD๋?
CRUD
๋, ๋ฐ์ดํฐ๋ฅผ ์์ฑ, ์ฝ๊ธฐ, ์์ , ์ญ์ ํ๋ ๋ฑ์ ๊ธฐ๋ฅ์ ๋งํ๋ค.
CRUD | ์ค๋ช |
---|---|
Create | ๋ฐ์ดํฐ๋ฅผ โ์์ฑโ |
Read | ๋ฐ์ดํฐ๋ฅผ โ์ฝ๊ธฐโ |
Update | ๋ฐ์ดํฐ๋ฅผ โ์์ โ |
Delete | ๋ฐ์ดํฐ๋ฅผ โ์ญ์ โ |
์์ ์ฝ๋
[MemberDAO]
package org.practice.di.persistence;
import org.practice.di.domain.StudentVO;
public interface MemberDAO {
public StudentVO read(String id) throws Exception;
public void add(StudentVO student) throws Exception;
}
[MemberDAOImpl]
package org.practice.di.persistence;
import java.util.HashMap;
import java.util.Map;
import org.practice.di.domain.StudentVO;
public class MemberDAOImpl implements MemberDAO {
private Map<String, StudentVO> storage = new HashMap<String, StudentVO>();
public StudentVO read(String id) throws Exception {
return storage.get(id);
}
public void add(StudentVO student) throws Exception {
storage.put(student.getId(), student);
}
}
DTO (Data Transfer Object)
DTO
๋, ๋ฐ์ดํฐ ์ ์ฅ
์ ๋ด๋นํ๋ ํด๋์ค์ด๋ค.
Controller
, Service
, View
๋ฑ์ ๊ณ์ธต ๊ฐ ๋ฐ์ดํฐ ๊ตํ
์ ์ํด ์ฌ์ฉ๋๋ ๊ฐ์ฒด๋ก ์๊ฐํ ์ ์๋ค.
๋ก์ง์ ๊ฐ๊ณ ์์ง ์์ ์์ํ ๋ฐ์ดํฐ ๊ฐ์ฒด -> getter/setter & toString() ๋ฉ์๋๋ง ํฌํจํ๊ธฐ ๋๋ฌธ์ ๊ฐ๋ณ
์ ์ธ ์์ฑ์ ๋๋ค.
์ ์ ๊ฐ ๋ฐ์ดํฐ๋ฅผ ์ ๋ ฅํ๊ณ , ๊ทธ ๋ฐ์ดํฐ๋ฅผ DB์ ๋ฃ๋ ๊ณผ์ ์ ์๊ฐํด๋ณด์.
- ์ ์ ๊ฐ ์์ ์ ๋ธ๋ผ์ฐ์ ์์ ๋ฐ์ดํฐ๋ฅผ ์ ๋ ฅ
- form์ ์๋ ๋ฐ์ดํฐ๋ฅผ
DTO
์ ๋ด์ ์ ์ก - ํด๋น
DTO
๋ฅผ ๋ฐ์ ์๋ฒ๊ฐDAO
๋ฅผ ์ด์ฉํด ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ก ๋ฐ์ดํฐ๋ฅผ ์ฝ์
์์ ์ฝ๋
[Service]
package org.practice.di.service;
import org.practice.di.domain.StudentVO;
public interface MemberService {
public StudentVO readMember(String id) throws Exception;
public void addMember(StudentVO student) throws Exception;
}
[MemberServiceImpl]
package org.practice.di.service;
import org.practice.di.domain.StudentVO;
import org.practice.di.persistence.MemberDAO;
public class MemberServiceImpl implements MemberService {
private MemberDAO memberDAO;
public MemberServiceImpl(MemberDAO memberDAO) {
this.memberDAO = memberDAO;
}
/*
public void setMemberDAO(MemberDAO memberDAO) {
this.memberDAO = memberDAO;
}
*/
public StudentVO readMember(String id) throws Exception {
return memberDAO.read(id);
}
public void addMember(StudentVO student) throws Exception {
memberDAO.add(student);
}
}
VO (Value Object)
VO
๋, ๋ฐ์ดํฐ ์ ์ฅ
์ ๋ด๋นํ๋ ํด๋์ค๋ก, DTO
์ ๋น์ทํ๋ค.
๊ทธ๋์ ์๋ก ํผ์ฉํ์ฌ ์ฌ์ฉํ๊ธฐ๋ ํ์ง๋ง, VO
๋ ๊ฐ
์ ์ํด ์ฌ์ฉํ๋ ๊ฐ์ฒด๋ก, ๋ถ๋ณ
์ ์ธ ์์ฑ์ ๊ฐ๊ณ ์๋ค.
์์ ์ฝ๋
[StudentVO]
package org.practice.di.domain;
public class StudentVO {
private String id;
private String passwd;
private String username;
private String snum;
private String depart;
private String mobile;
private String email;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getPasswd() {
return passwd;
}
public void setPasswd(String passwd) {
this.passwd = passwd;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getSnum() {
return snum;
}
public void setSnum(String snum) {
this.snum = snum;
}
public String getDepart() {
return depart;
}
public void setDepart(String depart) {
this.depart = depart;
}
public String getMobile() {
return mobile;
}
public void setMobile(String mobile) {
this.mobile = mobile;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
@Override
public String toString() {
return "StudentVO [id=" + id + ", passwd=" + passwd + ", username=" + username + ", snum=" + snum + ", depart="
+ depart + ", mobile=" + mobile + ", email=" + email + "]";
}
}
DTO์ VO์ ์ฐจ์ด
์ข ๋ฅ | ์ฉ๋ | ๋๋ฑ ๊ฒฐ์ | ๊ฐ๋ณ / ๋ถ๋ณ | ๋ก์ง |
---|---|---|---|---|
DTO | - ๊ณ์ธต ๊ฐ ๋ฐ์ดํฐ ์ ๋ฌ | - ์์ฑ๊ฐ์ด ๋ชจ๋ ๊ฐ์๋ ๊ฐ์ ๊ฐ์ฒด๊ฐ ์๋ ์ ์์ | - setter ์กด์ฌ ์ ๊ฐ๋ณ,- setter ๋น ์กด์ฌ ์ ๋ถ๋ณ | - getter/setter ์ด์ธ์ ๋ก์ง์ด ๋ถํ์ํจ |
VO | - ๊ฐ ์์ฒด๋ฅผ ํํ | - ์์ฑ๊ฐ์ด ๋ชจ๋ ๊ฐ์ผ๋ฉด ๊ฐ์ ๊ฐ์ฒด | - ๋ถ๋ณ | - getter/setter ์ด์ธ์ ๋ก์ง์ ๊ฐ์ง ์ ์์ |
์ฐธ๊ณ ์๋ฃ
https://melonicedlatte.com/2021/07/24/231500.html
https://lemontia.tistory.com/591
https://dkswnkk.tistory.com/500
๋๊ธ๋จ๊ธฐ๊ธฐ