-
디자인 패턴과 프로그래밍 패러다임STUDY/Computer Science 2023. 5. 19.
디자인 패턴이란 프로그램을 설계할 때 발생했던 문제점들을 객체 간의 상호 관계 등을 이용하여 해결할 수 있오록 하나의 '규약' 형태로 만들어 놓은 것을 의미한다.
1-1. 싱글톤 패턴
- 하나의 클래스에 오직 하나의 인스턴스만 가지는 패턴 ( 주로 데이터베이스 연결 모듈에 많이 사용)
-> 해당 클래스의 인스턴스를 다른 모듈들이 공유하며 사용하기 때문에 생성할 때 드는 비용이 줄어들지만, 의존성이 높아진다(독립적인 인스턴스를 만들기 어렵다)
의존성 주입
-
1-2. 팩토리 패턴
- 객체를 사용하는 코드에서 객체 생성 부분을 떼어내 추상화한 패턴이자 상속 관계에 있는 두 클래스에서 상위 클래스가 중요한 뼈대를 결정하고, 하위 클래스에서 객체 생성에 관한 구체적인 내용을 결정하는 패턴이다.
1-3. 전략 패턴
- 정책 패턴이라고도 하며, 객체의 행위를 바꾸고 싶은 경우 '직접' 수정하지 않고 전략이라고 부르는 '캡슐화한 알고리즘'을 컨텍스트 안에서 바꿔주면서 상호 교체가 가능하게 만드는 패턴이다.
1-4. 옵저버 패턴
- 주체가 어떤 객체(subject)의 상태 변화를 관찰하다가 상태 변화가 있을 대마다 메서드 등을 통해 옵저버 목록에 있는 옵저버들에게 변화를 알려주는 디자인 패턴이다.
- 주체와 객체를 따로 두지 않고 상태가 변경되는 객체를 기반으로 구축하기도 한다.
- 대표적인 옵저버 패턴을 활용한 서비스로는 트위터가 있음
- 이벤트 기반 시스템에 사용하며 MVC(Model - View - Controller) 패턴에도 사용다
1-5. 프록시 패턴
- 대상 객체에 접근하기 전 그 접근에 대한 흐름을 가로채 대상 객체 앞단의 인터페이스 역할을 하는 디자인 패턴
- 프록시 객체 - 어떠한 대상의 기본적인 동작(속성, 접근, 할당, 순회, 열거, 함수 호출 등)의 작업을 가로챌 수 있는 객체를 뜻한다
- 프록시 서버는 서버와 클라이언트 사이에서 클라이언트가 자신을 통해 다른 네트워크 서비스에 간접적으로 접속할 수 있게 해주는 컴퓨터 시스템이나 응용 프로그램을 가르킨다.
nginx
비동기 이벤트 기반의 구조와 다수의 연결을 효과적으로 처리 가능한 웹 서버이며, 주로 Node.js 서버 앞단의 프록시 서버로 활용된다.
Node.js의 버퍼 오버플로우 취약점을 예방하기 위해서는 nginx를 프록시 서버로 두는 게 좋다고 한다.
Buffer Overflow란 버그의 일종. 또는 이를 이용한 공격 방법. 프로그램이 실행될 때 입력받는 값이 버퍼를 가득 채우다 못해 넘쳐흘러 버퍼 이후의 공간을 침범하는 현상. 쉽게 말해 양동이(버퍼)에 물(값)을 받을 때(입력 받기) 물을 너무 많이 받아 바닥에 흘러 넘쳐버리는 것이라고 생각하면 된다. 주로 프로그램이 사용자에게 데이터(주로 문자열)을 입력받을 때 사용자가 말을 곧이곧대로 듣지 않고 이미 준비된 버퍼보다 더 많은 양의 데이터를 입력할 때 발생하나, 해커가 임의로 프로그램의 메모리의 값을(주로 스택) 변조할 때에도 쓰인다. 주로 이 문제는 스택에서 발생하기 때문에 '스택 오버플로(Stack Overflow)'라고도 부른다.
CloudFlare
웹 서버 앞단에 프록시 서버로 두어 DDOS 공격방어나 HTTPS 구축에 쓰인다.
CORS
서버가 웹 브라우저에서 리소스를 로드할 때 다른 오리진을 통해 로드하지 못하게 하는 HTTP 헤더 기반 메커니즘 이다.(오리진이란 프로토콜, 호스트 네임, 포트의 조합을 말한다.)
1-6. 이터레이터 패턴
- 이터레이터를 사용하여 컬렉션의 요소들에 접근하는 디자인 패턴이다. 이를 통해 순회할 수 있는 여러 가지 자료형의 구조와는 상관없이 이터레이터라는 하나의 인터페이스로 순회가 가능하다.
1-7. 노출모듈 패턴
- 즉시 실행 함수를 통해 private, public 같은 접근 제어자를 만드는 패턴을 말한다.
- 접근 제어자가 존재하지 않는 javascript는 노출모듈 패턴을 통해 private와 public 접근 제어자를 구현하기도 한다.
1-8. MVC 패턴
- 모델(Model), 뷰(View), 컨트롤러(Controller)로 이루어진 디자인 패턴
- 애플리케이션의 구성 요소를 세 가지 역할로 구분하여 각각의 구성 요소에만 집중해서 개발이 가능하다.
- 재사용성과 확장성이 용이하다.
- 애플리케이션이 복잡해질수록 모델과 뷰의 관계가 복잡해지는 단점이 있음
1-9. MVP 패턴
- MVC 패턴에서 C에 해당하는 컨트롤러가 프레젠터(Presenter)로 교체된 패턴
- 뷰와 프레젠터는 일대일 관계이기 때문에 MVC패턴보다 더 강한 결합을 지닌 디자인 패턴이라고 볼 수 있다.
1-10. MVVP 패턴
- MVC 패턴에서 C에 해당하는 컨트롤러가 뷰모델(View Model)로 바뀐 패턴
- 뷰모델이란 뷰를 더 추상화한 계층이고 MVC패턴과는 다르게 커맨드와 데이터 바인딩을 가지는 것이 특징이다.
- 뷰와 뷰모델 사이의 양방향 데이터 바인딩을 지원하며 UI를 별도의 코드 수정 없이 재사용할 수 있고 단위 테스팅하기 쉽다는 장점이 있다.
2. 프로그래밍 패러다임
- 프로그래밍 패러다임은 프로그래머에게 프로그래밍의 관점을 갖게 해주는 역할을 하는 개발 방법론이다.
- 프로그래밍 패러다임은 크게 선언형, 명령형으로 나누며, 선언형은 함수형이라는 하위 집합을 갖고, 명령형은 객체지향, 절차지향으로 나눈다.
2-1. 선언형 프로그래밍
- 선언형 프로그래밍이란 '무엇을' 풀어내는가에 집중하는 패러다임이며, 함수형 프로그래밍은 선언형 패러다임의 일종이다.
- 함수형 프로그래밍은 '순수 함수'들을 블록처럼 쌓아 로직을 구현하고 '고차 함수'를 통해 재사용성을 높인 프로그래밍 패러다임이다.
순수함수
- 출력이 입력에만 의존하는 함수고차함수
- 함수가 함수를 값처럼 매개변수로 받아 로직을 생성할 수 있는 것
- 고차 함수를 쓰기 위해서는 해당 언어가 일급 객체라는 특징을 가져야 한다.
순수함수
- 함수가 함수를 값처럼 매개변수로 받아 로직을 생성할 수 있는 것
- 고차 함수를 쓰기 위해서는 해당 언어가 일급 객체라는 특징을 가져야 한다.
일급 객체
- 변수나 메서드에 함수를 할당할 수 있음
- 함수 안에 함수를 매개변수로 담을 수 있음
- 함수가 함수를 반환할 수 있음- 2-2. 객체지향형 프로그래밍
- 객체들의 집합으로 프로그램의 상호 작용을 표현하며 데이터를 객체로 취급하여 객체 내부에 선언된 메서드를 활용하는 방식을 말한다.
2-3. 절차형 프로그래밍
- 로직이 수행되어야 할 연속적인 계산 과정으로 이루어져 있음
- 일이 진행되는 방시으로 그저 코드를 구현하기만 하면 되기 때문에 코드의 가독성이 좋으며 실행 속도가 빠르다.
- 모듈화하기가 어렵고 유지 보수성이 떨어진다는 점이 있다.
'STUDY > Computer Science' 카테고리의 다른 글
데이터베이스 정규화 알아보기 (0) 2023.08.16 API란 무엇인가? (0) 2023.08.09 DB Transaction (0) 2023.07.26 시간 복잡도에 관하여 (0) 2023.07.12