CS지식

디자인패턴(2)

띵지니 2023. 9. 5. 20:09

팩토리패턴

  • 상속 관계에 있는 두 클래스에서 상위 클래스가 중요한 뼈대를 결정하고,
    하위 클래스에서 객체 생성에 관한 구체적인 내용을 결정하는 패턴
  • 상위 클래스에서는 객체 생성방식에 대해 알 필요가 없어져 유연성을 갖게 되며
    객체 생성 로직은 하위클래스에서만 관리 되기 때문에 유지보수성이 증가

 

이터레이터패턴

  • 이터레이터(iterator)를 사용하여 컨테이너의 요소들에 접근하는 디자인패턴
    (컨테이너 : 동일한 요소들을 담아놓는 집합 - 배열, 맵 등)
  • 각기 다른 자료구조들을 똑같은 인터페이스로 순회를 쉽게 할 수 있다는 장점이 있음

 

의존성주입(DI, Dependency Injection)

  • 의존성주입이란 메인 모듈(main mudule)이 '직접' 다른 하위모듈에 대한 의존성을 주기보다는
    중간에 의존성 주입자(dependency injector)가 이 부분을 가로채 메인 모듈이 '간접'적으로 의존성을 주입하는 방식

  • 이를 통해 메인 모듈과 하위모듈간의 의존성을 조금 더 느슨하게 만들 수 있으며 모듈을 쉽게 교체 가능한 구조로 만듬

 

의존관계역전원칙(DIP, Dependency Inversion Principle)

  • 의존성 주입을 할 때는 의존관계역전원칙이 적용
  • 상위 모듈은 하위 모듈에 의존해서는 안 되고 둘 다 추상화에 의존해야 함
  • 추상화는 세부사항에 의존해서는 안 되고 세부 사항은 추상화에 따라 달라져야 함
  • 장점
    • 외부에서 모듈을 생성하여 dev.add(new BackendDeveloper()) 이런식으로 집어넣는 구조가 되기 때문에
      모듈들을 쉽게 교체할 수 있는 구조
    • 단위 테스팅과 마이그레이션이 쉬워짐
    • 애플리케이션 의존성 방향이 좀 더 일관되어 코드를 추론하기가 쉬워짐
  • 단점
    • 결국에는 모듈이 더 생기게 되므로 복잡도가 증가
    • 종속성 주입자체가 컴파일 할 때가 아닌 런타임 때 일어나기 때문에
      컴파일을 할 때 종속성 주입에 관한 에러를 잡기가 어려워질 수 있음

 

전략 패턴

  • 전략이라고 부르는 '캡슐화한 알고리즘'을 컨텍스트 안에서 바꿔주면서 상호교체가 가능하게 만드는 디자인패턴

 

옵저버 패턴

  • 주체가 어떤 객체(subject)의 상태변화를 관찰하다가 상태 변화가 있을 때마다 메서드 등을 통해
    옵저버 목록에 있는 옵저버들에게 변화를 알려주는 디자인패턴
  • ex) 트위터의 메인 로직, MVC패턴

 

프록시 패턴

  • 객체가 어떤 대상 객체에 접근하기 전,
    그 접근에 대한 흐름을 가로채서 해당 접근을 필터링하거나 수정하는 등의 역할을 하는 계층이 있는 디자인패턴
  • ex) 서버 앞단에 두어 캐싱, 로깅 등에 활용하는 프록시서버