반응형
디자인 패턴
- 프로그램을 설계할 때 발생했던 문제들을 객체 간의 상호 관계 등을 이용하여 해결 가능하게 하나의 "규약" 형태로 만든 것이다.
싱글톤 패턴
- 하나의 Class는 오직 하나의 인스턴스만 가지는 걸 말한다.
- 주로 DB에 많이 사용된다.
- 장점
- 비용이 절감된다.
- 단점
- 의존성이 높다.
- 단위테스트에서 단점이 드러난다.
- 독립적인 인스턴스 생성에 어려움이 있다.
- 의존성 주입
- 싱글톤 패턴의 단점 중 하나인 결합을 강하게 만드는 부분을 완화하기 위한 과정이다.
- 디커플링 된다고 표현되기도 한다.
- 의존성 주입 장점
- testing과 migration이 수월해진다 -> module을 쉽게 교체할 수 있는 구조이기 때문이다.
- application 의존성 방향이 일관된다.
- application을 쉽게 추론 가능하다.
- module간 관계가 명확해진다.
- 의존성 주입 단점
- Class의 수 증가 -> 복잡성 증가 -> runtime penalty 발생
- 의존성 주입 원칙
- 상위 module은 하위 module의 어떠한 것도 가져와선 안된다.
- 둘다 추상화에 의존해야 한다.
- 싱글톤 패턴의 단점 중 하나인 결합을 강하게 만드는 부분을 완화하기 위한 과정이다.
팩토리 패턴
- 객체를 사용하는 코드에서 객체 생성 부분을 떼어내 추상화한 패턴이다.
- 상속 관계에 있는 두 Class에서 상위 Class가 중요한 뼈대를 결정 -> 하위 Class는 객체 생성에 관한 구체적인 내용을 결정한다.
- 장점
- 상위 Class, 하위 Class가 분리 -> 느슨한 결합을 가지게 된다.
- 객체 생성 로직이 따로 분리되어 있기 때문에 "리팩터링하는 과정" 즉 유지 보수성이 증가된다.
전략 패턴
- 정책 패턴이라고도 하며, 객체의 행위를 바꾸고 싶은 경우 "캡슈로하한 알고리즘"을 컨텍스트 안에서 바꿔주며 상호 교체가 가능하게 만드는 패턴이다.
- ex) 결제방식의 다양함 : 네이버페이, 카카오페이, 토스페이...
- 컨텍스트
- 개발자가 어떠한 작업을 완료하는 데 필요한 모든 관련 정보를 말한다.
옵저버 패턴
- 주체가 어떤 객체의 상태 변화를 관찰 -> 변화 발견 -> 옵저버들에게 변화를 알려주는 패턴이다.
- ex) SNS 새로운 게시물 알림
Java : 상속과 구현
- 상속
- 자식 Class가 부모 Class의 메서드 등을 상속받아 추가 및 확장하는 걸 말한다.
- 재사용성과 중복성의 최소화가 장점
- 구현
- 부모 인터페이스를 자식 Class에서 재정의하며 구현하는 것을 말한다.
- 반드시 부모 Class의 메서드를 재정의하여 구현해야 한다.
- 차이점
- 상속 -> 일반 Class, abstract Class 기반으로 구현
- 구현 -> 인터페이스 기반으로 구현
프록시 패턴 & 서버
- 프록시 패턴
- 대상 객체에 접근하기 전 해당 접근을 필터링하거나 수정하는 등의 역할을 하는 계층이 있는 디자인 패턴이다.
- 객체의 속성, 변환 등을 보완 -> 보안, 데이터 검증, 캐싱, 로깅에 사용된다.
- 프록시 서버로도 활용된다.
프록시 서버에서의 캐싱
: 캐시 안에 정보를 담아두고, 캐시 안에 있는 데이터를 활용하는 것을 말한다.
-> 트래픽을 줄일 수 있다!!!
- 프록시 서버
- 서버와 클라이언트 사이에서 클라이언트가 자신을 통해 다른 네트워크 서비스에 간접적으로 접근할 수 있게 해주는 컴퓨터 시스템 or 응용 프로그램을 말한다.
- Nginx
- 비동기 이벤트 기반의 구조, 웹 서버, 주로 Node.js 서버 앞단의 프록시 서버로 활용
- 실제 포트를 숨길 수 있다.
- 정적 자원을 gzip 압축 or 메인 서버 앞단에서의 로깅이 가능하다.
- CloudFlare
- 전 세게적으로 분산된 서버가 있고, 시스템의 콘텐츠 전달을 빠르게 할 수 있는 CDN 서비스이다.
- DDOS 공격방어나, HTTPS 구축에 쓰인다.
- Nginx
- 서버와 클라이언트 사이에서 클라이언트가 자신을 통해 다른 네트워크 서비스에 간접적으로 접근할 수 있게 해주는 컴퓨터 시스템 or 응용 프로그램을 말한다.
반응형
'CS' 카테고리의 다른 글
자료구조 - 시간 복잡도 / 스택, 큐, 이중 연결 리스트 (0) | 2024.11.03 |
---|---|
디자인 패턴(2) (0) | 2024.06.23 |