반응형

-MVC 패턴-



<개요>

 "책임 분담을 하자."는 의미에서 나온 개념입니다.


 MVC는 각각의 다음의 앞 글자를 따와 만든 것입니다.


Model - 데이터를 의미한다.

View - 사용자가 보는 것을 의미한다.

Controller - 사용자가 보기 위해 데이터를 가공, 혹은 조작 하는 것을 의미한다.


가장 기본이 되는 디자인 패턴으로 그 자바 진영이라 할 수 있는 'Sun사'에서 나온 

웹 어플리케이션인 JSP가 그 예입니다. JSP는 Servlet(Server + let)이 Controller이고

데이터베이스에 담겨진 것이 Model, 사용자가 보는 페이지가 View가 되는 것이지요.


자바에서는 이러한 MVC 패턴을 Model은 Bean이라고 부릅니다.

자바 콩, 즉 자바 커피 콩을 의미합니다. 콩 하나하나에는 데이터가 담겨있죠.

참 재치있는 닉네임입니다.


'회원관리'라는 어플리케이션을 만든다고 생각해서 설명해보도록 하죠.




1. Bean(Model)

회원이라는 데이터를 가지고, 우리는 관리를 할 겁니다.

일단은 사용자에 입장에서 생각을 해봅시다. 


그러면 데이터로 무얼 담을지 생각해야겠죠. 

회원이니까 기본적으로 아이디, 비밀번호, 전화번호등이 있을 수 있겠죠.


class UserBean {

private String id;

private String pw;

private int phone;


...(각 멤버변수 관리 메소드는 생략)...

}

이제 빈은 만들어졌습니다.




2. Controller

사용자는 회원가입을 하거나, 회원수정을 하거나, 회원검색을 하거나, 회원탈퇴를 할 수 있습니다.

이러한 특성이 바로 Controller가 담당하게되죠. Controller는 뭘 사용할 지 알았습니다.

그러면, 이런 UserBean을 관리하는 Controller는 다음과 같이 될 겁니다.


class UserController {

public boolean registUser() {};

public boolean updateUser() {};

public boolean findUser() {};

public boolean deleteUser() {};

}






3. View

View는 사용자가 보는 입장입니다. 그래서 페이지적 관점에서는 하나의 Controller를 하나의 페이지로 접근하게 되죠.

자바 어플리케이션에서는 main문이 View가 됩니다. 


class UserApplication {

public void main(String[] args) {


...어떤 Controller를 사용할 것인지 묻는 로직...


}

}













-Factory Method 패턴-



<개요>

Factory Method는 객체의 생성과 소멸에 관한 고민에서 시작된 패턴입니다.

객체지향언어에서는 객체의 생성이 언제 되느냐에 따라서 같은 어플리케이션이라도 내부구조는 확 달라 질 수 있죠.


 객체는 Class라는 템플릿(틀)을 가지고 만들게 됩니다. 그렇기에 결과물의 형태는 항상 같습니다.

 이런 결과물을 만들 때에는 항상 new 라는 키워드로 만들게 되어있습니다. 즉, 생성자를 통해서

객체를 만들게 되지요. 그런데 만약, 생성자의 모양이 변한다면 어떻게 될까요? 그렇죠. 모든 객체생성을

하고 있는 부분은 변경되야 합니다. 근데, 문제가 있습니다. 하나, 두 개의 객체생성 부분은 고칠 수 있다 칩시다.

그런데 이게 무진장 많아요. 뭐, 처음엔 직접 고쳤다 합시다. 그런데 다음에 또 변경할 일이 생겼어요. 또 고치기

힘들죠. 개발에서는 시간이 곧 돈인데, 언제 일일이 고치고 있을 겁니까(이클립스라는 툴의 도움은 차치하고...).  


그래서 객체 생성을 위임해주는 Interface를 만드는 데요. 이 클래스는 뒤에 Factory라는 단어를 붙여서 사용하게 됩니다.


예제는 위에서 쓰던걸 가져다 쓰겠습니다.

User라는 객체를 만들 때에 회원 정보가 더 추가 될 수도 빠질 수도 있죠.

이런 경우를 대비해서 Factory Method를 적용해봅시다.


<User.java>

public interface User {

...정의 내용...

}


<UserImpl.java>

public class UserImpl implements User {

private String id;

private String pw;

private int phone;


...(각 멤버변수 관리 메소드는 생략)...

}


위와 같이 Model을 만듭니다.






<UserFactory.java>

public interface UserFactory {

public User getUser();

}


<UserFactoryImpl.java>

public class UserFactoryImpl implements User {

private User user;

public User getUser(){

user = new UserImpl();

return user;

}

}


그리고 위와 같이 Model 생성을 위임할 인터페이스를 만들죠.




자 이렇게 만듬으로써 사용은 어떻게 하느냐


class UserController {

public boolean registUser() {

// User user = new User(...); 이렇게 이제 안씀

UserFactory userFac = new UserFactory();

User user = userFac.getUser();

};

public boolean updateUser() {};

public boolean findUser() {};

public boolean deleteUser() {};

}


위의 registUser() 메소드와 같이 사용합니다. Factory를 생성하고

Factory를 이용해 User를 불러오는 것이죠.


이렇게 함으로서 User에 생성자가 변경되면 Factory에서 생성만 바꾸어주면 됩니다.


객체의 연약한 관계가 만들어지는 것이죠.


유지보수 편리함과 객체간의 연관성을 약화 시키는 데에도 큰 장점을 가지고 있습니다.

그래서 보통 MVC 패턴과 혼합하여 많이 사용합니다.











반응형

WRITTEN BY
데르벨준

,