[디자인 패턴] 생성, Prototype pattern(원형 패턴) with Swift
원형이 되는 객체를 명시하고 전달시 해당 객체를 복제하여 전달하는 패턴입니다. 1️⃣ 동기악보에 음표를 생성하는 프레임워크를 만드는 경우, 개발자는 GraphicTool이라는 추상 클래스를 만들고 구체적인 음표의 세부사항은 클라이언트에 위임해야 확장성을 확보할 수 있습니다.클라이언트는 각각의 음표 클래스(Graphic클래스의 서브클래스)마다 GraphicTool클래스의 서브클래스를 만들어야 합니다.즉, 음표 서브클래스+생성 클래스가 병렬적으로 생성되어 많은 수의 클래스를 요구하게되는 구조가 만들어 집니다.클래스 생성을 줄이기 위한 방법으로 원형 패턴을 사용할 수 있습니다. 2️⃣ 활용성런타임에 구체적으로 협력할 객체를 지정하고 싶을 때구체 클래스와 생성 클래스가 병렬적으로 생성되는 구조를 피하고 싶을때생..
2025.04.10
[디자인 패턴] 생성, Factory method pattern(팩토리 매서드 패턴) with Swift
시스템이 사용할 구체적인 클래스 타입에 대한 결정을 서브 클래스로 위임하는 패턴이다. 1️⃣ 동기프레임워크를 개발하는 경우 클라이언트가 원하는 구체적인 동작사항을 프레임워크 제공자가 모두 예측하여 구현할 수 없습니다.이 경우 시스템이 활용하는 인터페이스를 클라이언트에게 제공하고 클라이언트가 인터페이스를 구체적인 객체를 구현한 후 시스템에게 전달하는 구조가 필요합니다.팩토리 매서드 패턴은 어떤 구체적인 객체를 생성해야 하는지에 대한 정보를 캡슐화함으로써 그것을 프레임워크로 부터 분리합니다. 2️⃣ 활용성자신이 생성해야 하는 객체의 클래스를 예측할 수 없을 때추상화를 통해 확정성을 확보합니다.생성에 대한 책임을 서브 클래스로 위임하고 싶을 때여기서 말하는 서브클래스는 추상 팩토리 매서드를 오버라이딩하여 구체..
2025.04.09
[디자인 패턴] 생성, Builder pattern(빌더 패턴) with Swift
1️⃣ 의도복잡한 객체를 생성하는 절차와 생성과정에서의 구체적인 표현 방식을 분리하는 패턴입니다.동일한 절차내에서 서로다른 표현을 적용할 수 있는 인터페이스를 제공하는 것이 목표인 패턴입니다. 2️⃣ 동기특정 포맷의 텍스트 파일을 다른 포맷의 파일로 변경하는 과정을 예시로 들 수 있습니다.텍스 포맷 변경의 경우 특정 포맷을 읽을 수 있는 판독기가 파일을 토큰화 하고토큰화 한 것을 다른 포맷으로 변경하는 방식으로 동작합니다. 이 경우 파일의 토큰 변환과정과 토큰의 포맷변형이 얽혀있다면 여러가지 포맷 변화를 지원하려는 경우 중복코드가 발생하거나 유지보수가 힘든 코드가 만들어질 수 있습니다. 여기서 파일을 토큰화 하는 것과 토큰들을 다른 포맷으로 변경하는 로직을 분리하여 문제를 해결할 수 있습니다."토큰들을 ..
2025.04.09
[디자인 패턴] 생성, Abstract factory pattern(추상 팩토리 패턴) with Swift
생성 패턴에 대해디자인 패턴은 크게 3가지로 나뉜다 생성 패턴, 구조 패턴, 행동 패턴그 중 생성 패턴은 인스턴스를 만드는 절차를 추상화하는 패턴이다.시스템이 어떤 구체적인 객체를 사용하는지 대한 정보를 캡슐화함으로써 유연성을 확보하는 것이 주된 목표이다. 추상 팩토리 패턴시스템이 복잡해질 수록 해당 시스템을 구성하는 객체의 수는 많아지고 협력관계는 복잡해진다.추상 팩토리는 특정 협력공동체를 구성하는 객체들을 생성하기 위한 인터페이스이다. 1️⃣ 동기특정시스템을 구성하는 객체의 집합을 유연하게 변경하고 싶다.팩토리에게 단순히 추상화된 객체를 요청하여 반환받고 싶다. 2️⃣ 활용성객체의 생성에 대한 관리와 객체의 구체적인 구현사항으로 부터 시스템을 독립화 할 수 있다.여러 객체군중 하나를 선택하여 시스템을..
2025.04.09