Swift에서 배우는 Factory Method 패턴【Swift Design Pattern】


(그림: wikipedia )

특징



  • 생성에 대한 패턴
  • Factory Method 는 클래스의 이니셜라이저 대신에 사용한다.
    객체 생성 프로세스를 추상화하고 런타임에 인스턴스화된 객체 유형을 생성합니다.
  • 팩토리는 「공장」, 인스턴스를 생성하는 공장이 Factory Method 패턴.
  • 단독만 생성의 케이스라면 Template Method 패턴이 된다.
  • Java로 말하면 추상 클래스에 해당한다.

  • 소스 코드



    example
    // 通貨の説明
    protocol CurrencyDescribing {
        var symbol: String { get }
        var code: String { get }
    }
    
    final class Euro: CurrencyDescribing {
        var symbol: String {
            return "€"
        }
        var code: String {
            return "EUR"
        }
    }
    
    final class UnitedStatesDolar: CurrencyDescribing {
        var symbol: String {
            return "$"
        }
        var code: String {
            return "USD"
        }
    }
    
    enum Country {
        case unitedStates
        case spain
        case uk
        case greece
    }
    
    struct CurrencyFactory {
        static func currency(for country: Country) -> CurrencyDescribing? {
            switch country {
            case .spain, .greece:
                return Euro()
            case .unitedStates:
                return UnitedStatesDolar()
            default:
                return nil
            }
        }
    }
    
    

    usage
    import UIKit
    
    class ViewController: UIViewController {
    
        let noCurrencyCode = "No Currency Code Available"
    
        override func viewDidLoad() {
            super.viewDidLoad()
            let greece = CurrencyFactory.currency(for: .greece)?.code ?? noCurrencyCode // "EUR"
            let spain = CurrencyFactory.currency(for: .spain)?.code ?? noCurrencyCode "EUR"
            let unitedStates = CurrencyFactory.currency(for: .unitedStates)?.code ?? noCurrencyCode // "USD"
            let uk = CurrencyFactory.currency(for: .uk)?.code ?? noCurrencyCode // "No Currency Code Available"
        }
    }
    

    샘플 코드

    관련 패턴


  • Template Method
  • Factory Method 패턴은 Template Method 패턴의 응용.

  • Singleton
  • CurrencyFactory를 담당하는 구조체는 Singleton 패턴으로도 만들 수 있습니다.
  • 여러 인스턴스가 필요하지 않기 때문입니다.

  • Composite
  • CurrencyDescribing을 맡는 protocol에 Composite가 적용되는 경우가 있다.

  • Iterator
  • Iterator의 인스턴스를 작성할 때, Factory Method 패턴이 사용되는 경우가 있다.


  • 요약


  • 1개의 클래스를 보는 것만으로는, 어느 패턴인가를 판단할 수 없다.
  • 클래스나 프로토콜의 상호관계를 눈으로 향하게 한다.


  • 참고


  • [iOS/Swift] 앱 개발의 실무적 접근 방식으로 배우는 디자인 패턴 ~Factory Method~ - Qiita
  • Swift로 쓰는 디자인 패턴 요약 - Qiita
  • ochococo/Design-Patterns-In-Swift: 📖 Design Patterns implemented in Swift 5.0
  • 증보 개정판 Java 언어로 배우는 디자인 패턴 입문 | 유키 히로시 | 책 | 우편 주문 | 아마존
  • 좋은 웹페이지 즐겨찾기