디자인 패턴

Viva의 놀이터·2021년 8월 4일
0

디자인 패턴

디자인 패턴이란 무엇일까?

디자인 패턴은 기존 환경 내에서 반복적으로 일어나는 문제들을 어떻게 풀어나갈 것인가에 대한 일종의 솔루션이라고 합니다.

그럼 디자인 패턴을 왜 알아야 하는가?

프로젝트를 진행하면 개발자마다 동일한 이슈에 대해서 다른 해결책을 적용합니다. 제시된 해결책 중에서 가정 좋은 해결책은 무엇이고 기준은 무엇일까?라는 물음의 답으로 디자인 패턴를 제시 할 수 있을 것입니다. 경력이 높은 개발자들이 설계한 프로젝트는 추가할 요소가 생겼을 때 쉽게 적용이 가능하게 설계되어 있습니다. 각 상황마다 어떻게 하면 효율적으로 테스크를 해결하고 이를 수행 할 수 있을지에 대한 가이드를 디자인 패턴을 통해서 알 수 있습니다.

디자인 패턴의 종류

디자인 패턴의 카테코리는 3가지로 구분이 가능합니다.

  1. 구조의 디자인 패턴: 객체들이 어떻게 구성되어 있고, 결합되어 있는지를 나타냅니다.

  2. 행동의 디자인 패턴: 각 객체들의 상호작용(커뮤니케이션)을 나타냅니다.

  3. 생성의 디자인 패턴: 객체를 생성하고 인스턴스화하는 방법들을 나타냅니다.

Structural design pattern(구조적인 디자인 패턴)

MVC 패턴

스프링에서 채택한 디자인 패턴입니다. Model, View, Controller 이렇게 3개의 개념으로 구분 할 수 있습니다. 모델은 어떤한 동작을 수행하는 코드를 이야기합니다. 우리가 무엇을 할지 정하고 비즈니스 로직과 db 등에 대한 처리를 수행합니다. 컨트롤러는 뷰와 모델을 이어주는 역할을 맡고있습니다. 뷰의 요청에 따라 모델의 상태를 바꾸고 이를 다시 뷰에 전달합니다. 뷰는 사용자에게 보이는 영역입니다.

이렇게 세 가지 요소로 나누어진 패턴을 MVC패턴이라고 하고 MVC1, MVC2로 또 나뉩니다.

사용이유: 비지니스 로직과 프리젠테이션 로직을 분리하기 위해서 사용합니다.

MVC1

MVC1 패턴의 경우 View와 Controller 모두 JSP에서 담당하는 형태를 가진다. JSP 하나에서 유저의 요청을 받고 응답을 처리하는 형식임으로 구현 난이도는 쉽다. 하지만 규모가 거대해질수록 하나의 JSP에서 많은 일을 처리하다보니 재사용성과 가독성이 떨어집니다. 즉 유지보수가 문제가 발생합니다.

MVC2

MVC2는 MVC 패턴의 표준으로 사용되는 패턴입니다. MVC1과는 다르게 Controller와 View가 분리되어 있습니다. 역할에 따라 분리되어 있기에 M,V,C중에서 수정해야 할 부분이 있으면 그것만 꺼내서 수정하면됩니다. 따라서 유지보수 측에서 큰 이점을 가지고 있습니다. 이러한 이유에서 스프링이 MVC2를 선택하였습니다.

Spring(MVC2)에서 요청을 처리하는 로직

  1. 클라이언트에서 요청이 들어오면 DispatcherServlet에서 받고 HandlerMapping에게 전달해줍니다.

  2. HandlerMapping에서 요청에 매핑되는 컨트롤러를 검색하고 결과를 DispatcherServlet으로 반환합니다.

  3. DispatcherServlet에서 다시 HandlerAdapter을 호출하여 HandlerMapping에게 받은 Controller 중 적합한 Method를 찾아서 반환해준다.

  4. Controller의 해당하는 Method에서 비즈니스 로직을 처리하고 해당하는 결과를 View에 전달 하기 위해서 Model에 저장 후 view name을 DispatcherServlet에 전달합니다.

  5. DispatcherServlet은 ViewResolver를 호출하여 view name을 검색하고 결과를 View에 전달한다. View에서 시각적 처리를 완료한 후에 다시 DispatcherServlet에 결과를 전달한다.

  6. DispatcherServlet에서는 전달받은 View의 처리결과를 클라이언트에 전달한다.

DispatcherServlet?

서블릿 컨테이너의 제일 앞에서 서버로 들어오는 모든 클라이언트 요청을 받아서 처리해주는 컨트롤러이다.

Creational patterns(생성적인 디자인 패턴)

싱글톤 패턴

싱글톤 패턴 또한 스프링에서 기본적으로 사용하는 디자인 패턴이다. 싱글톤 패턴은 코드안에서 하나의 인스턴스만 생성하여 객체를 참조하는 방식으로 사용합니다. 싱글톤 패턴은 인스턴스를 한번만 생성하기 때문에 메모리의 낭비를 방지할 수 있고, 생성된 인스턴스는 전역 변수이기 때문에 데이터를 공유하기 쉽습니다. 하지만 자바에서는 싱글톤 패턴을 안티 패턴으로 분류하고 있습니다. 인스턴스간의 결합도가 높아서 객체 지향 설계 원칙에 어긋나기 때문입니다. 또한 구현 난이도가 까다롭습니다. 멀티쓰레드 환경에서 동기화 처리를 해주지 않으면 인스턴스가 여러개가 생성 될 수 있기 때문에 동기화 처리를 꼭 해줘야 합니다. 싱글톤의 장점 때문에 스프링에서는 싱글톤을 선택하였고 까다로운 동기화 처리 문제도 스프링 자체에서 해결해주기 때문에 개발자들은 단점없이 싱글톤의 장점만 가져다 사용 할 수 있습니다.

Behavioral design pattern(행위적인 디자인 패턴)

옵저버 패턴

옵저버 패턴은 한 객체의 상태 변화에 따라 다른 객체의 상태도 연동되도록 일대다 객체 의존 관계를 구성 하는 패턴이다. 데이터의 변경이 발생했을 경우 상대 클래스나 객체에 의존하지 않으면서 데이터 변경을 통보하고자 할 때 유용하다.

https://velog.io/@poiuyy0420/%EB%94%94%EC%9E%90%EC%9D%B8-%ED%8C%A8%ED%84%B4-%EA%B0%9C%EB%85%90%EA%B3%BC-%EC%A2%85%EB%A5%98

profile
역사를 잊은 기술에겐 미래가 없다

0개의 댓글