Static Factory Method Pattern

2023. 4. 12. 12:51·📚 Data Architect/Design Pattern

💡 Static Factory Method Pattern

Static Factory Method Pattern의 장점

  • Constructor Chaning으로 발생될 문제 방지
  • 이름 설정 가능 -> 반환될 객체의 특성을 더 자세하게 묘사
  • 불필요한 객체 생성 방지 -> 만들어놓거나 새로 만든 객체를 캐싱하여 재활용하는 방식 사용
  • 서브 클래스 반환 -> 반환할 객체의 클래스를 유연하게 선택
  • 파라미터에 따라 매번 다른 타입의 객체 반환
  • 반환할 객체 클래스(구현체)가 없어도 됨

Static Factory Method Pattern의 단점

  • Sub Classing의 어려움
  • Documentation
  • 불명확한 API로 인해 개발자가 일일이 인스턴스화 할 방법을 찾아야함

Static Factory Method Pattern의 명명 방식

  • of()
    • 여러 파라미터를 받아 적절한 타입의 객체 반환하는 집계 메서드
    • ex: set numbers = EnumSet.of(One,Two,Three);
  • from()
    • 하나의 파라미터를 받아서 타입의 객체를 반환하는 형변환 메서드
    • ex: Date date = Date.from(instance);
  • valueOf()
    • of & from의 구체화 버전
    • ex: BigInteget num = BigInteger.valueOf(Integer.MAX_VALUE);
  • instance() & getInstance()
    • 파라미터로 명시한 객체를 반환하지만 같은 객체임을 보장하지는 않음
    • ex: StockOption stock = StockOption.getInstance(option);
  • create() & newInstance()
    • 매번 새로운 객체 반환 == 객체 생성
  • getType()
    • getInstance와 같지만, 생성할 클래스가 아닌 다른 클래스의 팩토리 메서드를 정의할 때 사용
    • 자신의 타입이 아닌 다른 타입 반환
    • ex: Storage st = Disk.getStorage(path);
  • newType()
    • newInstanc와 같지만, 생성할 클래스가 아닌 팩토리 메서드를 정의할 때 사용
    • 자신의 타입이 아닌 다른 타입 반환
    • ex: BufferedWriter bw = Disk.newBufferedWriter(path);
  • type()
    • getType & newType의 간결화 버전
    • ex: List comment = Collections.List(list);
저작자표시 (새창열림)

'📚 Data Architect > Design Pattern' 카테고리의 다른 글

CQRS(Command Query Responsibility Segregation) Pattern  (0) 2024.11.26
Factory Method Pattern  (0) 2023.04.12
Builder Pattern  (0) 2023.04.12
'📚 Data Architect/Design Pattern' 카테고리의 다른 글
  • CQRS(Command Query Responsibility Segregation) Pattern
  • Factory Method Pattern
  • Builder Pattern
신건우
신건우
조용한 개발자
  • 신건우
    우주먼지
    신건우
  • 전체
    오늘
    어제
    • 분류 전체보기 (422)
      • 📘 Frontend (71)
        • Markup (1)
        • Style Sheet (2)
        • Dart (8)
        • Javascript (12)
        • TypeScript (1)
        • Vue (36)
        • React (2)
        • Flutter (9)
      • 📘 Backend (143)
        • Java (34)
        • Concurrency (19)
        • Reflection (1)
        • Kotlin (29)
        • Python (1)
        • Spring (42)
        • Spring Cloud (5)
        • Message Broker (5)
        • Streaming (2)
        • 기능 개발 (5)
      • 💻 Server (6)
        • Linux (6)
      • ❌ Error Handling (11)
      • 📦 Database (62)
        • SQL (31)
        • NoSQL (2)
        • JPQL (9)
        • QueryDSL (12)
        • Basic (4)
        • Firebase (4)
      • ⚙️ Ops (57)
        • CS (6)
        • AWS (9)
        • Docker (8)
        • Kubernetes (13)
        • MSA (1)
        • CI & CD (20)
      • 📚 Data Architect (48)
        • Data Structure (10)
        • Algorithm (8)
        • Programmers (17)
        • BaekJoon (5)
        • CodeUp (4)
        • Design Pattern (4)
        • AI (0)
      • ⚒️ Management & Tool (8)
        • Git (7)
        • IntelliJ (1)
      • 📄 Document (10)
        • Project 설계 (6)
        • Server Migration (3)
      • 📄 책읽기 (2)
        • 시작하세요! 도커 & 쿠버네티스 (2)
      • 🎮 Game (4)
        • Stardew Vally (1)
        • Path of Exile (3)
  • 블로그 메뉴

    • 링크

      • Github
    • 공지사항

    • 인기 글

    • 태그

      Lock #Thread #Concurrency
      React #Markdown
      GStreamer #Pipeline
    • 최근 댓글

    • 최근 글

    • hELLO· Designed By정상우.v4.10.0
    신건우
    Static Factory Method Pattern
    상단으로

    티스토리툴바