우테코 2주차 프리코스 제출을 한 뒤, 역할 분리에 어려움을 겪었어서 다른 사람의 코드를 참고하여 리팩토링하려고 했다. 나는 MVC로 나눠서 코드를 짰지만, 다른 사람들은 Service, Domain, Repository 패키지로 나눠서 더 세분화시켰더라. 이 세가지가 무슨 의미이고 역할을 하는지 찾아봤다! 이해한 대로 정리를 하려고 한다.
먼저,
MVC 패턴이란?
MVC 패턴은 MODEL VIEW CONTROLLER 의 약자로 하나의 애플리케이션을 3가지 역할로 나누어 구분한 패턴이다.
📍 효과
- 유지보수
- 코드 이해 쉬움
✔️ Model
애플리케이션이 어떤 일을 하는지에 대해 작성한다.
즉, 비즈니스 로직을 담당한다.
데이터 처리 및 검증과 같은 작업을 처리한다.
View 나 Controller에 대해 어떤 정보도 알지 말아야 한다.
View나 Controller에 속하는 역할 X
정보를 갖고 있어도 X
✔️ View
사용자에게 정보를 표시하는 역할을 한다.
사용자 인터페이스와 데이터의 표현을 담당하며 사용자의 요청에 따라 정보를 갱신한다.
Model의 정보를 저장하고 있으면 안된다.
View는 Controller을 통해 모델에서 정보를 받아 화면에 출력해주는 역할이다.
✔️ Controller
중재자 역할.
사용자의 입력을 받아 처리하고, 적절한 응답을 전달해 주기 위해 Model과 View에게 요구하고 전달한다.
Model과 View에 대해 알고 있어야한다.
Model과 View 사이를 좋게 좋게~
그렇다면 Service, Domain 그리고 Repository 는 무슨 역할을 할까?
⭐️ Service & Domain & Repository란?
- Service : 컨트롤러에 필요한 핵심 비즈니스 로직 구현
- Domain : 비즈니스 도메인 객체 (Entity, Model)
- Repository : db에 접근하고, domain 객체를 저장하고 관리 (dao)
public class User{
private String name;
privateInteger yearOfBirth;
...
}
위와 같은 User class가 있다 하자.
여기서 이 객체가 어떤 역할을 하게 할지에 따라 domain인지 service인지 나뉜다.
유저의 나이를 구하는 코드를 이 코드에 작성한다면 -> domain
Getter() 함수를 만들어서 다른 객체에게 넘겨주고 한다면 -> service
그래서 mvc로만 나뉘어져 있던 구조를 domain, service를 사용하여 더 구분했다.
[수정전]
[수정후]
[수정된 점]
- model -> domain 패키지 이름 변경
- RacingGame 클래스에서 차 이름 입력받고, 시도횟수를 입력 받는 역할을 Register 클래스로 나눴다.
- Register 클래스와 Round 클래스를 service 패키지로 이동
'Java' 카테고리의 다른 글
intellij 빌드 및 실행 오류 : 올바른 springboot 애플리케이션 클래스가 아닙니다 (0) | 2025.03.21 |
---|