PPP CLUB Animation 객체 이런식으로 만들어 보기

========================================================================

1. 팩토리 패턴

상황을 가정해봅시다.

아래 코드와 같이 원과 직사각형 클래스가 있고 이걸 그리는 함수가 각각 있다고 해봅시다. 혹시 불편한 부분이 느껴지시나요?

class Circle {
    func draw() {
        print("draw circle")
    }
}

class Rectangle {
    func draw() {
        print("draw rectangle")
    }
}

class ViewController: UIViewController {
    override func viewDidLoad() {
        super.viewDidLoad()
        
        let circle = Circle()
        circle.draw()
        
        let rectangle = Rectangle()
        rectangle.draw()
    }
}

저는 크게 세가지 불편한 부분이 느껴집니다

  1. 확장성에 약하다는 것입니다. : 만약 삼각형, 타원 등등 다양한 도형을 그리게 된다면.. 반복적인 코드가 많이 사용되겟죠?
  2. 객체를 생성하는 과정에서 캡슐화가 되지 않는 것입니다. 객체지향 프로그래밍에서는 캡슐화는 기본적인 부분이겠죠!
  3. 클라이언트 코드와 객체 생성 로직이 합쳐지면서 결합도가 높아진다

이것을 해결할 수 잇는 디자인 패턴이 바로 팩토리 패턴입니다!

1-1. 팩토리 패턴?

어떤 객체를 생성할 때, 그 객체를 사용하는 객체에서 직접 객체의 인스턴스를 생성하는 것이 아니라, 팩토리라는 객체에게 그 작업을 맡겨 의존성을 주입받는 방법

쉽게 말해

⇒ 객체 생성을 전담하는 struct/class를 만들어 구체적인 생성과정을 그 안에서 구현하는 패턴

1-2. 왜 사용해야 되나?

가장 큰 장점은 객체 생성 로직이 Factory 클래스에 집중됨으로 해당 객체가 집중해야될 부분에 초점을 맞출 수 있다는 것이다.