디자인 패턴(1)

2024. 4. 25. 01:29·CS
목차
  1. 디자인 패턴
반응형

디자인 패턴

  • 프로그램을 설계할 때 발생했던 문제들을 객체 간의 상호 관계 등을 이용하여 해결 가능하게 하나의 "규약" 형태로 만든 것이다.

싱글톤 패턴

  • 하나의 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 구축에 쓰인다.
반응형

'CS' 카테고리의 다른 글

자료구조 - 시간 복잡도 / 스택, 큐, 이중 연결 리스트  (0) 2024.11.03
디자인 패턴(2)  (0) 2024.06.23
  1. 디자인 패턴
'CS' 카테고리의 다른 글
  • 자료구조 - 시간 복잡도 / 스택, 큐, 이중 연결 리스트
  • 디자인 패턴(2)
Hyunily
Hyunily
    반응형
  • Hyunily
    Hyunily
    Hyunily
  • 전체
    오늘
    어제
    • 분류 전체보기 (45)
      • Daily (16)
      • 한화시스템 Beyond (6)
      • CS (3)
      • Database (10)
      • Monitoring (2)
      • Spring (8)
  • 블로그 메뉴

    • 홈
  • 인기 글

  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.1
Hyunily
디자인 패턴(1)
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.