안녕하세요! Hong 입니다.
보편적인 프로그래밍을 위해 오늘부터 디자인 패턴에 대해서 공부해보려 합니다.
고고고고
목차
- 디자인 패턴이란?
- 디자인 패턴의 종류
1. 디자인 패턴이란?
In software engineering, a software design pattern is a general, reusable solution to a commonly occurring problem within a given context in software design. (출처 : 위키피디아)
소프트웨어 엔지니어링에서, 소프트웨어 디자인 패턴은 소프트웨어를 설계할 때 일반적으로 발생하는 문제에 대해 재사용할 수 있는 해결법입니다.
물론 디자인 패턴을 몰라도 소프트웨어 설계를 못하는 것은 아닙니다. 그러나 알고 있으면 도움이 될 수 있는 것들이 있습니다.
- 개발자들과 이야기할 때 편해집니다.
- 디자인 패턴 모르는 사람: 이것을 프로토콜로 하고 A객체와 B객체에 해당 프로토콜을 채택시킨 후 어쩌구 저쩌구~~
- 디자인 패턴 아는 사람: 델리게이션 패턴을 사용하면 ~
- 보편적인 설계와 코딩을 함으로써 새로 들어오는 다른 개발자가 코드만 봐도 찰떡같이 이해할 수 있습니다.
- CreamBreadFactory - 응? 팩토리? 크림빵 객체를 인스턴스화 시켜주는 클래스인가보네.
이런 디자인 패턴이 프로그래밍 설계에서의 모든 문제점을 해결할 수 있는 것은 아니기 때문에,
이 패턴들을 공부하고 iOS의 어느 부분에서 활용될 수 있는지는 공부하면서 차근차근 알아가보겠습니다.
2. 디자인 패턴의 종류
1994년에 GoF(Gang of Four)라고 불리는 Erich Gamma, Richard Helm, Ralph Johnson, John Vissides 4명이 처음으로 디자인 패턴에 관련된 책을 발간했습니다.
그 책에는 다양한 객체 지향 설계 관련 문제를 해결하는 생성 5가지, 구조 7가지, 행위, 11가지(총 23가지) 패턴이 담겨져 있습니다.
생성 패턴
어떤 객체가 생성되어도 프로그램 구조에 큰 영향이 없도록 유연하게 만들 수 있는 패턴
- 빌더, 추상 팩토리, 팩토리 메서드, 싱글톤, 프로토 타입 (5가지)
구조 패턴
클래스나 객체를 조합해 더 큰 구조를 만들 수 있는 패턴
ex) 어댑터, 브리지, 컴포지트, 데코레이터, 퍼사드, 플라이웨이트, 프록시 (7가지)
행위 패턴
알고리즘 및 객체 간의 책임 할당과 관련된 패턴
ex) 스트래티지, 메멘토, 옵저버, 스테이트, 책임 연쇄, 커맨드, 인터프리터, 이터레이터, 미디에이터, 템플릿 메서드, 비지터 (11가지)
책이 발간된지 20년 조금 넘었기 때문에 다른 패턴들도 생겨났지만 일단 iOS에서 자주 사용되는 것 같은 것을 먼저 공부해보겠습니다.