구조 패턴
구조 패턴은 설계에 있어서 객체와 클래스의 조합을 통해 더 큰 구조를 만드는 방법을 제공하는 디자인 패턴이다. 이 패턴들은 다음 3가지 를 중점으로 설계가 된다.
- 재사용성 : 이미 존재하는 클래스나 객체를 새로운 구조로 쉽게 재사용할 수 있게 해준다.
- 확장성 : 시스템의 일부분만 변경하거나 확장해도 전체 구조에 영향을 미치지 않도록 설계하는 것.
- 독립성 : 구현과 추상화를 분리하여 독립적으로 개발할 수 있게 하며 시스템의 복잡성 관리에 영향을 준다
어댑터 패턴
어댑터 패턴은 구조패턴에서 재사용성에 좀 더 초점을 맞춘 패턴이다. 어댑터 패턴은 호환되지 않는 인터페이스를 가진 레거시 클래스를 어댑터를 사용해서 새로 만드는 코드 시스템에 녹여내는 것에 목적이 있다.
- 호환되지 않는 클래스들이 함께 작동할 때 주로 사용한다.
- 이미 존재하는 클래스의 인터페이스와 요구사항이 맞지 않을 때 사용한다.
- 기존 클래스에서 원하는 인터페이스가 존재하지 않는 경우 사용한다.
- Target : 클라이언트가 직접 호출하는 패턴.
- Adaptee : 호환되지 않는 기존 클래스
- Adapter : Adaptee의 Wrapper로 Target Interface를 통해 Client가 Adaptee를 호출할 수 있게 해준다.
구현 코드
https://github.com/RicardoKim/DesignPattern-Go-/tree/main/adapter_pattern
DesignPattern-Go-/adapter_pattern at main · RicardoKim/DesignPattern-Go-
Contribute to RicardoKim/DesignPattern-Go- development by creating an account on GitHub.
github.com
실제 사용되는 예시
SpringMVC에서는 다양한 종류의 컨트롤러가 존재하며 각 컨트롤러가 요청을 처리하는 고유한 방식이 존재. DispatcherServlet은 이러한 Controller와 상호작용하며 사용자의 요청을 처리할 수 있겠지만 Controller는 매번 다르게 구현되기 때문에 DispatcherServlet이 이와 직접적으로 통신하는 것은 비효율적이다. 따라서 이를 해결하기 위해 SpringMVC에서는 HandlerAdapter라는 것을 제공한다.
Handler Adapter의 작동방식은 다음과 같다.
- 요청 수신 : DispatcherServlet이 HTTP요청을 받는다.
- 핸들러 매핑 : 요청을 처리할 적절한 컨트롤러를 찾기위해 HandlerMapping이 사용된다.
- 어댑터 선택 : DispatcherServlet의 요청을 처리할 수 있는 HandlerAdpater를 찾는다.
- 요청 처리 : 선택된 HandlerAdapter가 컨트롤러의 메서드를 호출하여 요청을 처리한다.
- 응답 반환 : 처리 결과를 DispatcherServlet에 반환하고, 최종적으로 클라이언트에게 응답으로 전송된다.
spring-framework/spring-webmvc/src/main/java/org/springframework/web/servlet/HandlerAdapter.java at main · spring-projects/spri
Spring Framework. Contribute to spring-projects/spring-framework development by creating an account on GitHub.
github.com
출처
http://refactoring.guru/design-patterns/adapter
Adapter
/ Design Patterns / Structural Patterns Adapter Also known as: Wrapper Intent Adapter is a structural design pattern that allows objects with incompatible interfaces to collaborate. Problem Imagine that you’re creating a stock market monitoring app. The
refactoring.guru
'Computer Science > 디자인패턴' 카테고리의 다른 글
[디자인 패턴] 이터레이터 패턴 (0) | 2024.04.07 |
---|---|
[디자인 패턴] 템플릿 메서드 패턴 (1) | 2024.03.31 |
[디자인 패턴] 커맨드 패턴 (2) | 2024.03.18 |
[디자인 패턴] 팩토리 패턴 (0) | 2024.03.09 |
[디자인 패턴] 데코레이터 패턴 (0) | 2024.03.02 |