CS

27. [CS] 디자인패턴 정리

상복 2022. 10. 3. 19:56

 [ 디자인 패턴 이란? ]

 

 

프로그램을 설계할 때 발생했던 문제점들을 객체 간의 상호 관계 등을 이용하여 해결할 수 있도록 하나의 '규약' 형태로 만들어 놓은 것을 의미한다

 

 

[ 관련 자료 Git ]

 

https://github.com/AiRn33/CS

 

GitHub - AiRn33/CS

Contribute to AiRn33/CS development by creating an account on GitHub.

github.com

 

 


 

 

1. 싱글톤 패턴

 

 

[ 싱글톤 패턴 이란? ]

 

하나의 클래스에 오직 하나의 인스턴스만 가지는 패턴을 말한다. 보통 DB 연결 모듈에 많이 사용된다

 

하나의 인스턴스를 생성해두고 다른 모듈들이 해당 인스턴스를 공유하기에 인스턴스 생성에 관한 비용이 줄어드는 장점이 있으나, 의존성이 높아진다는 단점이 있다

 

 

 

[ 싱글톤 패턴의 단점 ]

 

싱글톤 패턴은 인스턴스를 하나만 생성해서 사용하는 것이기에 의존성이 높다. 그렇기에 테스트 과정에서 문제가 발생한다. 단위 테스트는 서로 독립적인 환경에서 이뤄져야하는데 싱글톤 패턴은 독립적인 환경을 만들기가 힘들다

 

이러한 의존성을 떨어뜨리기 위한 방법 중 하나로 의존성 주입을 할 수 있다

 

 

[ 의존성 주입 이란? ]

 

스프링 부트에서 많이 사용하는 방식이다

의존성 주입(DI)은 기존에 메인에서 의존성을 주기 보다는, 다른 주입자를 해당 주입자가 모든 관리 역활을 담당하는 형식을 의미합니다

 

[ 의존성 주입 원칙 ]

 

상위 모듈은 하위 모듈에서 어떠한 것도 가져오지 않아야 한다. 또한, 둘 다 추상화에 의존해야 하며,

이 때 추상화는 세부사항에 의존하지 말아야한다

 

 

 


 

 

2. 팩토리 패턴

 

 

[ 팩토리 패턴 이란? ]

 

 

객체를 사용하는 코드에서 객체 생성 부분을 떼어내 추상화한 패턴이자 상속 관계에 있는 두 클래스에서 상위 클래스가 중요한 뼈대를 결정하고, 하위 클래스에서 객체 생성에 관한 구체적인 내용을 결정하는 패턴

 

 

상위에 추상화 설계도를 만들어 둔 뒤 하위 클래스를 생성해서 사용한다는 느낌으로 생각하면 된다

 

 

 


 

 

3. 전략 패턴

 

 

[ 전략 패턴 이란 ? ]

 

 

객체의 기능을 바꾸고 싶을 때, 코드 자체를 수정하는 것이 아닌 '캡슐화된 알고리즘'을 바꿔주는 형식의 패턴

 

 

예를 들어, 쇼핑몰에서 상품을 구매한다고 해보자

그럴 때 같은 아이템(쇼핑품목) 이더라도 결제를 할 때 다양한 결제 수단이 사용가능하다

그럴 때 코드 자체를 수정하는 것이 아닌 객체만을 바꿔끼워서 필요한 객체를 사용할 수 있게 하는 패턴이다

 

 

 


 

4. 옵저버 패턴

 

 

 

[ 옵저버 패턴 이란? ]

 

옵저버 패턴이란 어떤 주체가 객체의 상태 변화를 관찰하다 변화가 있을 때 관리하고 있는 옵저버에게 상태를 알리는 디자인 패턴

 

 

[ 주체란? ]

 

주체란 객체의 상태를 보고 있는 관찰자

 

 

[ 옵저버란? ]

 

이 객체의 상태 변화에 따라 전달되는 메서드 등을 기반으로 '추가 변화 사항'이 생기는 객체들을 의미한다

 

 

 

즉, 관리하는 객체에 변화가 생기면 옵저버들에게 알려주는 패턴이다

 

대표적이 예시로는 트위터가 있는데 주체가 새로운 트윗을 팔로워들에게 알려주면 확인할 수 있는 시스템 등이 있다

 

 


 

5. 프록시 패턴

 

 

 

[ 프록시 패턴 이란? ]

 

대상 객체에 접근 하기 전 그 접근에 대한 흐름을 가로채 대상 객체 앞단의 인터페이스 역할을 하는 디자인 패턴이다

 

주로 객체의 속성, 변환 등을 보완하며 보안, 데이터 검증, 캐싱, 로깅에 사용된다

 

그리고 프록시 서버로도 활용이 된다

 

 

[ 프록시 서버 ]

 

서버와 클라이언트 사이에서 클라이언트가 자신을 통해 다른 네트워크 서비스에 간접적으로 접속 할 수 있게 해주는 컴퓨터 시스템이나 응용 프로그램을 가르킨다

 

 


 

6. 이터레이터 패턴

 

 

[ 이터레이터 패턴 이란? ]

 

이터레이터 패턴은 이터레이터를 사용하여 컬렉션의 요소들에 접근하는 디자인 패턴이다

 

 

[ 이터레이터란? ]

 

https://onlyfor-me-blog.tistory.com/319

 

[JAVA] Iterator란? Iterator를 사용하는 이유와 사용법

먼저 iterator와 원형인 iterate의 사전적 정의가 무엇인지 확인해보자. iterate : (계산, 컴퓨터 처리 절차를) 반복하다 iterator : 반복자 계산 같은 컴퓨터의 작업 처리 절차를 반복한다는 뜻 같다. 그럼

onlyfor-me-blog.tistory.com

 

해당 객체의 데이터가 빌 때 까지 출력해 내는 것이라고 생각하면 편하다

 

 


 

 

7. 노출모듈 패턴

 

 

[ 노출 모듈 패턴 이란? ]

 

노출묘둘 패턴이란 즉시 실행함수를 통해 private, public 같은 접근 제어자를 만드는 패턴이다

 

보통 JavaScript에서 많이 사용한다고 한다

 

 

[ 접근 제어자 종류 ]

 

(1) public : 클래스에 정의 된 함수에서 접근 가능, 자식 - 외부 클래스에서 접근 가능하다

(2) protected : 클래스에 정의 된 함수에서 접근 가능, 자식 클래스에서 접근 가능, 외부는 접근 불가능

(3) private : 클래스에 정의 된 함수에서 접근 가능하지만 자식, 외부 클래스는 접근 불가능

 

 

 

8. MVC 패턴

 

 

[ MVC 패턴 이란? ]

 

MVC 패턴이란 모델(Model), 뷰(View), 컨트롤러(Controller) 로 이뤄지는 디자인 패턴이다

 

애플리케이션의 구성요소를 3가지 요소로 나눠줌으로써 각각의 구성요소에만 집중해서 개발이 가능해진다

재사용성과 확장성이 용이하다는 장점이 있고, 애플리케이션이 복잡해질수록 모델과 뷰의 관계가 복잡해지는 단점이 있다

 

 

[ Model 이란? ]

 

데이터베이스, 상수, 변수 등을 뜻한다

 

즉 DTO, Entity 등이 있을 수 있다

 

 

[ View 란? ]

 

뷰는 사용자 인터페이스를 나타내고, 사용자가 보는 화면을 뜻한다

 

 

[ Controller 란? ]

 

모델과 뷰를 있는 다리 역활로써 뷰에서 어떠한 행위가 일어나면 그것을 컨트롤러에서 받고

 

필요하다면 해당 행위를 모델에 적용시킨 뒤 다시 뷰로 전송하는 형식의 데이터 전송이 일어난다

 

 

MVC의 대표적인 형식으로는 리액트(react) 가 존재한다

 

 


 

9. MVP 패턴

 

 

[ MVP 패턴이란? ]

 

MVC 패턴 중 Controller 를 Presenter로 교체한 패턴이다

 

MVC 패턴 보다 더 강한 결합 형태를 가지고 있다

 

 

 


 

 

10. MVVM 패턴

 

 

[ MVVM 패턴이란? ]

 

MVVM 패턴은 Controller가 View Model 로 변경된 패턴을 의미한다

 

뷰모델은 뷰를 더 추상화한 패턴으로 MVC 패턴과는 다르게 커맨드와 데이터 바인딩을 가지는 것이 특징이다