디자인 패턴

Jeong seulho·2023년 5월 3일
0

소프트웨어 공학

목록 보기
21/25

📌디자인 패턴이란?

  • 코딩을 하면서 나타나는 문제들을 ~한 패턴으로 코딩하면 해결하더라
  • 이러한 문제해결 패턴들을 모아둔 것

📌creational patterns

  • 객체 생성시 어떻게 클래스의 구성할 것 인가?(불필요한 의존성 등)에대한 패턴

📖factory method pattern

  • 객체와 해당 객체의 클래스 사이의 의존성을 낮추는 패턴
  • 객체를 생성하는데 구체적인 클래스의 이름을 사용하지 않으면서 확장 및 수정을 용이하게

    why? : new className(arg1)으로 객체를 만들면 객체와 클래스간의 강한 의존성이 생김 className를 수정하여 파라미터가 1개 더 늘어났다고 가정하면 해당 클래스의 객체를 사용하던 사람의 코드도 바뀌어야함

AnOperation()메소드에서는 FactoryMethod()라는 본인 클래스내의 추상 메소드(비어져있는 메소드)를 사용하여ConcreteProduct의 객체를 만든다, 이때 FactoryMethod()는 자식 클래스에서 오버라이딩 되었으므로 동적 바인딩으로 ConcreteCreator의 오버라이딩된 FactoryMethod()가 호출 됨

  • AnOperation()을 사용하는 유저는 어떤 클래스의 객체를 만드는지 구체적으로 모름

📖abstract factory pattern

  • 논리적으로 연관있는 객체를 한번에 만드는데 이러한 연관된 객체들을 만들어내는 팩토리(클래스)를 그룹핑하겠다
  • 최상위 클래스인 House공장은 추상 메소드를 2개 갖고 있음
  • ELBF공장은 LightBulb와 EIBBBlind 객체를 만드는 팩토리(그룹 또는 클래스)
  • Luxmater공장은 LuxmaterBulb와 LuxmaterBlind를 만드는 팩토리(그룹 또는 클래스)

📖singleton pattern

  • 프로그램 실행중에 클래스의 인스턴스가 1개만 유지 되도록 하는 패턴
  • 1개의 인스턴스만 실행이 있어도 가능한 경우에 메모리를 최소화 하기 위해 사용

📌structual patterns

  • 큰 구조의 프로젝트에서 클래스를 어떻게 구성하고 구조화할 것 인가?에대한 패턴

📖adapter pattern

  • 인터페이스 호환성 문제로 같이 쓸 수 없는 클래스들을 연결하여 쓸 수 있도록 하는 패턴

    클라이언트는 Request() 인터페이스로된 클래스만 사용가능, SpecificRequest()라는 인터페이스를 가진 다른 클래스 사용 불가능

Adapter라는 클래스를 만들어 Request() 인터페이스를 그대로 사용하면서도 SpecificRequest() 인터페이스도 사용할 수 있게 만듬

📖composite pattern

  • 다른 클래스간의 공통된 인터페이스들을 모아서 마치 1가지의 클래스인 것 처럼 사용하도록 하는 패턴

    Computer라는 composite은 각각의 부품에 getPrice를 사용하여 부품 총합 getPrice를 인터페이스를 구현한다

📌behavioral patterns

  • 각 객체가 맡은 역할들을 어떻게 배치할 것 인가?에대한 패턴

📖iterator pattern

  • 객체 내부의 요소들을 하나씩 꺼내어 어떤 동작을 하려 할 때, 사용자는 내부가 어떤 구조로 되어있든 같은 인터페이스를 이용하여 해당 동작을 수행하도록 하는 패턴
  • 내부구조가 바뀌어도 사용자가 사용할 코드(인터페이스에대한)는 바뀌지 않도록 하는 것

📖observer pattern

  • 어떤 Subject 클래스에 Observer 객체들을 추가, Subject 객체에 어떤 이벤트가 일어나면 Observer에게 알려주고 Observer는 받은 알림에 따라 어떤 동작을 하는 패턴

📖state pattern

  • state에따라 객체의 행동이 달라지도록 설계하는 패턴
  • state가 추가되어도 기존의 코드를 최대한 유지한채로 수정할 수 있다.

0개의 댓글