디자인 패턴

해질녘·2023년 1월 3일
0

CS

목록 보기
2/3

개요

디자인 패턴은 프로그램 구조의 규칙. 자주 작성되는 코드에 대해 어떤 문제점이 있었고, 그 문제점을 해결하기 위해 만들어지는 것이다. 따라서 앞선 사람들의 현-명한 코오드를 따라하는 것이 좋다.

참고자료

이 포스팅은 면접을 위한 CS 전공지식 노트 (주홍철 저, 길벗) 을 바탕으로 작성하고 있습니다.

이 포스팅에서 나오는 것

싱글톤 패턴, 팩토리 패턴 (23-01-04)

1. 싱글톤 패턴

정의

하나의 클래스에 오직 하나의 인스턴스만 가짐. 인스턴스끼리는 모두 같은 것임.

아니. 이거 인스턴스의 정의에 좀 어긋 나지 않습니까? 무슨 장점이 있나요?

장단점

  • 장점: 인스턴스를 적게 만들어도 되므로 인스턴스 생성 비용 감소.

    • 스프링 에서는? HTTP request 1개마다 새로운 인스턴스를 생성한다고 생각해보자. 그러면 메모리가 빵하고 터질 수 있다.
  • 단점: 인스턴스 하나 가지고 쓰는 거라서 의존성 높음. 그래서 테스트하기 어려움. 그리고 코드 쓰기 귀찮음.

    • 스프링 에서는? 싱글톤 패턴의 단점을 극복함. DI(의존성 주입) 이용. 더 자세히 말하자면, 싱글톤 구현을 사용자가 하지 않아도 됨.
  • 참고 - 싱글톤 패턴을 쓰는 상황에서는, stateful 하게 코드를 짜면 안 됨. 애초에 싱글톤 개념과 맞지 않음.

의존성 주입 원칙

싱글톤이랑 관련이 적긴 한데 일단 써 봄.

DI = 의존성 주입.

  • 상위 모듈은 하위 모듈에서 어떤 것도 가져오지 않아야 한다.

  • 추상화는 세부 사항에 의존하지 말아야 한다.

2. 팩토리 패턴

객체 생성 부분을 추상화함.

상위 클래스 - 뼈대 결정, 하위 클래스 - 객체 생성에 관한 구체적 내용 결정 하도록 두 클래스를 구성함. 상속 관계에 있는 두 클래스.

장점

  • 상위 클래스- 하위 클래스 분리로 느슨한 결합을 가짐.

  • 상위 클래스에서 인스턴스 생성 방식에 대해 알 필요x - 유연성, 유지 보수성 증가

구현

Java에서는 이를 추상 클래스를 이용하여 구현할 수 있음.

상위 클래스는 추상 클래스로 존재하고, 하위 클래스는 해당 추상 클래스를 상속받는 실체 클래스로서 존재함.

3. 전략 패턴 (정책 패턴)

Stratagy Pattern, Policy Pattern.

객체의 행위를 추상화함. 그것을 전략이라고 부르며 코드 내에서 객체의 행위를 직접 고치는 것이 아니라 전략을 수정함.

4. 옵저버 패턴

Observer. 이름대로 뭔가 감시하다가 변화가 있으면 알려주는 것.

이때 상태를 감시당하는 쪽을 객체, 감시하는 쪽을 주체라 부름.

주체에서 객체의 상태 변화를 감지할 수 있도록 구현.

주체와 객체는 꼭 달라야 할 필요는 없으며, 하나의 객체가 주체와 객체로서 동시에 작동할 수 있음. 그럴 경우에는 객체의 상태가 변경됨.

예를 들어서, 뉴스를 생각해볼 수 있음. 이때 옵저버들은 뉴스를 구독하는 유저 1, 2가 됨. 뉴스가 새로 발행되면 이러한 유저들(옵저버)를 대상으로 알림을 줌.

장단점

장점 - 실시간으로 한 객체의 변경사항을 다른 객체에 전파 가능함.

단점 - 너무 많이 사용했을 시 상태 관리가 어려워짐.

더 알아보기

https://coding-factory.tistory.com/710

이 링크를 더 볼 수 있음.

5. 프록시 패턴

프록시의 역할을 하고 있는 프록시 서버의 예시.

A->B 이렇게 가는데, 대상 B 객체에 접근하기 전에, 그 접근을 가로채서 대상 객체의 인터페이스 역할을 함.

A -> 프록시 객체 -> B 이런식으로 접근하게 됨.

프록시 서버

서버와 클라이언트 사이에 프록시 역할을 함. 이를 통해서 보안, 데이터 검증, 캐싱, 로깅 등의 역할 수행 가능.

보안 같은 경우, 클라이언트가 바로 서버에 연결하는 게 아니라, 프록시 서버에서 올바른 사용자인지 검사를 하는 등의 방법이 존재함.

CDN도 프록시 서버임.

6. 이터레이터 패턴

C++의 STL을 쓰면 이터레이터라는 걸 배우게 되는데, 그게 이 이터레이터 패턴의 사용 예시. 컬렉션 순회.

7. 노출모듈 패턴

JS에서 접근 제어자가 없어서, 노출모듈 패턴을 이용하여 접근 제어자와 같은 기능을 직접 구현.

8. MVC 패턴

Model-View-Controller.

대표적인 예시, 스프링 MVC.

profile
해질녘 | 백엔드 공부 중

0개의 댓글