MVC 패턴
소프트웨어 디자인 패턴
애플리케이션을 세 가지 역할로 나누어 구조화하는 방식
UI(User Interface)를 가진 애플리케이션에서 많이 사용됨
유지보수를 용이하게 만듦
Model
데이터와 관련된 로직 처리
- 데이터 저장 및 관리
- 주요 기능에 관련된 로직 처리
- 데이터 유효성 검사 및 데이터 규칙 정의
View와 직접적으로 공유하지 않는다
Controller에게 데이터를 요청 받고, 데이터를 넘겨준다
Model은 데이터와 관련된 모든 작업을 캡슐화해, View와 Controller가 데이터의 구체적인 처리 방식을 알 수 없도록 만든다
View
사용자에게 보여지는 부분, 즉 UI(User Interface) 부분 담당
Model로부터 데이터를 받아 화면에 표시
View가 데이터를 받을 때는 Model로부터 직접적으로 받지 않고, Controller에서 받는다
Controller와 직접적으로 공유하지 않는다
사용자의 입력을 감지해 이벤트를 Controller로 전달
- 입력에 대한 로직이나 데이터를 처리하지는 않음
전달한 이벤트에 대해 Controller가 Model을 업데이트 하거나 로직 수행 후
다시 View에게 그 결과를 전달해 화면을 업데이트하라 지시할 수 있음
Controller
Model과 View를 이어주는 중간 관리 역할
입력 처리, 로직 수행, 애플리케이션 흐름 제어
사용자 입력 이벤트를 View로부터 받아 관련된 로직 수행,
Model의 데이터를 변경하거나, Model의 변경 사항에 대해 업데이트 하도록 View에 지시
모델과 뷰에 대해 알고 있어야 한다
// Model: 사용자 데이터와 관련된 로직을 담당
public class User
{
public string Name { get; set; }
public User(string name)
{
Name = name;
}
}
// View: 데이터를 화면에 출력하는 역할
public class UserView
{
public void DisplayUser(string userName)
{
Console.WriteLine("User Name: " + userName);
}
}
// Controller: 모델과 뷰를 제어하고 연결하는 역할
public class UserController
{
private User _user;
private UserView _view;
public UserController(User user, UserView view)
{
_user = user;
_view = view;
}
// 모델의 사용자 이름을 설정하는 메서드
public void SetUserName(string name)
{
_user.Name = name;
}
// 모델에서 사용자 이름을 가져오는 메서드
public string GetUserName()
{
return _user.Name;
}
// 사용자 데이터를 화면에 출력하는 메서드
public void UpdateView()
{
_view.DisplayUser(_user.Name);
}
}
// Main: 애플리케이션을 실행하는 부분
class Program
{
static void Main(string[] args)
{
// 모델과 뷰 객체 생성
User user = new User("John Doe");
UserView view = new UserView();
// 컨트롤러에 모델과 뷰를 전달하여 초기화
UserController controller = new UserController(user, view);
// 초기 사용자 이름 출력
controller.UpdateView();
// 사용자 이름 변경
controller.SetUserName("Jane Doe");
// 변경된 이름 출력
controller.UpdateView();
}
}
'취준 > 기술면접' 카테고리의 다른 글
Unity 생명주기 (0) | 2024.11.11 |
---|---|
Unity의 Update (0) | 2024.11.10 |
SOLID 원칙 (0) | 2024.11.08 |
객체지향 프로그래밍(Object-Oriented Programming, OOP) (3) | 2024.11.07 |
객체와 인스턴스 (0) | 2024.11.01 |