vidigummy SOMA

디자인 패턴(생성패턴)

vidi 2022. 8. 14. 18:57
  1. 소프트웨어 디자인 패턴?
    1. 소프트웨어 설계 및 코딩에 있어 특정 문맥에서 공통적으로 발생하는 문제에 대해 재사용 가능한 해결책이다.
    2. 다양한 상황에 맞게 사용될 수 있는 서술/템플릿 같은 것이라고 생각하면 편할 것 같다.
    3. 개발자 간의 공통 언어로써, 소프트웨어를 설계하고 문제를 해결해 나가는 과정에서 사용되기 좋은 방법론들을 모아 놓은 것으로, 이해하고 있어야 한다.
    4. 분류는 생성 패턴, 구조 패턴, 행동 패턴으로 나뉜다.
  2. 생성 패턴(인스턴스를 만드는 절차를 추상화 하는 패턴)
    1. 추상 팩토리 1. 다양한 구성 요소 별로 ‘객체의 집합’을 생성해야 할 때 유용하다. 2. 이 패턴을 사용하여 상황에 알맞은 객체를 생성할 수 있다. 3. 쉽게 말하자면 서로 관련이 있는 객체들을 통째로 묶어서 팩토리 클래스로 만들고, 이를 팩토리를 조건에 따라 생성하도록 다시 팩토리를 만들어서 객체를 생성하는 패턴 4. 포유류 안에서 영장류 안에서 인간…! 이런 느낌으로 하나씩 해결하는 느낌으로다가!(1개의 수퍼 클래스와 N개의 서브 클래스) 5. 팩토리 메써드 패턴과는 명확히 다르다.
      1. 객체에 대한 생성을 지원하는 범위
        1. 한 팩토리에서 서로 연관된 여러 종류 모두 지원(create() 메서드가 팩토리 클래스에 여러개)
        2. 구상 클래스에 의존X, 여러개의 관련 객체를 하나의 팩토리로 묶음
      2. 팩토리 메서드에서 만드는 객체의 종류
        1. 인자에 따라 관련된 객체들을 생성하는 팩토리의 종류가 결정됨
      3. 결합도를 낮추는 대상
        1. ConcreteFactory와 Client간의 결합도를 낮출 때 사용
      4. 포커스
        1. 클래스 레벨에서 포커스를 맞춤
        2. 각 Product들이 다른 클래스와 함께 사용될 때의 제약사항을 강제할 수 있음.
        3. 새로운 ConcreteFactory를 추가할 때 많은 작업이 피요.
      5. 메서드와 오브잭트
        1. Object이다.(팩토리 오브젝트 생성)
      6. 상속,구성
        1. 지역 레퍼런스를 두어 외부로부터 Factory 객체를 DI 받아서 위임
    2. 빌더
      1. 복합 객체의 생성 과정과 표현 방법을 분리하여 동일한 생성 절차에서 서로 다른 표현 결과를 만들 수 있게 하는 패턴(생성자 오버로딩)
      2. 필수 값 속성 / Optional한 값 속성을 각각 따로 만들어 return 함으로써, 확장성을 높일 수 있다.
      3. 팩토리보다는 좀 더 한 객체 내에서 어떻게든 해결한다는 느낌이 강하다.
        1. 복잡한 객체 하나를 리턴(각각의 모양이 다를 수 있어)
    3. 의존성 주입
      1. 하나의 객체가 다른 객체의 의존성을 제공하는 테크닉
      2. A가 B를 의존한다.
        1. B가 변하면 A에 영향을 미친다.
        2. 햄버거 가게 요리사는 햄버거 레시피에 의존한다.
          1. 레시피가 바뀌면 요리사는 만드는 방법을 수정해야 한다.
          2. 하지만 의존성 주입을 하려면 사장님이 요리사가 어떤 햄버거 레시피에 의존할지 정해주는 것을 DI(의존성 주입) 이라 부른다.
        3. 쉽게 말하면 config를 넘겨주는 것이다.
    4. 팩토리 메써드 패턴(이번에 내가 사용한 패턴)
      1. 객체지향 디자인 패턴
      2. 부모 클래스에 알려지지 않은 구체 클래스를 생성하는 패턴이며. 자식 클래스가 어떤 객체를 생성할지를 결정하도록 하는 패턴.
        1. 부모 클래스에 구체 클래스 이름을 감추기 위한 방법으로도 사용한다.
      3. 중첩되기 시작하면 굉장히 복잡해질 수 있다. 상속을 사용하지만 부모 클래스를 전혀 확장하지 않는다.
      4. 추상 팩토리 패턴과의 차이점
        1. Factory 클래스에서 객체에 대한 생성을 지원하는 범위
          1. 한 팩토리당 한 종류(create 메서드가 factory 클래스에 한개)
          2. 한개의 메서드로 여러개의 객체를 만듬
        2. 팩토리 메서드에서 만드는 객체의 종류
          1. 인자에 따라 객체의 종류가 결정됨
        3. 결합도를 낮추는 대상
          1. ConcreteProduct와 Client 간의 결합도를 낮출 때 사용
        4. 포커스
          1. 메서드 레벨에서 포커스를 맞춤
          2. 클라이언트의 ConcreteProduct 인스턴스 생성 및 구성에 대한 책임을 덜어줌.
        5. 메서드와 오브젝트
          1. 팩토리 메서드는 단일 Method이다.
        6. 상속/구성
          1. 상속을 사용하여 객체의 인스턴스 생성에 대해선 서브클래스에 의존한다.
          2. 지역 레퍼런스 없이 바로 하위 클래스의 함수를 호출하여 객체를 생성한다.
    5. 프로토 타입 패턴
      1. 객체를 생성하는데 시간과 노력이 많이 들고, 이미 유사한 객체가 존재하는 경우에 사용.
      2. java에서 clone()을 사용한다.
        1. DB로부터 가져온 데이터를 우리의 프로그램에서 수차례 수정을 해야하는 요구사항이 있을 경우, 매번 new라는 키워드를 통해 객체를 생성하여 DB로부터 항상 모든 데이터를 가져오는 것은 좋은 아이디어가 아님.
          1. DB로 접근해서 데이터를 가져오는 행위는 비싸…
          2. 한번 DB에 접근하여 데이터를가져온 객체를 필요에 따라 새로운 객체에 복사하여 데이터 수정 작업을 하는 것이 더 좋은 방법.
      3. 쉽게 설명하면 기존의 객체를 이용하여 새로운 객체를 만들 때 사용한다.(가져와서 데이터 복제 후, 새로운 인스턴스를 만들고 원하는 부분만 수정하고)

'vidigummy SOMA' 카테고리의 다른 글

Kafka와 Azure에서의 사용(Event Hub, Event Grid)  (1) 2022.08.14
Data Warehouse  (0) 2022.08.14
2차 스프린트 회고  (0) 2022.08.14
1차 아키텍처(1st Sprint)  (0) 2022.07.24