초심자를 위한 디자인 모델
게시 됨: 2016-01-13제품이나 소프트웨어 응용 프로그램을 위한 크고 작은 프로그램을 이미 작성했다면 디자인 패턴을 많이 사용했을 가능성이 큽니다... 가장 많이 사용되는/표준 디자인 패턴 중 하나가 아닐 수도 있습니다.
하지만 그렇습니다. 디자인 패턴을 구현하는 것과 디자인 패턴을 "사용하는" 것 사이에는 분명한 차이가 있습니다. 어느 쪽이든 디자인 패턴을 작업하는 사람이 이해하거나 쉽게 이해할 것입니다.
요점은 디자인 패턴이 프로그래머에게 새로운 것이 아니라는 것입니다.
이 아래 글에서는 디자인 패턴을 기본적으로 설명하려고 하고, 다양한 패턴에 대한 자세한 내용과 예제 등은 다른 글에서 다루도록 하겠습니다.
디자인 패턴이란?
시작하려면…
디자인 패턴에 대한 이해를 시작하는 가장 좋은 방법은 우리가 일상생활에서 알면서도/무의식적으로 따르는 비기술적인 패턴을 이해하는 것입니다.
예를 들어, 채용 공석에 제출된 많은 이력서를 살펴보겠습니다. 모든 사람의 이력서는 똑같아 보이지 않습니다... 모두 같은 일을 하는 경향이 있지만, 그것은 독자들에게 그들이 무엇에 능숙한지 또는 그/그녀가 그 직업에 적합할 수 있는 방법을 알려줍니다.
이력서를 취업에 제출하는 대부분의 사람들은 서식이 지정된 Word 문서에 특정 정보 집합이 포함된 이력서를 제출해야 한다는 것을 알고 있습니다.
이것은… 모든 사람이 특정 정보 집합이 포함된 이력서를 제출하는 패턴입니다.
다음과 같은 느낌이 든다면 패턴 대신 템플릿이라고 부르십시오. 디자인 템플릿.
실생활에는 그러한 패턴이 많이 있습니다. 어떤 사람들은 아래 예를 좋아합니다.
전 세계의 모든 셰프가 피자나 감자튀김을 같은 방식으로 요리합니다. 그들이 그것을 꼭대기에 올릴 수 있지만 / 다르게 맛을 낼 수 있습니다. 그것은 패턴입니다.
모든 자동차의 디자인은 기본 디자인 패턴, 네 바퀴, 스티어링 휠, 가속기 브레이크 클러치와 같은 핵심 구동 시스템 등을 따릅니다.
반복적으로 제작/생산되는 모든 것은 필연적으로 디자인의 패턴을 따를 것입니다. 자동차, 피자, ATM 기계, 심지어 칫솔까지도.
소프트웨어에서 일부 논리/메커니즘/기술을 코딩하는 표준 방법이 거의 된 디자인은 소프트웨어 디자인 패턴으로 알려지게 되었습니다.
디자인 패턴이 왜 중요한가요?
기본적으로 두 가지 이유:
- 표준에 충실하려면
- 개발을 고정하기 위해
자세히 설명드리겠습니다.
먼저 표준 패턴을 고수하는 것이 흥미로운 이유를 알 수 있습니다.
이전에 논의한 이력서 예시 목록을 살펴보겠습니다.
이메일에 첨부 파일 없이 적절한 서식 없이 이메일 텍스트로 입사 지원서를 보내는 한두 명의 지원자가 있을 수 있습니다. 이 한두 명의 지원자는 패턴을 따르지 않고 있습니다. 직업으로.... 왜요? 그들은 잘 확립된 패턴에서 벗어나고 있기 때문에 사람들이 그 직업에 대한 이력서를 짧게 나열하는 것을 좋아하지 않을 수 있습니다.
패턴에서 벗어나 '쿨'해지는 사람은 없을까? 혁신 아닌가요?
예, 매우 다르게 제출된 이력서가 다른 사람들과 다르다는 이유로 취업할 때가 있습니다. 보통 웹디자이너들은 자신의 작품을 CD로 영화화하여 발표하거나, 자신의 작품을 설명하는 애니메이션 캐릭터를 만들어 블로그에 올려서 주요 직업에 올랐다는 이야기를 듣습니다.
하지만.. 이것은 실험입니다( 혁신은 성공적인 실험에서 나옵니다 ).
소프트웨어 개발에서 대부분의 경우 타임라인 압박, 기대치 등으로 인해 실험을 할 여유가 없지만 때로는 흥미로운 프로젝트가 일부 실험을 허용합니다.
소프트웨어에서는 은행 예금과 같은 기본 작업을 수행할 수 없습니다. 101가지 방법으로... 은행 예금을 처리하는 방법은 몇 가지뿐입니다. 따라서 확립되고 테스트된 패턴을 따르는 것이 합리적입니다.
또한 대부분의 디자인 패턴에는 변형이 있습니다. 일부 변형은 매우 인기가 있어 변형도 패턴의 새로운 표준 유형이 될 것입니다.
오늘날의 소프트웨어 프로젝트는 시장에서 유사한 제품/소프트웨어의 이미 확립된 설계를 (적어도 암묵적으로) 따를 것으로 예상됩니다.
이것은 표준 스타일의 코딩 또는 디자인 패턴을 고수하는 것이 소프트웨어 개발에 도움이 되는 곳입니다. 개발을 가속화하고, 테스트되지 않은 새로운 구현에 대해 걱정하는 오버헤드를 제거하는 등,
개발 시간 단축
표준 디자인 패턴을 따르는 것은 또한 소프트웨어 설계자, 모듈 리드, 팀 리드, 개발자 등의 트리/계층 구조를 통해 "무엇"이 되어야 하는 것이 아니라 개발해야 하는 "방법"에 대해 쉽게 의사 소통할 수 있는 이점이 있습니다. 개발.
때로는 테스터가 특정 디자인 패턴을 따르는 코드가 특정 기간에 테스팅 도구 세트를 사용하여 특정 방식으로 테스트될 수 있고 그러한 알려진 디자인에 결함이 없을 수 있다는 것을 경험으로 알기 때문에 테스트 팀에도 도움이 됩니다. 또는 '알려진' 결함이 있습니다.
디자인 패턴을 사용하면 개인적인 느낌이 들지 않습니까?
아니요. 첫째, 우리는 당신이 디자인 패턴을 따르고 아무 일도 일어나지 않는다는 말을 하지 않기 때문입니다. 대부분의 프로젝트 구현은 다른 프로젝트와 기본 요구 사항만 공유하며 편차가 있을 가능성이 큽니다. 이러한 편차를 구축하려면 구현에 사용되는 표준 패턴을 조정하고 확장해야 합니다.
그것은 피자를 표준 방식으로 만든 다음 맛을 내는 것과 같습니다. 전체 파이 피자나 컷 파이 등 다양한 요구 사항에 맞게 제공합니다.
디자인 패턴의 중요성을 이해하는 데 있어 한 가지 **매우 중요합니다 .

디자인 패턴은 특정 회사나 프로그래밍 언어가 우리에게 강요하는 기술이나 프레임워크가 아닙니다. 즉, 개방형 개념과 같습니다. 자유롭게 사용하고, 필요에 맞게 수정하고, 중요하게는… 자신의 것으로 느낄 수 있습니다.
모든 표준 또는 대중적인 디자인 패턴은 실제로 상당히 확장 가능합니다. 첫째, 많은 사람들이 사용하기 때문에 대중화되었습니다. 많은 사람들이 요구 사항에 유연하기 때문에 사용합니다.
아니면 표준 디자인 패턴이 뉴저지의 한 회사 프로젝트와 방갈로르의 다른 회사와 다른 유형의 프로젝트에 어떻게 맞을 것이라고 생각하십니까?
이는 " 대부분의 디자인 패턴은 일반 "으로 이어집니다. 즉, 동일한 유형의 소프트웨어를 구축하는 데 항상 사용되는 것은 아닙니다. 일반적인 토론에서 사용되는 "뱅킹 소프트웨어 디자인 패턴" 또는 "소셜 네트워킹 소프트웨어 디자인 패턴"과 같은 것은 듣지 않을 수 있지만 "디자인 패턴"만 들을 수 있습니다.
누가 디자인 패턴을 신경써야 할까요?
- 훌륭한 건물 건축가가 일생 동안 수많은 건물과 모양의 건축과 설계를 연구하여 건물 설계 기술을 성장시키는 것처럼 소프트웨어 설계자는 전 세계의 다양한 소프트웨어/기술 시스템이 어떻게 설계되거나 설계되었는지를 연구하고 시각화해야 합니다. 건축.
- 그리고 건물의 건설 작업자가 건물 설계를 구현하는 다양한 방법을 자신의 경험이나 건물 건축가의 이해를 통해 인식해야 하는 것처럼.
소프트웨어 개발자/프로그래머는 기본 소프트웨어 디자인 패턴과 구현 코드를 이해해야 합니다. 자신 또는 특정 패턴에 따라 개발하도록 팀에 지시하는 소프트웨어 설계자로부터.
기본 코드 패턴
이 기사의 시작 부분에서 나는 모든 프로그래머가 디자인 패턴을 사용했을 것이라고 말했습니다. 다음은 패턴을 따르는 코드의 아주 기본적인 몇 가지 예입니다.
- 다음은 기본적인 Intercepting Filter 디자인 패턴입니다.
- 복사 코드 숨기기
- [암호]
스위치(조건){
케이스 값1:
케이스 값2:
기본:
}
[/암호] - 이벤트 트리거, 이벤트 핸들러..는 기본 주제-관찰자 디자인 패턴에 따릅니다. 우리는 각 패턴 표준, 인기 있는 변형, 예를 들어 논의할 것입니다. 곧.
- C#의 Arraylist와 같은 일종의 컬렉션을 사용하고 배열을 반복하는 경우 기본 Iterator 디자인 패턴을 사용한 것입니다.
- 아래 코드는 기본 예외 처리 / Chain of Responsibility 패턴의 예입니다.
- 복사 코드 숨기기
- [암호]
노력하다{
}catch(예외 예외){
}
마지막으로{
}
[/암호]
다양한 디자인 패턴 영역
소프트웨어에는 디자인 패턴 이외의 다른 용어가 있습니다. 그 중 일부는 종종 우리가 지금까지 논의한 디자인 패턴과 관련이 있고 일부는 완전히 관련이 없습니다.
지금까지 위에서 논의한 것을 " 구현 디자인 패턴 "이라고 합니다.
Architecture Patterns, Framework Patterns, Language Patterns (주로 Language Constructs라고 함)와 같은 것들이 있습니다.
그것들은 다른 수준에 놓인 패턴입니다… 언어 패턴 은 언어의 기능/구성으로서 C#/Java와 같은 프로그래밍 언어의 일부로 구현된 패턴입니다. 그 중 일부는 우리가 이미 본 것입니다.
주제 관찰자, 인터셉트 필터 등의 위의 모든 예는 C 이후에 나온 모든 인기 있는 고급 프로그래밍 언어에서 언어 구성으로 흡수됩니다.
아키텍처 패턴 은 소프트웨어 아키텍처의 표준 모델로, 일반적으로 전체 애플리케이션을 구성하는 모듈이나 계층 또는 계층을 배치하거나 연결하는 다양한 방법을 나타냅니다.
이것은 코딩/프로그래밍의 의미에서 디자인 패턴과 완전히 관련이 없습니다. 그러나 이 기사에서 논의한 바와 같이 Why's / What's에 대한 동일한 답변을 공유합니다.
프레임워크 패턴 은 디자인 패턴에 대한 논의와도 관련이 없습니다. .NET과 같은 프레임워크가 프레임워크의 내장 메서드 또는 개체를 통해 쉽게 오류 로깅 또는 추적 코드 실행 경로를 위한 특별한 수단을 구현하는 경우 이러한 메커니즘을 프레임워크 패턴이라고 합니다.
.NET Framework의 몇 가지 예에는 stackTrace 기능, 클래스/메서드 정의 위에 [] 대괄호가 있는 클래스 속성 기능 등이 포함됩니다. 이러한 기능을 사용할 때 우리는 Framework의 내장 패턴으로 코딩합니다.
이 기사가 디자인 패턴의 개요 및 관련 용어를 제공하는 데 도움이 되기를 바랍니다.
지금까지 표준이 무엇이고 얼마나 중요한지에 대해서만 논의했습니다. 표준 패턴 자체가 무엇인지에 대해서는 논의하지 않았습니다.
특허
관련 소스 코드 및 파일과 함께 이 기사는 The Code Project Open License(CPOL)에 따라 사용이 허가됩니다.