Notice
Recent Posts
Recent Comments
Link
«   2024/06   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30
Tags
more
Archives
Today
Total
관리 메뉴

채채

VO, BO, DAO, DTO란? 본문

spring boot

VO, BO, DAO, DTO란?

HChaeEun 2024. 1. 6. 20:45

figma 정리본


1. DAO(Data Access Object)

public class UserDao {
	private Connection connection;

    public void saveUser(User user) {
    	String query = "INSERT INTO users (username, email) VALUES (?, ?)";
        try (PreparedStatement preparedStatement = connection.prepareStatement(query)) {
            preparedStatement.setString(1, user.getUsername());
            preparedStatement.setString(2, user.getEmail());
            preparedStatement.executeUpdate();
        } catch (SQLException e) {
        	e.printStackTrace();
        }
    }
}

DAO는 데이터베이스의 데이터에 접근하는 기능을 가진 클래스이다.

Service에 의해 호출되어 DB CRUD(삽입, 삭제, 갱신, 조회)를 담당하며, 

DataBase 접근을 하기 위한 로직과 비지니스 로직을 분리하기 위해 사용한다.

때문에 DB Connection 로직까지 설정되어있는 경우가 많다.

 

2. Repository

public interface NaverNewsItemRepository extends JpaRepository<NaverNewsItem,Long> {
    NaverNewsItem findByTitle(String title);
}

Spring Data JPA와 같은 프레임워크에서 제공하는 인터페이스로 ORM(Object-Relational Mapping) 기술을 기반으로 동작한다.
이는 객체 지향적인 방식으로 데이터베이스에 접근하고, DAO와 마찬가지로 Service에 의해 호출되어 DB CRUD를 담당한다.

 

3. DAO vs Repository

이 둘은 거의 같다고 생각해도 무방하다.

  • Repository: 엔티티 객체를 보관하고 관리하는 저장소
  • DAO: 데이터에 접근하도록 DB접근 관련 로직을 모아둔 객체


둘다 개념의 차이일뿐 실제로 개발할 때는 비슷하게 사용된다.

 

4. DTO(Data Transfer Object)

@Setter
@Getter
public class NaverResultDto {
    private String lastBuildDate;
    private int total;
    private int start;
    private int display;
    private List<NaverNewsItem> items;
}

Controller, Service, View 등 계층간 데이터 교환을 위해 사용되는 객체이다.
로직을 갖지 않는 순수한 데이터 객체이며 getter, setter(가변) 메소드만을 포함한다.

 

5. VO(Value Object)

public class UserVO {
    private final String name;

    public UserVO(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }
}

데이터 저장 담당 클래스로 값(Value)을 위해 쓰이는 객체이며,
getter(불변, read only)의 기능만을 포함하는 것이 특징이다.

 

6. BO(Business Object)

@Getter
@RequiredArgsConstructor
public class UserBO {
	private final String username;
    private final String password;
    
    // 비밀번호 검증
    public boolean verifyPassword(String inputPassword) {
    	return this.password.equals(inputPassword);
    }
}

비즈니스 로직을 포함하는 오브젝트로 불변성을 지향하는 점에서 VO와 같다.

쉽게 말해 BO는 비즈니스 관련내용을 담은 VO라고 할 수 있다.


참고)

 

DAO vs DTO vs VO vs BO 차이

DAO(Data Access Object), DTO(Data Transfer Object), VO(Value Object), BO(Business Object) 간에 어떤 차이가 있는지 알아보자.

berrrrr.github.io

 

 

DAO? DTO? VO? Entity?

DAO? DTO? VO? ENTITY?

velog.io