나를 기록하다
article thumbnail
Published 2023. 10. 14. 21:00
[테코톡] MVC 패턴 Review/Techotalk
반응형

우아한테크코스

자바 MVC 패턴을 공부하면서 저번에 시청한 적이 있지만 정리를 하지 않았기에 복습 겸 우아한테크 유튜브에 올라와있는 테코톡 MVC 패턴을 시청하고 정리하려 한다. 테코톡엔 양질의 자료가 많으니 CS에 관심이 있다면 듣는 것을 추천한다.


MVC는 왜 생겨난걸까?

과거의 프로그래머들은 수많은 프로그램을 만들었다. 코드가 많아질수록 복잡해져 코드가 파악하기 힘들고 기능을 수정할 때마다 대부분의 코드를 갈아엎어야 하는 경우가 많았다. 즉, 유지보수가 어려웠다. 계속 코드를 짜다보니, 특정 코드 구성에서 유지보수의 편리성을 발견했다. 이러한 규칙성을 조금씩 찾고 패턴을 공식처럼 만들어 논문으로 발표하게 됐고, 많은 프로그래머들의 사랑을 받아 오늘날의 MVC 패턴이 생겨나게 되었다.

MVC는 유지보수가 편해지는 코드 구성 방식이라고 할 수 있다.

 

[예제] MVC를 웹에 비유

 

MVC 패턴

 

  1. 사용자가 구글에 코딩이라고 검색
  2. 컨트롤러는 코딩에 대한 검색 결과 데이터를 모델에 요청
  3. 모델은 검색 결과 데이터를 찾아서 컨트롤러에게 전달
  4. 컨트롤러는 뷰에게 전달
  5. 뷰는 UI 검색 결과 데이터를 나눠서 사용자에게 전달
모델(Model)
  • 데이터와 관련된 부분
컨트롤러(Controller)
  • 모델과 뷰를 이어주는 부분
뷰(View)
  • 사용자한테 보여지는 부분

MVC를 지키면서 코딩하는 방법(5가지 규칙)

1. Model은 Controller와 View에 의존하지 않아야 한다.

  • Model 내부에 Controller와 View에 관련된 코드가 있으면 안된다.
  • Model 클래스 내에서 Controller와 View에 클래스를 import해서 사용하면 안된다.
  • Model은 데이터와 관련되어 있어 언제나 깔끔하고 정제된 데이터를 꺼내 쓸 수 있도록 데이터와 관련된 코드만 모아둔다.
public class Student {
	private String name;
	private int age;

	public Student(String name, int age) {
		this.name = name;
		this.age = age;
	}

	public String getName() {
		return name;
	}

	public int getAge() {
		return age;
	}
}

2. View는 Model에만 의존해야 하고, Controller에는 의존하면 안된다.

  • View 내부에 Model의 코드만 있을 수 있고, Controller의 코드가 있으면 안 된다.
public class OutputView {
	public void printProfile(Student student) {
		System.out.println("내 이름은 " + student.getName() + "입니다.");
		System.out.println("내 나이는 " + student.getAge() + "입니다.");
	}
}

3. View가 Model로부터 데이터를 받을 때는, 사용자마다 다르게 보여주어야 하는 데이터에 대해서만 받아야 한다.

  • View는 사용자한테 보이는 UI와 Model로부터 받은 데이터가 합쳐져서 만들어진다.
  • 모든 사용자에게 똑같이 보여야 하는 부분은 Model로부터 데이터를 받으면 안된다.(View가 자체적으로 가지고 있어야 할 데이터)

출처: [10분 테코톡] 제리의 MVC 패턴

4. Controller는 Model과 View에 의존해도 된다.

  • Controller 내부에는 Model과 View의 코드가 있을 수 있다.
public class Controller {
	public static void main(String[] args) {
		Student student = new Student("흥민", 30);
		OutputView.printProfile(student);
	}
}

5. View가 Model로부터 데이터를 받을 때, 반드시 Controller에서 받아야 한다.

  • 위의 Controller 코드를 보면, Controller 코드 내에서만 View가 Model로부터 데이터를 받을 수 있다.

MVC 적용

경주할 자동차 이름을 입력하세요.(이름은 쉼표(,) 기준으로 구분)
pobi,woni,jun
시도할 횟수는 몇회인가요?
5

실행 결과
pobi : -
woni :
jun : -

pobi : --
woni : -
jun : --

pobi : ---
woni : --
jun : ---
MVC 규칙을 지키지 않은 코드
public class Car {
    private static final String ONE_STEP = "-";
    
    public Result move() {
    	...
        OutputView.printResult(ONE_STEP);
        return result;
    }
}

public class OutputView {
	public static void printResult(String step) {
    	System.out.println(step);
    }
}

public class GameManagerController {
	public void play() {
    	InputView.inputCarNames();
        ...
        car.move();
    }
}
MVC 규칙을 지킨 코드
public class Car {    
    public Result move() {
    	...
        return result;
    }
}

public class OutputView {
    private static final String ONE_STEP = "-";
    
	public static void printResult(Result result) {
    	...
    	System.out.println(ONE_STEP);
    }
}

public class GameManagerController {
	public void play() {
    	InputView.inputCarNames();
        ...
        Result result = car.move();
        OutputView.printResult(result);
    }
}

참고자료

https://www.youtube.com/watch?v=ogaXW6KPc8I

 

반응형

'Review > Techotalk' 카테고리의 다른 글

[테코톡] Stream - 스트림, 알고 쓰자!  (2) 2023.10.24
[테코톡] DTO와 VO  (0) 2023.09.12
[테코톡] OCP와 전략패턴  (0) 2023.09.11
profile

나를 기록하다

@prao

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!

profile on loading

Loading...