MVC 패턴이란?

: SW 공학, 아키텍처 디자인 패턴 중 하나로 Model - View - Controller의 약자
: MVC의 핵심은 화면(View), 제어(Controller), 데이터 연동(Model)을 구성하는 로직(코드)를 분리하여 서로 간의 영향도(결합도)를 줄이고 코드를 간결하게 관리하여 코드 설계 품질을 향상시킬 수 있는 기법
MVC 구성요소 3가지
View
: User Interface (UI) 를 담당하는 코드
: 사용자로부터 입력 받고, 결과를 화면에 보여주기 위한 역할
ex) 고객과 소통하는 역할 = 프론트 직원
Controller
: View와 Model의 중간다리 역할
: View로 부터 전달 받은 사용자 입력(요청)을 분석하고, 이에 필요한 데이터를 Model로 부터 전달 받아 올바른 결과의 View를 구성하도록 전달
ex) 일은 하지 않고 시키기만 하는 역할 = 관리직
Model
: 데이터를 처리하기 위한 로직을 구성
: DBMS와 상호작용 하거나 DATA를 가공하는 역할
: 비즈니스 로직이라고도 부르며, 요청 받고 실제 필요한 데이터를 가공하는 역할
ex) 노동자
MVC Class의 구조

VO(Value Object)
: 데이터베이스의 각 컬럼 개체(entity) 저장용 클래스가 있는 패키지
: DB의 도메인 정보를 Client에게 전달할 때 그 도메인 단위 정보를 VO에 구현
DTO(Data Transfer Object)
: 데이터베이스의 각 컬럼 개체(entity) 저장용 클래스가 있는 패키지
: DB의 도메인과 일치하지 않으며 어떤 로직에 사용되는 영속적이지 않은 정보를 DTO에 구현
DAO(Data Access Object)
: DB에 접근하여 DB 관련 처리를 담당하는 클래스
- 기능 별로 메서드를 구현함
ex) member테이블
- 회원가입하는 메서드 insert()
- 회원탈퇴하는 메서드 delete()
- 회원수정하는 메서드 update()
- 회원정보검색하는 메서드 one(),list()
💭DTO와 VO는 무엇이 다른걸까 ?
DTO(Data Transfer Object)
: 순수하게 데이터를 담아 계층 간으로 ‘전달’하는 객체
- getter, setter 메소드만 가진다.
- 추가적으로 toString(), equals()과 같은 Object 클래스 메소드 사용가능
public class MemberDTO {
private String name;
private String password;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPassword() {
return password;
}
public void setPassword(String id) {
this.password = password;
}
}
→ 데이터 전송이 목적
VO(Value Object)
: 값 그 자체를 나타내는 객체
- 불변성 보장
- 주로 비즈니스 로직에 사용
public class UserService {
public void createUser(UserDTO userDTO) {
// UserDTO를 사용하여 사용자 생성
}
public Money calculateTotalAmount(List amounts) {
BigDecimal total = BigDecimal.ZERO;
for (Money amount : amounts) {
total = total.add(amount.getAmount());
}
return new Money(total, Currency.getInstance("USD"));
}
}
→ 비즈니스 로직이 목적
'[Java] 자바' 카테고리의 다른 글
| [JAVA] 정렬 메소드 정리 (2) | 2024.11.22 |
|---|---|
| [Intellij] new에서 Class 생성이 안될 때 (0) | 2024.07.22 |
| [JAVA] Getter와 Setter (0) | 2024.07.22 |
| [JAVA] 상속과 구현의 차이(extends와 implements) (0) | 2024.07.09 |
| [JAVA] 인터페이스 (1) | 2024.07.08 |