보라코딩
디자인패턴 본문
디자인패턴이란?
프로그램을 설계할 때 발생했던 문제점들을 객체 간의 상호 관계 등을 이용하여
해결할 수 있도록 하나의 규약 형태로 만들어 놓은 것
싱글톤패턴
하나의 클래스에 하나의 인스턴스만!
보통 데이터베이스 연결 모듈에 많이 사용
하나의 인스턴스를 만들어놓고 공유하며 사용
ㄴ 장점 : 인스턴스 생성 비용이 줄어듬
ㄴ 단점 : 의존성이 높아짐.
싱글톤 패턴 단점
ㄴ 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 |
---|