프로그래밍_인포/소프트웨어 설계

소프트웨어 설계의 디자인 패턴이란 무엇일까?

jjscript 2023. 7. 4. 23:40
728x90
반응형

디자인 패턴이란 특정 문제를 해결하기 위해 공통적으로 사용되는 설계 방법을 일컫는 용어입니다. 이들은 반복적으로 발생하는 문제들에 대한 효과적이고 재사용 가능한 해결책을 제공합니다. 디자인 패턴은 코드를 더 유지보수가 가능하고, 재사용 가능하며, 이해하기 쉽게 만들 수 있습니다.

 

디자인 패턴의 구조

패턴 이름

패턴 이름은 디자인 패턴을 설명하고 식별하는 데 사용됩니다. 이는 개발자들이 설계에 대한 토론을 간략하게 하고, 공통 언어를 형성하는 데 도움이 됩니다. 예를 들어 "싱글턴", "팩토리", "데코레이터" 등의 이름이 있습니다.

문제

이것은 패턴이 적용되는 상황이나 문제를 설명합니다. 이는 특정 문맥에서 일반적으로 발생하는 설계 이슈를 포함하며, 패턴이 언제 사용되어야 하는지에 대한 정보를 제공합니다.

해결책

패턴의 핵심이며, 설계 문제를 해결하는 방법을 제공합니다. 그러나 이것은 구체적인 구현을 제공하는 것이 아니라, 객체와 클래스 사이의 관계, 책임, 알고리즘 등의 일반적인 설계를 설명합니다.

결과

패턴의 적용 결과와 그 결과를 이해하는 데 도움이 될 수 있는 전략을 설명합니다. 결과는 패턴이 해결할 수 있는 문제뿐만 아니라 그에 따른 트레이드오프를 포함할 수 있습니다.

 

디자인 패턴의 유형

디자인 패턴의 유형은 생성 패턴, 구조 패턴, 행동 패턴의 3가지 카테고리로 나뉩니다.

 

생성 패턴

생성 패턴은 객체가 생성되는 방식에 중점을 둡니다. 이를 통해 시스템이 객체 생성을 어떻게 수행할지를 추상화할 수 있습니다. 예를 들어, 싱글톤 패턴, 팩토리 메소드 패턴, 추상 팩토리 패턴, 빌더 패턴, 프로토타입 패턴 등이 있습니다.

구조 패턴
구조 패턴은 클래스와 객체를 더 큰 구조로 구성하는 방식에 대한 패턴입니다. 이들은 클래스와 객체 간의 관계를 간결하게 표현하여 유연성과 효율성을 높입니다. 예를 들어, 어댑터 패턴, 브리지 패턴, 컴포지트 패턴, 데코레이터 패턴, 퍼사드 패턴, 플라이웨이트 패턴, 프록시 패턴 등이 있습니다.

행동 패턴

행동 패턴은 객체간의 상호작용과 책임 분배에 초점을 맞춥니다. 이들은 객체 간의 통신을 개선하고 책임을 분산시켜 코드를 더욱 깔끔하게 만듭니다. 예를 들어, 체인 오브 리스폰시빌리티 패턴, 커맨드 패턴, 인터프리터 패턴, 이터레이터 패턴, 메디에이터 패턴, 메멘토 패턴, 옵저버 패턴, 상태 패턴, 전략 패턴, 템플릿 메소드 패턴, 방문자 패턴 등이 있습니다.

 

디자인 패턴의 장단점

장점

재사용성: 디자인 패턴은 공통적으로 발생하는 문제를 해결하는 검증된 해결책을 제공하므로, 새로운 문제에 대해 해결책을 처음부터 고민할 필요가 없습니다.

통신 효율성: 디자인 패턴은 개발자들이 공통 언어를 가지게 하여, 서로의 아이디어를 효율적으로 전달하고 이해할 수 있게 합니다.

유지보수성: 디자인 패턴은 구조화된 접근 방식을 사용하기 때문에, 코드의 유지보수가 용이합니다. 이는 또한 코드의 확장성과 가독성을 향상시킵니다.

단점

과도한 사용: 디자인 패턴이 항상 필요한 것은 아닙니다. 때때로, 간단한 코드가 더 나은 해결책일 수 있습니다. 디자인 패턴을 무조건적으로 사용하려는 경향은 복잡성을 증가시키고 오히려 생산성을 저하시킬 수 있습니다.

적절한 패턴 선택: 적합한 디자인 패턴을 선택하는 것은 쉽지 않을 수 있습니다. 이는 개발자의 경험과 이해도에 크게 의존합니다. 잘못 선택된 패턴은 개발 과정을 복잡하게 만들고 비효율적인 결과를 초래할 수 있습니다.

학습 곡선: 디자인 패턴을 효과적으로 이해하고 사용하려면 시간과 노력이 필요합니다. 초보 개발자에게는 이러한 패턴들을 학습하고 이해하는 것이 어려울 수 있습니다.

 

GoF란?

프로그래밍을 공부하시는 분들이라면 GoF에 대해서 많이들 들어보셨을거라고 생각합니다. 그렇다면 GoF가 무엇일까요?

 

"GoF"는 "Gang of Four"의 약자로, 소프트웨어 공학에서 널리 사용되는 용어입니다. 이 용어는 Erich Gamma, Richard Helm, Ralph Johnson, 그리고 John Vlissides라는 네 명의 저자를 가리킵니다. 이들은 "Design Patterns: Elements of Reusable Object-Oriented Software"라는 제목의 책을 공동으로 쓴 것으로 유명합니다.

 

이 책에서는 23개의 디자인 패턴을 소개하고 있으며, 이들 패턴은 오늘날 소프트웨어 설계에서 널리 사용되고 있습니다. 이들 패턴은 객체지향 설계 문제를 해결하는 데 도움이 되며, 좀 더 유연하고, 재사용 가능하고, 이해하기 쉬운 시스템을 만드는 데 기여합니다. 이런 이유로 "GoF 디자인 패턴"은 많은 소프트웨어 개발자들에게 필수적인 지식으로 간주되며, 이들이 개발하는 애플리케이션의 구조와 설계를 향상시키는 데 큰 도움을 줍니다.

728x90
반응형