1.1.5 프록시 패턴
앞에서 옵저버 패턴을 설명할 떄, 객체의 상태변화를 감지하면 옵저버들에게 변화를 알려주는 객체를 프록시 객체라고 하였는데, 이를 이용해 대상 객체에 접근하기 전 흐름을 가로채 객체 앞단의 인터페이스 역할을 하는 디자인 패턴이다.
프록시 패턴은 객체의 속성, 변환 등을 보완하며 보안, 데이터 검증, 캐싱, 로깅에 사용한다.
프록시 서버는 실제 서버와 사용자 간의 중개자 개념으로, 사용자로부터 요청받는 정보들을 먼저 처리한다. 캐싱을 하여 네트워크 비용을 절감할 수 있고, 비정상적인 접근을 감지하여 DDOS를 방지할 수도 있다. 실제로 Node.js 앞단에 설치하는 Nginx를 프록시 서버로 주로 둔다. 이를 통해 본 서버의 포트를 숨길 수 있고, 버퍼 오버플로우를 방지할 수 있다.
1.1.6 이터레이터 패턴
반복가능한 다른 종류의 객체를 하나의 인터페이스로 순회하는 패턴이다. 예를 들어 객체 자료형과 리스트 자료형이 있을 때, ‘for of’라는 하나의 이터레이터블 프로토콜을 통해 순회할 수 있다.
1.1.7 노출모듈 패턴
즉시 실행 함수를 통해 Js에서는 구현할 수 없는 Private, Public 접근 제어자를 만드는 패턴
1.1.8 MVC 패턴
모델 - 뷰 - 컨트롤러로 구성된 개발 프로세스이다. 절차를 세 가지로 나누어 집중적인 개발을 가능케 하였으며, 재사용과 확장이 용이하다. 그러나 애플리케이션이 복잡해질수록 모델과 뷰 간의 관계성이 모호해지고 복잡해질 수 있다.
모델은 백엔드, 뷰는 프론트엔트, 컨트롤러는 중간에서의 매개자 역할이라고 이해하면 된다. 리액트가 해당 패턴으로 구성됨.
1.1.9 MVP 패턴
컨트롤러 대신 프레젠터로 교체된 패턴인데, 프레젠터는 뷰와 일대일 관계로서 더 강한 결합을 지닌 디자인 패턴이다.
1.1.10 MVVM 패턴
컨트롤러 대신 뷰모델을 이용한 패턴으로, 뷰모델이란 뷰를 추상화한 계층이다. 뷰와 뷰모델 사이의 커맨드와 데이터 바인딩을 지원하며 UI를 별도의 코드 수정없이 재사용할 수 있고 단위 테스팅이 쉽다. Vue.js가 해당 패턴으로 구성됨.
1.2 프로그래밍 패러다임
프로그래밍적 관점으로.
선언형 : 함수형
명령형 : 객체지향형 / 절차지향형
1.2.1 선언형과 함수형
문제 해결에 중점을 둔 프로세스로, 재사용성이 높다.
1.2.2 객체지향 프로그래밍***
객체들의 집합으로 프로그램의 상호작용을 표현한다.
추상화 공통된 중요 부분만 추출하여 계층화
캡슐화 객체의 속성과 메서드를 하나로 묶고 일부를 외부에 감추어 은닉
상속성 상/하위 클래스간의 유연한 추가 및 확장
다형성 하나의 메서드나 클래스가 다양한 방법으로 동작
ㄴ 오버로딩 같은 이름을 가진 메서드를 여러 개 두는 것 → 연산자 Input (벡터 / 정수 / 행렬 등)
ㄴ 오버라이딩 상위 클래스로부터 상속받은 메서드를 하위에서 재정의
설계원칙
S Single Responsibility Principle (단일 책임 원칙) : 모든 클래스는 각각 하나의 책임만 가져야 한다.
O Open Closed Principle (개방-폐쇄 원칙) : 기존의 코드를 변경하지 않으면서 확장은 쉬워야 한다.
L Liskov Substituion Principle (리스코프 치환 원칙) : OOP의 정확성은 깨뜨리지 않으면서 하위 타입의 인스턴스와 치환하여도 시스템이 정상적으로 돌아가야 한다.
I Interface Segregation Principle (인터페이스 분리 원칙) : 하나의 인터페이스보다 여러 개의 세밀한 인터페이스 설계가 필요하다.
D Dependency Inversion Principle (의존 역전 원칙) : 상위 계층은 하위 계층의 변화에 영향으로부터 독립하여야 한다.
더 공부할 내용들
참고자료
면접을 위한 CS 전공지식 노트 (2022, 주홍철 저)