디자인 패턴 학습 / 구현 (초보자 용) [닫기]


85

나는 혼란스러워하는 초보자이자 취미 프로그래머이기 때문에 내 질문이 약간 틀리거나 이해가되지 않으면 용서해주세요.

나는 디자인 패턴의 사용과 관련된 많은 질문을 보았고, 누군가가 디자인 패턴에 대해 배우고 구현할 수있는 좋은 리소스를 가지고 있는지 궁금합니다. 나는 일반적인 아이디어를 이해하고 몇 가지 (Singletons, Factory methods)를 사용하는 방법 /시기를 알고 있지만 누락 된 것을 알고 있습니다.

(중요한 경우를 대비하여 선호하는 언어는 C #이지만 다른 언어의 예제에서 배울 수 있습니다)

답변:


84

헤드 퍼스트 디자인 패턴

대체 텍스트

그리고 Design Pattern Wikipedia 페이지 는 초보자를위한 최고의 리소스입니다. FluffyCatJavaPHP의 디자인 패턴에 대한 또 다른 좋은 무료 온라인 리소스입니다 .

네 책의 갱은 이후 갈 곳이지만, 다른 자원에서 꽤 확고한 이해를 가지고 때까지 기다릴 것, 그래서 그것은 상당히 고급입니다.



5
나는 그 책을 봤다 ... 싫어했다. 그래서 저는 GoF 책을 집어 들었고 그로부터 디자인 패턴에 대해 모든 것을 배웠습니다. 약간 건조했지만 훨씬 더 유익했습니다.
Thomas Owens

1
나는 처음에 헤드 퍼스트 책이 완전히 구역질을 줄 것이라고 생각했습니다. 나는 위험을 감수하고 그것을 샀다는 것이 매우 기쁩니다. Imo, 4 인조 = 불필요한 마조히즘 선택.
codeinthehole

2
나는 첫 번째 책이 완전히 메스꺼움을 느꼈다. "재미"하는 데 너무 많은 시간을 소비합니다. 핵심 아이디어를 제대로 전달하지 못한다고 생각합니다. 그것을 읽는 것은 누군가의 아빠가 멋지도록 노력하는 것을 보는 것과 같습니다. 그러나 GoF 책은 다른 극단이므로 모든 사람을위한 것은 아닙니다.
Draemon

2
@Bill : 알아요,하지만 @Thomas와 @Draemon의 의견에 동의합니다. 프로그래밍 클래스의 알고리즘을 위해이 시리즈의 책을 추천 한 비 프로그래밍 지향적 친구들은 페이지 당 정보의 양이 더 많았 기 때문에 그들을 싫어하고 "건조한"책에 올랐습니다. 그것은 단지 선호의 문제 일뿐입니다. 나는 어릴 때부터 기술 도서를 읽고 고도의 기술 고등학교에 다녔습니다. 그래서 "마른"책을 읽었을 것입니다. 나는 반려 동물이 나에게 말을 걸지 않고 옆으로 쫓아가는 책이 아니라 내가 동화 할 수있는 평범한 정보를 선호한다.
Esteban Küber

27

디자인 패턴은 여러 가지 이유로 훌륭합니다.

  1. 일반적인 문제를 해결하기위한 시작을 제공합니다.
  2. 개발자에게 매우 간결한 방식으로 문제를 해결하는 특정 방법에 대해 이야기 할 수있는 어휘를 제공합니다.
  3. 디자인 패턴을 알고 있고 솔루션에서 디자인 패턴을 사용하는 개발자와 함께 작업하면 솔루션을 훨씬 더 빨리 이해할 수 있습니다.

하지만 목표가 디자인 패턴을 배우는 것이라면 기본을 놓치고 있다고 생각합니다. 모든 디자인 패턴은보다 일반적인 원칙을 기반으로합니다. 높은 응집력, 낮은 커플 링 개방 폐쇄 원리, DRY, Liskov 대체 원리 등. 이러한 기본 사항에 대해 다음 책을이 순서대로 읽었습니다.

  1. Head First 객체 지향 분석 및 설계 (Head First) [일러스트] (페이퍼 백)
  2. UML 및 패턴 적용 (하드 커버)
  3. C #의 Agile Principles, Patterns, Practices (Robert C. Martin 시리즈) (하드 커버)

그 후 네 가지 디자인 패턴의 기본 갱단에 대한 준비가 완료되었습니다.

  1. Head First Design Patterns (Head First) [ILLUSTRATED] (페이퍼 백)
  2. 성경
  3. 멋진 웹 사이트 (아무것도 사지 마세요, 가치가 없습니다) http://dofactory.com/Patterns/Patterns.aspx (이 사이트의 일부 구현은 토론 할 가치가 있습니다

다음 단계:

  1. 엔터프라이즈 애플리케이션 아키텍처의 패턴 (Addison-Wesley Signature Series) (하드 커버)
  2. POSA 책

그리고 항상 기억하십시오 : 패턴은 목표가 아닙니다!


2
OO의 기본 (캡슐화, 상속, 다형성 등)은 디자인 패턴을 배우기위한 지식으로 충분하다고 생각합니다. 학습 패턴을 통해 다른 원리 (고 응집, 저 결합 개방 폐쇄 원리, DRY, Liskov 치환 원리 등)를 배울 수 있습니다.
Bill the Lizard

OO의 기초만으로 디자인 패턴을 배울 수 있다는 데 동의합니다. 그러나 그런 다음 패턴을 작동시킬 수는 있지만 이것이 왜 좋은 디자인인지, 어떤 절충안을 만들었으며 패턴을 어떻게 변형시킬 수 있는지 아직 완전히 이해하지 못합니다.
KeesDijk

20

나는 것을 추가 할 것입니다 디자인 패턴은 은 "네 명"에서 예약 심각 디자인 패턴에 관심있는 누군가를위한 성경입니다.


12
아니면이 : 네 책의 갱 읽어했습니다 그들의 프로그래머 친구에게하고 싶은 사람을위한
데이브 마클

14

내 팁 :

다른 출처의 패턴에 대해 많이 읽으십시오.

현재 작성중인 모든 코드에 가능한 한 많은 패턴을 적용하려고하면 좋은 결과를 얻을 수 없습니다. 대신 정보가 잠시 동안 두뇌에 머물게하십시오 (읽기 : 몇 달).

갑자기 문제 나 코드 조각에 걸려 넘어지고이 특정 문제에 대한 해결책으로 작동 할 수있는 무언가를 보았다는 것을 막연하게 기억하게 될 것입니다. 이제 생각하고있는 패턴의 세부 사항을 찾아 적용 해 볼 시간입니다.

어쨌든 그것이 나를 위해 일한 것입니다.


9

디자인 패턴

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

  • 각 디자인 패턴의 의도
  • 디자인 패턴의 실제 구조
  • 문제 문
  • 문제에 대한 자세한 논의
  • 패턴에 도달하는 방법에 대한 체크리스트
  • 패턴에 도달하는 동안 경험 규칙 .
  • C #, C ++, Delphi, Java 및 PHP 를 포함하는 디자인 패턴에 대한 코드 조각

이 사이트에는 Anti Patterns , UMLRefactoring 에 대한 가이드도 포함되어 있습니다 .


웹 사이트가 매우 유용하다는 것을 알았습니다. 훌륭하고 명확한 예.
Augustas




4

아래에 제공된 URL 인 DNRtv의 Demystifying Design Patterns에 대한 Jean Paul Boodhoo의 5 형론 (?)을 살펴 보는 것이 좋습니다. 비디오 캐스트는 Singleton, Abstract Factory에 대해 다룹니다. 차이점은 그가 이론을 논의하면서 코드를 볼 수 있다는 점입니다. 비오는 평일에 점심을 먹으면 좋습니다.

http://www.dnrtv.com/default.aspx?showNum=63 http://www.dnrtv.com/default.aspx?showNum=65 http://www.dnrtv.com/default.aspx?showNum= 68 http://www.dnrtv.com/default.aspx?showNum=71 http://www.dnrtv.com/default.aspx?showNum=92


DnrTV가 다운되었습니다! Boodhoo의 스크린 캐스트가 유익하기 때문에 너무 부끄러운 일입니다. 다른 곳에서 호스팅 된 비디오를 본 적이 있습니까? 비디오 파일이 있으십니까? 온라인 상태로 유지해 드리겠습니다.
Stephan Luis

4

위의 주석에 대한 주석입니다.

GOF 패턴에 대한 빠른 참조

다음은 dofactory.com/patterns/patterns.aspx 를 시작할 수있는 좋은 곳 입니다. 해당 구현과 함께 각 패턴에 대한 링크를 찾을 수 있습니다.

그러나 이것이 GOF 패턴이라는 것을 기억하십시오. OOAD에 대한 충분한 전문 지식을 얻은 후에는 고급 패턴도 읽고 이해해야 할 수 있습니다. Head First Design Patterns는 좋은 시작이며, 약간의 진전을 이루고 나면 Martin Fowler의 Enterprise Application Architecture Patterns를 사용하십시오.

디자인 패턴 적용-사고 과정

또 다른 주요 측면-디자인 패턴을 적용하는 것은 아는 것만 큼 중요합니다. 이 기사를 읽는 것도 도움이 될 것입니다.

디자인 패턴 적용하기 파트 I

디자인 패턴 적용 2 부

도움이 되었기를 바랍니다


3

Head First Design Patterns는 이미 언급 한 다른 사람들과 마찬가지로 좋은 패턴입니다. 이 외에도 물론 원본 책과 C # 디자인 패턴. 또한 이미 언급 된 좋은 웹 사이트가 있습니다.

자가 학습 외에도 해당 지역 의 패턴 스터디 그룹 을 시작하거나 참석하는 것이 좋습니다 . 패턴 을 연구하기위한 설명과 훌륭한 순서는 디자인 패턴 에 대한 학습 가이드를 참조하십시오 . 우리는이 작업을 수행했으며 지금만큼 이해하지 못할 것이라고 솔직하게 말할 수 있습니다. 다른 관심있는 사람들과의 주간 회의는 디자인 패턴과 같은 추상적 인 것을 배울 때 놀라 울 정도로 훈련을받습니다.

행복한 공부!


3

책에 돈을 쓰기 전에 Wikipedia의 우수한 디자인 패턴 페이지를 추천 합니다. 또한 Google에서 '디자인 패턴 스크린 캐스트'를 검색하거나 YouTube 에서 '디자인 패턴'을 검색합니다 . 동일한 정보를 다르게 제공하면 종종 페니 하락에 도움이됩니다.

The Gang of Four 책은 가장 잘 알려진 패턴에 대한 결정적인 텍스트이지만 읽기가 쉽지 않으며 C ++ 예제를 사용하여 모든 사람이 좋아하는 것은 아닙니다.

헤드 퍼스트 디자인 패턴의 텍스트는 훨씬 더 접근하지만 네 패턴의 갱의 부분 집합이 포함되어 있습니다.

가장 중요한 것은 특정 패턴이 유용한 위치와 이유를 이해하는 것입니다. 그런 다음 웹에서 선택한 언어로 구현 예제를 검색하고 "얻을"때까지 실험하십시오. 다음으로 이동하기 전에 한 패턴을 이해하십시오. 누구나 다른 패턴보다 일부 패턴을 더 잘 이해합니다 (그리고 덜 알려진 패턴이 수백 개 있습니다).

계속 연결하세요.



2

Martin Fowler의 엔터프라이즈 애플리케이션 아키텍처 패턴 (하드 커버)

패턴으로 리팩토링 (하드 커버) by Joshua Kerievsky

지속적인 통합 : 소프트웨어 품질 향상 및 위험 감소 (페이퍼 백) by Paul Duval et.al.

Beyond Software Architecture : Create and Sustaining Winning Solutions (Paperback) by Luke Hohmann


2

디자인 패턴은 라이브러리 기능과 비슷합니다. 이에 대해 읽고 문제가 발생하면 디자인 패턴이 "Toolchest"에 있습니다. 원래 "Gang of four"디자인 패턴 이후에 패턴 화 된 디자인 패턴 책이 많이 있습니다.

모든 프로그래머에게 Fowler의 Refactoring 책은 절대적인 최소 요구 사항이라고 생각합니다.


POSA 책은 "GOF 이후에 패턴 화"된 책이 아니 었습니다. GOF가 처음으로 출판되었습니다. 동시에 제작되었습니다.
Tim

1
혼동을 피하기 위해 대부분의 디자인 패턴은 라이브러리에서 구현되지 않는다고 말하고 싶습니다. 라이브러리 클래스를 함께 결합하여 많은 패턴이 형성됩니다.
Bill the Lizard

도서관에서 할 수있는 것처럼 들리게 만들었습니다. 죄송합니다. 설명해 주셔서 감사합니다, Bill. 디자인 패턴은 일반적으로 LIKE 라이브러리이지만 서로 알려지지 않은 클래스가 상호 작용하는 다른 방식과 같이 일반적으로 라이브러리에서 PUT 할 수없는 것입니다.
Bill K


2

원본 디자인 패턴 책은 모든 프로그래머가 반드시 읽어야하는 책입니다.

레이아웃, 명확성, 통찰력, 깊이 등 모든 수준에서 훌륭한 책입니다. 이 책은 처음에 처음부터 끝까지 읽은 다음 말 그대로 안을 알 때까지 참고 자료로 사용하는 훌륭한 책 중 하나입니다.

Wikipedia 페이지 에서 시작할 수 있지만 훌륭한 책으로 자신을 대할 수도 있습니다.


2

Craig Larman의 UML 및 패턴 적용 . 분석, 설계의 기초부터 시작하여 간단한 사례 시나리오를 사용합니다. 대부분의 기본 패턴을 간단한 방법으로 소개합니다.


2

디자인 패턴에 대해 읽으면 Java에 몇 가지 구현 된 패턴이 있음을 알 수 있습니다.

모든 프레임 워크의 소스를 살펴보고 디자인 패턴에 대한 정보를 수집 할 수 있습니다. 개인적으로 나는 그것들이 내 코드에 완벽하게 들어 맞지 않는다고 생각한다. 때로는 책과 튜토리얼의 예제가 특히 고독한 코더에게 조금 이상화되어 보인다.

디자인 패턴은 게으른 코더를위한 것이 아닙니다.


2

저와 제 동료들은 패턴 스터디 그룹 에 이어 디자인 패턴을 연구 합니다. 그들은 우리가 순서대로 배워야 할 각 패턴의 목록을 준비하고 그룹에서 더 많은 토론을 할 수있는 시작 질문을 가지고 있습니다.


1

나는 또한 패턴으로 리팩토링을 하는 것이 좋습니다. Head First Design Patterns를 읽은 .

참고 : 코드 예제는 Java로되어 있지만 C # 예제와 매우 유사해야합니다.


1

경험이 거의없는 사람이 디자인 패턴을 너무 깊이 파고 드는 것은 나에게 너무 의미가 없습니다. 그것들이 존재한다는 것을 아는 것은 좋지만이 시점에서는 디자인 패턴에 대해 배우는 것보다 다른 것에 더 집중해야합니다.

그것들은 문제의 맥락에서 유용합니다.-초보 / 초보 개발자를위한 개념으로서 그것들은 언제 어디서나 사용해야한다는 것을 아는 형태를 제외하고는 실질적인 가치가 아닙니다.

편집 명확하게하기 위해-많은 디자인 패턴은 일부 도메인에서 발견 된 문제의 결과입니다. 새로운 프로그래머는 일부 문제 집합에 사용할 디자인 패턴을 거의 알 수 없습니다 (IMO). CS 연구에서 알고리즘이 흩어져있는 것처럼 패턴과 그 이점으로 할 수있는 일에 대한 이해가 필요하지만, 사람이 여전히 hello world를 구축하거나 stl을 발견 할 때 디자인 패턴에 대한 실질적인 필요가 없습니다. 패턴은 훌륭합니다. 그러나 그것들은 은총이 아닙니다.

(Case (도구)도 아니고 UML도 아니고 SCRUM도 아니고 TDD도 STL도 Java도 XML도 아닙니다.) 이들은 모두 우리 직업의 한 측면이며 이러한 주제를 두 번째 주제로 취급합니다. 오는 것은 순진합니다.


그러나 패턴에 대해 모르면 특정 문제를 해결하는 패턴이 있는지 알 수 없습니다. 예, 초보자로서 패턴이 필요하지 않을 것 같지만 패턴이 필요하기 전에 패턴을 배우는 것이 중요합니다.
Elie

내 게시물에서 다룬 것 같아요 ...
Tim

당신은 그들이 존재한다는 것을 아는 것 이상을 가져야합니다 .... 당신은 그들이 어떻게 작동하는지 그리고 그들이 사용되는 상황의 종류를 알아야합니다. 그것은 피상적 인 지식보다 조금 더 많습니다. 패턴을 사용하는 데 몇 년이 걸릴 수 있지만 사용하면 패턴을 배울 때가 아닙니다.
Elie

그래서 초보자가 수십 개 이상의 패턴을 배우고 이해해야한다고 말하는 건가요? 그동안 테이블에서 나오는 것은 무엇입니까? 나는 패턴에 대해 논쟁하지 않습니다. 또한 패턴 JIT의 특성을 배우는 것이 나쁜 것이라고 생각하지 않습니다. 다른 것들 IMO 이전의 학습 패턴은 유용하지 않습니다
Tim

1

패턴은 프로그래머가 추상적 인 디자인에 대해 이야기하는 데 사용하는 고급 어휘로 구성됩니다. 추상 솔루션을 재사용하는 경우 이름으로 참조하는 것이 도움이됩니다. 패턴을 발명하는 경우, 이름이 지정되지 않았는지 확인하기 위해 약간의 검사를 수행하는 것이 전문적입니다. 이름이 지정된 경우 설명이 유용 할 수 있습니다.

조금이라도 코딩을하면 이전에 코딩했던 것과 비슷한 것을 작성하는 것을 알게 될 것입니다. 이것은 패턴입니다. 작은 패턴이라도 주목할 가치가 있습니다. 더 나은 패턴이 있습니까? 더 큰 문제를 해결하기 위해 특정 작은 패턴이 함께 협력하는 것을 보십니까? 다음에 더 큰 문제를 풀고 싶을 때 전체 패턴이 하나의 덩어리로 떠 오릅니다. 세부적인 코드 라인을 다듬는 것은 기계적인 일이됩니다.

패턴을 더 많이 알아 차릴수록 프로그래밍이 쉬워지며 다른 프로그래머가 작업 한 가장 크고 최고의 패턴을 더 많이 인식하게 될 것입니다. MVC 패턴을 마스터 해보십시오. 어떤 식 으로든 변형은 사소한 디자인 결정에서도 모든 곳에서 나타납니다.


1

개념을 이해 한 후에는 Eclipse 소스 코드 또는 디자인을 살펴보고 이러한 패턴에 대한 정말 좋은 예를 많이 살펴보십시오 (놀랍지 않게 Gamma는 디자이너 중 하나였습니다).


당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.