보라코딩

디자인패턴 본문

CS

디자인패턴

new 보라 2023. 7. 23. 10:00
디자인패턴이란?

 

 

 

프로그램을 설계할 때 발생했던 문제점들을 객체 간의 상호 관계 등을 이용하여

해결할 수 있도록 하나의 규약 형태로 만들어 놓은 것

 

 

 

 

 

 

싱글톤패턴

하나의 클래스에 하나의 인스턴스만!

보통 데이터베이스 연결 모듈에 많이 사용

 

하나의 인스턴스를 만들어놓고 공유하며 사용

  ㄴ 장점 : 인스턴스 생성 비용이 줄어듬

  ㄴ 단점 : 의존성이 높아짐. 

 

싱글톤 패턴 단점

  ㄴ TDD(Test Driven Development) 걸림돌_단위테스트는 서로 독립적이여야해서

      모듈간의 결합을 강하게 만들 수 있음   -> 의존성 주입(DI) 통해 결합 느슨하게 

 

 

 

 

팩토리패턴

객체 생성 부분을 떼어내 추상화한 패턴

상속관계 두 클래스에서 상위 클래스가 중요한 뼈대 결정 / 하위 클래스가 객체 생성에 관한 구체적인 내용 결정

( 상위와 하위 클래스 분리되어 -> 느슨한 결합, 더 많은 유연성 갖게 됨, 리팩터링시 한곳만 고쳐서 유지보수성 증가)

 

 

 

 

전략패턴

객체의 행위를 바꿀때 직접 수정하지 않고 전략이라 부르는 '캡슐화한 알고리즘'을 컨텍스트 안에서 바꿔주며 상호교체 

passport :  전략패턴 활용한 라이브러리

 

 

 

 

옵저버패턴

주체가 어떤 객체의 상태 변화를 관찰하다가

상태변화 있을 때마다 메서드를 통해 옵저버 목록에 있는 옵저버에게 변화 알려줌

 

- 트위터 : 옵저버 패턴 활용한 서비스

- MVC 패턴 : 주체인 model에 변경사항 생겨  update() 메서드로 옵저버인 뷰에 알려주고 controller가 작동

- 자바스크립트에서 프록시 객체 통해 옵저버 패턴 구현

- 주로 프록시 객체 사용해서 옵저버 패턴 구현함 (프록시 객체 통해서 변화 감지)

 

 

 

 

프록시패턴 / 프록시 서버

* 프록시 패턴 : 대상 객체에 접근하기 전 그 접근에 대한 흐름을 가로채 대상 객체 앞단의 인터페이스 역할

 

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

   ㄴ 프록시 서버로 쓰는 nginx : 비동기 이벤트 기반의 구조와 다수의 연결을 효과적으로 처리 가능한 웹서버

                                                    주로 Node.js 서버 앞단의 프록시 서버로 활용

 

Node.js의 버퍼 오버플로우 취약점 예방 위해 nginx를 프록시서버로 앞단에 놓고 Node.js를 뒤쪽에

   => 사용자의 직접적인 서버로의 접근 차단하고, 간접적으로 한단계 더 거쳐서 보안성 강화

 

* 버퍼 오버플로우 : 버퍼는 데이터 저장되는 메모리 공간으로 메모리 공간 벗어나는 경우 의미 (데이터가 엎어씌워져 주소, 값 바꾸는 공격 발생하기도 함)

 

 

 

 

이터레이터 패턴

iterator 사용하여 컬렉션의 요소에 접근하는 디자인 패턴

 

 

 

 

노출모듈 패턴

즉시 실행 함수를 통해 private, public 같은 접근 제어자 만드는 패턴

 

 

 

 

 

 

 

 

 

 

'CS' 카테고리의 다른 글

객체지향 프로그래밍 (OOP)  (0) 2023.07.23