디자인 패턴에 대한 표준 책이 있습니까? [닫은]


49

디자인 패턴 학습에 관심이 있으며이 주제를 학습 할 때 최상위 계층 책으로 간주되는 내용을 알고 싶습니다.

모범 사례, 디자인 방법론 및 기타 디자인 패턴에 대한 유용한 정보를 설명하기위한 사실상의 표준이있는 책이 있습니까? 그 책은 어떻습니까?


이것이 당신이 생각하고있는 것인지 확실하지 않지만 Forrst 에서 많은 영리한 개발 자료를 찾습니다 .
Trey Piepmeier

2
"디자인 패턴에 대한 참조 소스"또는 "디자인 패턴 리소스"라는 제목 (어떻게 "요청시"를 참조하는 것으로 "참조"를 의미하지 않기 때문에)과 모든 목록 항목을 본문으로 옮기거나 제거하십시오. )?


괜찮은 구현의 경우, 나는 dofactory 에 대한 것을 보곤했습니다 (책을 구입하지는 않았습니다).
Steven Evers

4
이 질문이 완전하고 포괄적 인 답변을 받았으므로 다른 디자인 패턴 질문을이 질문과 중복하여 닫아서이 주제에 대한 정식 Q & A 및 답변 쌍으로 지정했습니다.

답변:


58

디자인 패턴 : 재사용 가능한 객체 지향 소프트웨어의 요소는 디자인 패턴 에 대한 표준 책의 정의와 매우 유사합니다. Wikipedia 기사 (강조 광산) 에 따르면 :

이 책의 최초 발행일은 1994 년 10 월 21 일이며 1995 년 저작권이 있으며 2010 년 7 월 기준 으로이 책은 38 번째로 인쇄되었습니다 . 이 책은 1994 년 10 월 오레곤 주 포틀랜드에서 열린 OOPSLA 회의에서 대중에게 처음으로 제공되었습니다.이 책은 소프트웨어 공학 분야에 큰 영향을 미쳤으며 객체 지향 설계 이론 및 실습의 중요한 소스로 간주됩니다. 이상 50 만 카피가 판매 된 영어 및 13 개 다른 언어 .

디자인 패턴의 개척자 인 Ward CunninghamWikiWikiWeb 에서 책 패턴의 온라인 카탈로그를 유지 관리합니다 . 그리고 디자인 패턴 에 대한 Wikipedia 기사에 따르면 (다시 강조).

Design Patterns : Elements of Reusable Object-Oriented Software 책 이 소위 "Gang of Four"(Gamma et al.)에 의해 1994 년출판 된 후 컴퓨터 과학에서 디자인 패턴 이 인기를 얻었습니다 .

같은 기사 에서 장르에서 주목할만한 다른 책이 많이 있습니다 .

내가 파울러의 책을 읽은 사람들 중, 그것은 매우 영향력 있고 잘 읽었습니다. 특정 시점에서 그것은 내 취향에 대해 약간 모호하지만 전반적으로 즐거운 책입니다. 책에 포함 된 패턴 의 온라인 카탈로그 가 있으며 최소한의 설명 만 있습니다.

나는 또한 헤드 퍼스트 디자인 패턴을 훑어 보았고 헤드 퍼스트 시리즈의 다른 책을 읽은 경우 시리즈의 대부분의 책 과 동일한 품질과 즐거움을 얻습니다 .

Head First는 O'Reilly Media가 출판 한 여러 주제에 대한 일련의 입문 교육 서적입니다. 그것은 정통적이고 시각적으로 집중적 인 독자 중심 퍼즐, 농담, 비표준 디자인 및 레이아웃, 독자를 주어진 주제에 몰입시키는 매력적인 대화 스타일을 강조합니다.

모든 일반적인 재사용 솔루션이 디자인 패턴으로 간주 될 수 있기 때문에 "디자인 패턴"이라는 용어는 다소 모호합니다. 필자는 위에서 언급 한 주목할만한 책 중 하나, 특히 Gang of Four and Fowler 책에 설명 된 솔루션에 레이블을 적용하는 경향이 항상 나타났습니다. 디자인 패턴은 고유 한 개발 프로세스를 따르지 않으며, 막대한 재사용이 가능하고 식별하기 매우 어려운 일반적인 소프트웨어 솔루션입니다 .

그러나 두 책의 온라인 카탈로그를 특정 언어 책의 내용과 비교하면 해당 책이 종종 템플릿으로 사용되는 것을 알 수 있습니다. 따라서 두 책 모두 객체 지향 프로그래밍으로 제한되어 있지만 두 책 모두 표준 참조에 매우 가깝고 역사적 관점에서 GoF 책이 더 중요 합니다 .


2
+1. 실제로 나는 당신에게 +5를주고 싶었지만 아아 그것은 허용되지 않습니다.
Dipan Mehta

전체 패턴 지향 소프트웨어 아키텍처 시리즈는 서로 다른 유형의 시스템의 패턴에 관한 것입니다. – 볼륨 1은 도메인을 교차 절단하는 아키텍처 패턴 및 패턴에 관한 것입니다. 볼륨 2는 동시 시스템에 관한 것입니다. 4 권은 분산 시스템에 관한 것이고 5 권은 패턴 언어에 관한 것이며 다른 4 권에 대한 참조입니다. 의문의 여지가 있지만, Volume 5도 적용 할 수 있다고 생각하지만 너무 많은 시간을 소비하지는 않았습니다 ...
Thomas Owens

@Yannis이 언어는 일반적으로 정적 유형 언어를 기반으로합니다. 파이썬과 같은 동적 언어에 대한 좋은 책이 있습니까?
ravi404



23

헤드 퍼스트 디자인 패턴

어느 시점에서든 누군가가 당신과 같은 소프트웨어 디자인 문제로 어려움을 겪고 있습니다. 휠 (또는 더 나쁜 타이어 타이어)을 재발 명하고 싶지 않다는 것을 알고 있으므로 동일한 문제에 직면 한 사람들이 습득 한 교훈 인 디자인 패턴을 봅니다. 디자인 패턴을 사용하면 다른 사람의 모범 사례와 경험을 활용하여 다른 것에 시간을 할애 할 수 있습니다. 더 어려운 것. 더 복잡한 것. 더 재미있는 것.

중요한 패턴, 사용 이유, 사용시기, 사용 방법 (사용하지 않을 때)에 대해 배우려고합니다. 그러나 당신은 책에서 패턴이 어떻게 보이는지보고자하는 것이 아니라, "야생적으로"어떻게 보이는지 알고 싶을 것입니다. 그들의 본래 환경에서. 즉, 실제 응용 프로그램에서. 또한 Java API에서 패턴이 사용되는 방식과 사용자 고유 코드에서 Java의 내장 패턴 지원을 활용하는 방법을 배우고 싶습니다.

실제 OO 디자인 원칙과 상사가 상속에 대해 말한 모든 것이 잘못되었을 수있는 이유와 그 대신해야 할 일을 배우고 싶습니다. 다음에 디자인 패턴이없는 개울을 만들 때 이러한 원칙이 어떻게 도움이되는지 알고 싶습니다.

가장 중요한 것은 디자인 패턴의 "비밀 한 언어"를 배우고 싶어서 동료 (및 칵테일 파티 손님)가 자신의 명령, 외관, 대리 및 마티니 한 모금 사이에 공장. Singleton이 왜 그렇게 단순하지 않은지, 팩토리가 자주 오해되는 방식, Decorator, Facade 및 Adapter의 실제 관계에 대한 심층적 인 이해를 쉽게 이해할 수 있습니다.

헤드 퍼스트 디자인 패턴 , 당신은 실내 장식을 생각하면 "거래 공간"공연에서 뭔가의를 피하고 있습니다 ...


이. 그것은 매우 접근하기 쉬운 읽기이며 소프트웨어 엔지니어링에 완전히 접근하는 방식을 바 꾸었습니다.
GSto

2
전체 헤드 첫 번째 시리즈는 특히 개발자를 시작하는 데 좋습니다.
Thomas 주식

2
나는 책을 좋아하지만 절대로 덮개를 미워한다! 저의 프로그래머가 아닌 다른 동료가 저의 사무실을 걸어 다니면서 책을보고 "헤드 퍼스트 디자이너 패턴? 패션 비즈니스에 들어가고 있습니까?"
Pete

1
@Pete 왜 덮개가 더 많은 문제를 일으킬 수 있습니까? 그녀는 분명히 이중 생활을합니다. fishbowl.pastiche.org/2005/08/12/…
Gordon

10

그렇습니다. 디자인 패턴 에 대한 잘 알려진 책이 있습니다 : 디자인 패턴 : 재사용 가능한 객체 지향 소프트웨어의 요소들 그리고 저자들은 종종 "The Gang of Four"(GoF)라고 불리며 디자인 패턴에 관한 거의 모든 텍스트에서 참조됩니다.



이것은 디자인 패턴 에 관한 책 이 아닙니다 . 그것은의 카탈로그 패턴. 처음에는 디자인 패턴에 대한 짧은 소개가 있지만 소개가 충분하다고 생각하지 않습니다.
Jörg W Mittag

@ JörgWMittag 디자인 패턴을 만드는 독특한 프로세스는 없으며 디자인 패턴은 비교적 작은 재사용 솔루션입니다. 디자인 패턴은 일반적인 소프트웨어 개발 프로세스를 통해 만들어지며, 그 특징은 엄청난 재사용 가능성입니다. 유일하게 관련된 고유 한 프로세스는 솔루션을 디자인 패턴으로 식별하는 것이며 카탈로그는이를 정밀하게 수행합니다.
yannis

9

디자인 패턴 : 재사용 가능한 객체 지향 소프트웨어의 요소

대체 텍스트

에서 위키 피 디아 :

디자인 패턴 : 재사용 가능한 객체 지향 소프트웨어의 요소는 소프트웨어 디자인의 일반적인 문제에 대한 반복적 인 솔루션을 설명하는 소프트웨어 엔지니어링 책입니다. 이 책의 저자는 Grady Booch의 머리말과 함께 Erich Gamma, Richard Helm, Ralph Johnson 및 John Vlissides입니다. 저자는 종종 Gang of Four, GoF 또는 Go4라고합니다. 이 책은 두 부분으로 나누어 져 있으며, 처음 두 장은 객체 지향 프로그래밍의 기능과 함정을 탐구하고 나머지 장은 23 개의 고전적인 소프트웨어 디자인 패턴을 설명합니다. 이 책에는 C ++ 및 Smalltalk의 예제가 포함되어 있습니다.


3

최고의 디자인 패턴 웹 사이트 중 하나는 최초의 위키 인 Ward 's Wiki입니다. 좋은 시작 페이지는 http://c2.com/cgi/wiki?HistoryOfPatterns 를 참조 하십시오 .

1987 년 Ward와 Kent는 텍트로닉스의 반도체 테스트 시스템 그룹과 협의하여 설계 마무리에 어려움을 겪고있었습니다. 그들은 연구하고 있던 패턴을 시험해보기로 결정했습니다. 건물의 점유자가 건물을 설계해야한다고 알렉산더가 말했듯이, Ward와 Kent는 사용자 (트레이너와 현장 엔지니어)의 대표자들이 설계를 완료하도록했습니다.

Ward는 초보 디자이너가 Smalltalk의 강점을 활용하고 약점을 피하는 데 도움이되는 5 가지 패턴의 "언어"를 제시했습니다.

Ward와 Kent는 사용자가 디자인 한 인터페이스의 우아함에 놀랐습니다. 그들은 올랜도의 OOPSLA 87에서이 실험의 결과를보고했다. 그들은 패널 위치를 썼고 Norm Kerth의 워크샵에서 물건은 어디에서 왔습니까? 그들은 얼굴이 파랗게 될 때까지 패턴을 이야기하고 많은 동의를 얻었지만 더 구체적인 패턴이 없으면 아무도 서명하지 않았습니다.

한편 에리히 감마 (Erich Gamma)는 박사 학위 논문의 일부로 ET ++의 객체 지향 디자인에 대해 글을 쓰고 반성했습니다. Erich는 반복적 인 디자인 구조 나 패턴이 중요하다는 것을 깨달았습니다. 문제는 실제로 어떻게 캡처하고 의사 소통 하는가였습니다.

Bruce Anderson은 ErichGamma가 있었던 TOOLS 90에서 연설을했습니다. Erich는 연설을 좋아했습니다. Bruce는 EcoopOopsla90 (오타와)에서 논문을 주었고 Erich Gamma, Richard Helm 등이 건축 핸드북으로 Toof라는 BOF를 운영하여 다른 사람들이 패턴에 대해 토론했습니다. 리차드와 에리히가 처음 만났을 때, 재사용 가능한 OO 소프트웨어 작성의 핵심 아이디어에 대한 공통된 아이디어를 공유한다는 것을 깨달았습니다.

ECOOP'91 직전에 무더운 여름날 취리히의 옥상에 앉아 Erich Gamma와 Richard Helm은 결국 DesignPatterns가 될 패턴 카탈로그의 매우 겸손한 시작을 모았습니다.

우연히, Erich Gamma, Richard Helm, Ralph Johnson 및 John Vlissides가 모두 있었다. 그들은 나중에 Design Patterns 책 을 저술 한 Gang of Four 가되었습니다 ...


2

나는 생각 패턴을 리팩토링 은 특정 종로 / 코드는 GoF의 책의 패턴으로 리팩토링 할 수있는 방법에 대해 설명합니다 간단하기 때문에 유용 할 수 있습니다. 이것은 초기 학습 곡선을 극복하는 데 도움이 될 수 있습니다. 아 그리고 그것은 또한 '패턴 행복'에 대해 생각합니다 :)

패턴 지향 소프트웨어 아키텍처의 처음 세 권을 잘 읽어 볼 수도 있습니다.


1

디자인 패턴

이 튜토리얼 사이트에는 다음과 같은 하위 섹션이 포함되어 있습니다

  • 각 디자인 패턴의 의도
  • 디자인 패턴을위한 실제 세계 구조
  • 문제 진술
  • 문제에 대한 자세한 토론
  • 패턴에 도달하는 방법에 대한 점검표
  • 패턴에 도달하는 동안 경험의 규칙.
  • C #, C ++, Delphi, Java 및 PHP를 포함하는 디자인 패턴의 코드 스 니펫

이 사이트에는 안티 패턴, UML 및 리팩토링에 대한 가이드도 포함되어 있습니다.


SourceMaking 사이트는 언뜻보기에는 단순 해 보이지만 실제로는 훌륭한 참고 자료입니다. 디자인 패턴 외에도 개발, 아키텍처 및 프로젝트 관리 반 패턴 중 일부는 유쾌합니다. 리팩토링 된 솔루션은 실제로 중단없이 진행되는 회의를 저장하는 데 도움이됩니다. (나쁘지 않은 디자인 패턴 참조)
무엇이든

1

"디자인 패턴 : 재사용 가능한 객체 지향 소프트웨어의 요소"라는 원본 책은 객체 지향 디자인 패턴을위한 훌륭한 자료입니다.

거기에는 다른 많은 책들이 있습니다. 빠른 참조가 필요하고 GoF 책에 접근 할 수없는 경우, Wikipedia는 일반적으로 그와 다른 디자인 패턴에 대한 충분한 정보를 가지고 있습니다.

그것들은 내가 사용하는 주요 것들입니다. 또한 사람들은 프로젝트 관리와 같은 다른 것들에 패턴 형식을 적용하기 시작했습니다.

반 패턴에 대해 알고 싶다면 "반 패턴 : 위기에 처한 소프트웨어, 아키텍처 및 프로젝트 리팩토링"과 "리팩토링 : 기존 코드의 디자인 개선"이라는 두 권의 책이 있습니다. 코드 냄새, 반 패턴의 또 다른 이름.


1

Robert C. Martin의 "C #에서의 민첩한 원칙, 패턴 및 사례" Java 버전의 책이 있다고 생각합니다.

또한 패턴 자체는 아니지만 Domain Driven Design에는 전체 DDD 방식을 사용하지 않더라도 훌륭한 개념이 있습니다.

  * Ubiquitous Language
  * Code first approach (vs. DB first)
  * etc.

1

C ++의 디자인 패턴에 특히 관심이 있다면 Andrei Alexandrescu의 Modern C ++ Design 을 사용해보십시오 .

이 책은 C ++에서 Factory, Singleton 및 Visitor와 같이 일반적으로 사용되는 패턴을 구현하는 방법에 대해 설명합니다. 또한 스마트 포인터, 템플릿 메타 프로그래밍 및 정책 기반 클래스 디자인과 같은 매우 C ++ 관련 주제에 대해서도 설명합니다.

책 저자는 그의 권위있는 전문가 이며

템플릿 메타 프로그래밍을 통해 구현 된 정책 기반 디자인에 대한 선구적인 작업. 이러한 아이디어는 그의 책 Modern C ++ Design에 설명되어 있으며 프로그래밍 라이브러리 Loki에서 처음 구현되었습니다. 또한 MOJO 라이브러리에서 "생성자 이동"개념을 구현했습니다. 그는 "Generic <Programming>"이라는 제목으로 C / C ++ Users Journal에 공헌했습니다 .


1
그것이하는 일과 무엇이 유익한 지 더 자세히 설명해 주시겠습니까? "링크 전용 답변" 은 Stack Exchange에서 환영받지 못합니다
gnat

@ gnat : 이것은 어때?
Dima

글쎄, 최근 편집 내용이 확실히 나에게 개선 된 것처럼 보입니다. 대답의 독자는 아마에 대한 자세한 설명에서 도움이 될하지만 누가 이다 Aleksandresku
모기는

@ gnat : 그가 누구인지 분명히 알기 때문에 언제든지 내 답변을 편집하십시오.
Dima
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.