본문 바로가기

PHP

MVC패턴

반응형

MVC패턴이란 Model - View - Controller의 약자로 

위선 위키백과에 나오는 설명을 보면

------------------------------------------------------------------------------

모델-뷰-컨트롤러(Model–View–Controller, MVC)는 소프트웨어 공학에서 사용되는 아키텍처 패턴이다. 이 패턴을 성공적으로 사용하면, 사용자 인터페이스로부터 비즈니스 로직을 분리하여 애플리케이션의 시각적 요소나 그 이면에서 실행되는 비즈니스 로직을 서로 영향 없이 쉽게 고칠 수 있는 애플리케이션을 만들 수 있다. MVC에서 모델은 애플리케이션의 정보(데이터)를 나타내며, 뷰는 텍스트, 체크박스 항목 등과 같은 사용자 인터페이스 요소를 나타내고, 컨트롤러는 데이터와 비즈니스 로직 사이의 상호동작을 관리한다.

------------------------------------------------------------------------------

쉽게 말하면 코드를 분업화 하는것이다. 뷰는 말그대로 사용자에가 결과물을 보여줄 수 있는것이고 모델은 데이터의 저장이나 요청받은 데이터를 정확하게 처리하는 것이고 컨트롤러는 모델과 뷰 사이에서 사용자의 요구를 받아 모델에게 데이터를 요청하거나 뷰를 통해 원하는 결과를 사용자에게 보여줄 수 있게 해주는 중간자라고 할 수 있다.

아래의 사진을 보면 더욱 이해하기 쉬울 거라 생각한다.

MVC패턴을 사용하는 이유

코드의 양이 적은 경우에는 MVC세가지를 한꺼번에 집어넣어도 그리 복잡하지 않을것이다. 하지만 코드가 복잡해지고 프로젝트의 규모가 커지게 된다면 한코드에 View, Controller, Model이 들어간다면 코드가 복잡해져서 재사용을 하고 싶어도 하기 어려워 질것이며 문제가 발생했을때 어느 부분에서 문제가 발생했는지를 찾기는 어려워 질 것이다. 하지만 코드를 MVC 세 부분으로 나누어 코드를 작성할 경우 코드 재상용도 용이할 것이며, 나중에 문제가 발생했을시 발생된곳이 어디인지, 어떤부분에서 문제가 발생했는지 찾기가 용이해 질 것이다.

또 프로젝트를 할때에는 한사람이 모든일을 할 수 가 없을것이다. 그렇다면 데이터 처리에 관한일 을 잘하는 사람은 Model쪽을 사용자에게 보여지는 일을 잘하는 사람은 View쪽일을 중간 연계를 잘하는 사람은 Controller부분을 맡음으로써 분업이 가능해 더욱 효율적인 프로젝트를 진행 할 수 있을 것이다.


PHP를 이용한 간단한 MVC모델

1.Controller(Excode.php)

------------------------------------------------------------------------------

<?php

class Excode extends CI_Controller { 

function __construct() {

parent::__construct();

       }

public function index() {

$this->load->view('ExcodeView');

}

public function tomodel() {

$this->load->model('ExcodeModel');

$data['result'] = $this->ExcodeModel->getdata();


$this->load->view('ExcodeView1',$data);

}

}

?>

------------------------------------------------------------------------------

처음 컨트롤러를 실행하면 index()함수부터 실행이 되는데 index()함수는 ExcodeView를 로드해오는 함수이다. 그러므로 처음 컨트롤러를 실행하면 ExcodeView이 화면에 보여지게 될것이다. 그리고 tomodel()함수는 ExcodeModel모델을 로드하는 함수이다. 변수에다가 ExcodeModel의 getdata()함수의 결과값을 집어넣어 ExcodeView1뷰에 변수값도 같이 넘기는 구조로 되어있다.


2.View(ExcodeView.php, ExcodeView1.php)

(ExcodeView.php)----------------------------------------------------------------

<html>

<head>

<title>TITLE</title>

<meta http-equiv="Content-Type" content="text/html; charset=utf-8">

</head>

<body>

<form action = "Excode/tomodel" method = "POST">

<p>숫자 1 : <input  type = "text" name = "num1" /> </p>

<p>숫자 2 : <input  type = "text" name = "num2" /> </p>

<input value = "더하기" type = "submit"/>

</body>

</html>

------------------------------------------------------------------------------

(ExcodeView1.php)--------------------------------------------------------------

<html>

<head>

<title>TITLE</title>

<meta http-equiv="Content-Type" content="text/html; charset=utf-8">

</head>

<body>

<?php

echo '덧셈결과는 ' . $result . '입니다.';

?>

</body>

</html>

------------------------------------------------------------------------------

ExcodeView는 두 수를 Excode의 tomodel함수로 POST방식으로 보내는 구조로 되어있고 ExcodeView1는 결과를 출력하는 구조로 되어있다.


3.Model(ExcodeModel.php)

------------------------------------------------------------------------------

<?php

class ExcodeModel extends CI_Model{

function __construct() {

parent::__construct();

}

function getdata() {

$num1 = $_POST['num1'];

$num2 = $_POST['num2'];


return $num1 + $num2;

}

}

------------------------------------------------------------------------------

모델의 getdata()함수는 POST방식으로 넘겨받은 두 수를 더한값을 리턴하는 구조로 되어있다.

반응형

'PHP' 카테고리의 다른 글

PHP에서의 객체지향 특징  (0) 2012.12.05
간단한 방명록 만들기  (0) 2012.11.29
쿠키란 무엇인가!  (0) 2012.11.20
HTML에서 post방식과 get방식의 차이점  (0) 2012.11.20