디자인 패턴
디자인 패턴이란 소프트웨어 공학의 소프트웨어 설계에서 공통으로 발생하는 문제에 대해 자주 쓰이는 설계 방법을 정리한 패턴입니다.
디자인 패턴을 참고하여 개발할 경우 개발의 효율성과 유지보수성, 운용성이 높아지며, 프로그램의 최적화에도 도움이 됩니다.
따라서 다양한 디자인 패턴을 숙지하고 있다면 해당 패턴의 이름만으로 구조를 파악할 수 있게 되어 더욱 원활한 의사소통이 가능해집니다.
Gamma 디자인 패턴이라고도 불리는 GoF 디자인 패턴이 가장 잘 알려진 디자인 패턴인데,
이는 디자인 패턴을 목적과 범위로 분류하였습니다.
목적에 따른 분류를 보자면, 디자인 패턴은 “생성”, “구조”, “행위” 중 한 가지의 목적을 갖는다고 하였습니다.
구분 | 유형 | 설명 |
목적 | 생성 | 객체 인스턴스 생성에 관여, 클래스 정의와 객체 생성 방식을 구조화, 캡슐화를 수행하는 패턴 |
구조 | 더 큰 구조 형성을 목적으로 클래스나 객체의 조합을 다루는 패턴 | |
행위 | 클래스나 객체들이 상호 작용하는 방법과 역할 분담을 다루는 패턴 | |
범위 | 클래스 | 상속 관계를 다루는 패턴으로, 컴파일 타입에 정적으로 결정 |
객체 | 객체 간 관련성을 다루는 패턴으로, 런타임에 동적으로 결정 |
다음은 디자인 패턴의 종류입니다. 간단한 특징 정도나 이런 것들이 있구나 정도로 보셔도 좋을 것 같습니다.
정보처리기사 시험을 준비하고 계시다면, 키워드를 중심으로 알고는 있는 것을 추천드립니다.
(팩토리 메서드, 브릿지, 템플릿 메서드, 옵저버 정도는 알아두시는 것을 추천드립니다.)
구분 | 패턴 | 설명 |
생성 패턴 | 빌더(Builder) | 복잡한 인스턴스를 조립하여 만드는 구조로, 객체의 생성과 구현 방법을 분리함으로써 동일한 생성 절차에서 서로 다른 표현 결과를 만들 수 있다는 디자인 패턴 |
프로토타입(Prototype) | 기존 객체를 복제함으로써 객체를 생성 | |
팩토리 메소드(Factory Method) | 상위 클래스에서 객체를 생성하는 인터페이스를 정의하고, 하위 클래스에서 인스턴스를 생성하도록 하는 방식 | |
추상 팩토리(Abstract Factory) | 서로 연관되거나 의존적인 객체들의 조합을 만드는 인터페이스를 제공하는 패턴 | |
싱글톤(Singleton) | 전역 변수를 사용하지 않고 객체를 하나만 생성하도록 하며, 생성된 객체를 어디에서든지 참조할 수 있도록 하는 디자인 패턴 한 클래스에 한 객체만 존재하도록 제한됨 |
|
구조 패턴 | 브릿지(Bridge) | 구현부에서 추상 계층을 분리하여 추사화된 부분과 실제 구현 부분을 독립적으로 확장할 수 있는 디자인 패턴 |
데코레이터(Decorator) | 기능 확장이 필요할 때 객체 간의 결합을 통해 기능을 동적으로 유연하게 확장할 수 있게 해주어 상속의 대안으로 사용하는 디자인 패턴 | |
퍼싸드(Facade) | 사용자 측면에서 단순한 인터페이스 제공을 통해 접근성을 높일 수 있는 디자인 패턴 | |
플라이웨이트(Flyweight) | ‘클래스의 경량화’를 목적으로 하는 디자인 패턴 | |
프록시(Proxy) | 미리 할당하지 않아도 상관없는 것들을 실제 이용할 때 할당하게 하여 메모리 용량을 아끼고, 실체 객체를 드러나지 않게 하여 정보은닉의 역할도 수행하는 디자인 패턴 | |
컴포지트(Composite) | 객체들의 관계를 트리 구조로 구성하여 부분-전체 계층을 표현하는 패턴 | |
어댑터(Adapter) | 기존에 생성된 클래스를 재사용할 수 있도록 중간에서 맞춰주는 역할을 하는 인터페이스를 만드는 패턴으로, 상속을 이용하는 클래스 패턴과 위임을 이용하는 인스턴스 패턴의 두 가지 형태로 사용되는 디자인 패턴 | |
행위 패턴 | 메디에이터(Mediator) | 중재자를 두어 중재자에게 모든 것을 요구하여 통신의 빈도수를 줄여 객체 지향의 목표를 달성하게 해주는 디자인 패턴 |
인터프리터(Interpreter) | 언어의 다양한 해석, 구체적으로 구문을 나누고 그 분리된 구문의 해석을 맡는 클래스를 각각 작성하여 여러 형태의 언어 구문을 해석할 수 있게 만드는 디자인 패턴 | |
반복자(Iterator) | 컬렉션 구현 방법을 노출시키지 않으면서도 그 집합체 안에 들어있는 모든 항목에 반복자를 사용하여 접근할 수 있는 디자인 패턴 | |
템플릿 메서드(Template Method) | 어떤 작업을 처리하는 일부분을 서브 클래스로 캡슐화해 전체 일을 수행하는 구조는 바꾸지 않으면서 특정 단계에서 수행하는 내역을 바꾸는 패턴 | |
옵저버(Observer) | 한 객체의 상태가 바뀌면 그 객체에 의존하는 다른 객체들에 연락이 가고 자동으로 내용이 갱신되는 방법 | |
상태(State) | 객체 상태를 캡슐화하여 클래스화함으로써 그것을 참조하게 하는 방식 | |
방문자(Visitor) | 각 클래스 데이터 구조로부터 처리 기능을 분리하여 별도의 클래스를 만들어 놓고 해당 클래스의 메서드가 각 클래스를 돌아다니며 특정 작업을 수행하도록 만드는 패턴 | |
커맨드(Command) | 여러 기능을 실행할 수 있는 재사용성이 높은 클래스를 설계하는 패턴 | |
전략(Strategy) | 행위를 클래스로 캡슐화해 동적으로 행위를 자유롭게 바꿀 수 있게 해주는 디자인 패턴 | |
메멘토(Memento) | 객체의 정보를 저장할 필요가 있을 때 적용하는 디자인 패턴 | |
책임 연쇄(Chain of Responsibility) | 한 요청을 2개 이상의 객체에서 처리 |
앞으로 다룰 MVC, MVVM 등은 iOS에서 다루는 대표적인 구조 패턴입니다.
따라서 iOS 개발자가 되기 위해서는 iOS 개발에서 많이 쓰이는 디자인 패턴에 대해 공부해놓는 것이 좋을 것 같습니다.
728x90
'CS' 카테고리의 다른 글
정보처리기사 합격 후기 및 추천 공부 방법 (2) | 2023.12.15 |
---|