Software World 외부인에게 디자인 패턴을 설명하는 방법


10

조카에게 디자인 패턴을 설명하고 싶지만 항상 그렇게하는 데 어려움을 겪고 있습니다. 디자인 패턴에 대한 명확한 이해가 부족하기 때문입니다. MVC, Singleton, Factory, Repository 등과 같은 패턴을 10 세의 어린이조차도 이해할 수있는 간단한 용어로 설명하는 방법을 제안하십시오.

패턴을 이해하는 데 도움이되는 예제를 찾고 있습니다. 장난감, 영화, 음악 등이있는 예


2
디자인 패턴은 소프트웨어의 범주 이론이 수학에 관한 것입니다. . . 적어도 그것이 내가 수학자에게 설명하는 방법입니다.
Eric Wilson

퍼즐 책의 답변 부분을 읽는 것과 같습니다. 당신은 모든 퍼즐에 대한 답을 알지 못하지만 대부분의 경우 답을 찾지 못한 퍼즐의 시작 위치를 알 수 있습니다.
StuperUser

답변:


7

Wikipedia 기사 의 시작 은 아마도 좋은 시작 이라고 생각합니다 .

A design pattern is a general reusable solution to a commonly occurring problem.

아니면 특정 패턴의 세부 사항을 설명하고 싶습니까?


세부 사항을 찾고
gizgok


2
@gizgok : "사양"? 말도 안돼. 무엇을 더 원하는지 자세히 지정하십시오. "구체적인 것"을 원하는 것은 모호합니다.
S.Lott

5

설명하려는 이유에 따라 다릅니다. 패턴에 대한 아이디어를 설명하고 싶다면 A Pattern Language의 아키텍처 예제를 사용합니다. 이 연구자들은 건물이나 방의 특정 측면으로 인해 사람들이 전 세계의 다양한 문화, 건축 자재 및 다양한 종류의 이웃에서 그 건물이나 방에서 생활하거나 일하는 것을 즐겼습니다. 예를 들어 "양면 조명"과 같습니다. 두 개의 벽에 창문이있는 방은 하나가 있거나없는 방보다 훨씬 좋습니다. 소프트웨어에도 이와 같은 패턴이 있습니다. 다른 프로그래밍 언어를 사용하더라도 일부 패턴이 반복됩니다. 심지어 게임, 재무 계산을위한 것, Facebook 내부의 엔진 등 매우 다른 소프트웨어에서도 마찬가지입니다.

그런 다음 특정 패턴에 대해 이야기하고 싶다면 (왜 그런지, 10 살짜리까지) 어떻게 작동하는지 설명하기 전에 그 패턴이 어디에 사용되는지에 대한 예를들 수 있습니다. 따라서 컴포지트를 사용하면 컨테이너의 무게와 모든 컨테이너의 총계 및 보유한 물건을 합산하여 여행 가방의 무게를 알아낼 때 명시적인 재귀를 피할 수 있지만 회사의 급여 부담을 계산하는 데에도 효과적입니다. 또는 제조 단지의 용량. 그것이 열 살짜리에게 조금 흥미 롭다면 어떻게 작동하는지 설명 할 수 있습니다.


1
coz 10 세의 노인은 해커가되고 싶어
gizgok

2

디자인 패턴이 존재하기 때문에 일부 사람들은 소프트웨어가 서로 잘 작동 할 수있는 방법이 있다는 것을 깨달았고 통찰력을 공유하기를 원했기 때문에 존재합니다.

사람들의 그룹을 생각하는 것과 같은 방식으로 디자인 패턴을 생각할 수 있습니다. 예를 들어, 때때로 모든 회의를 용이하게하는 사람이 있습니다. 이는 객체 간의 상호 작용을 용이하게하는 컨트롤러 패턴과 같습니다.

또는 방 앞의 누군가가 사람들이 손을 올리는 것을 지켜보고 다른 사람이들을 수 있거나 응답하여 반응 할 수 있도록 질문을 반복하는 청중을 상상해보십시오. 이는 주제 / 관찰자 패턴과 유사합니다.

번역가 (어댑터 패턴), 경비원 (프록시), 현장 전문가 (싱가포르) 또는 자동차 점검중인 사람 (유효 기)과 같은 패턴이 있습니다.

객체와 사람의 차이점은 원하는만큼 많은 객체를 만들고 여러 사본을 가질 수 있다는 것입니다. 따라서 소프트웨어가 너무 복잡하지 않도록 개체의 책임을 이해하고, 책임을 작게 유지하고, 작업을 복제하지 않도록해야합니다. 전문가들은 이것에 대해 많은 경험을 가지고 있으며, 소프트웨어가 효과적으로 상호 작용하는 방식에 대한 이러한 패턴을 제공하여 우리가하려는 일에 가장 적합한 은유가 무엇인지 결정하고 가장 적절한 방식으로 협업 할 소프트웨어 조각.


1

요리 기술이 식사 / 접시를 만드는 데 사용되는 것처럼 시스템의 개별 구성 요소를 만드는 데 사용된다고 말합니다. 감자, 고기 및 야채와 함께 저녁 식사를하고 있다고 상상해보십시오. 감자를 삶고 으깬 다음 고기를 굽고 야채를 찜하기로 결정합니다. 그릴 디자인 패턴을 사용하여 감자의 고기, 종기 및 매쉬 패턴을 요리하고 야채의 증기 패턴을 요리합니다.


1

이러한 디자인 패턴의 대부분은 객체 지향 디자인의 일부입니다. OOD를 이해하지 못하는 사람에게는 실제로 설명 할 수 없습니다. 주어진 패턴으로 달성 한 목표를 설명 할 수는 있지만 어떻게 작동하는지 또는 왜 필요한지는 설명 할 수 없습니다. 물론 OOD 전체를 설명하지 않는 한.


1
대부분의 디자인 패턴은 적절한 추상화를 사용하여 특정 문제를 해결하는 방법에 대한 지침입니다. 이것은 실제로 객체 지향 디자인의 일부가 아닙니다.
Pemdas

@Pemdas : 공장을 예로 들어 보자. OOP 외부에서는 어떤 의미가 있습니까?
vartec

OOP는 패턴에 대해 가장 많이 이야기하는 곳이지만 다른 언어에는 고유 한 패턴 세트가 있습니다. 예를 들어 Monads (종종 기능적 언어에서 발견되고 OOP에서 수행 될 수 있음)는 자체 패턴이며 다른 패턴을 활성화합니다. 또한 여기에서 언급했듯이 디자인 패턴은 Architecture에서 프로그래밍되었습니다.
Charlie

디자인 패턴은 OOP와 관련이 없습니다. 디자인 패턴은 계속해서 발생하는 문제와 문제를 처리하기 위해 개발 된 전략에 관한 것입니다. 전략이 반복적으로 개발되면 패턴이있는 것입니다. 전략이 반복적으로 작동하면 디자인 패턴이라고하고, 반복적으로 실패하면 안티 패턴이라고합니다. 디자인 패턴에 대한 학습은 과거에 반복적으로 학습 한 학습 전략을 의미합니다. 내가 프로그래밍을 전혀 언급하지 않은 방법을 보아라.
gnasher729 2016

0

아키텍처에 대한 디자인 패턴이 먼저 설명되었습니다. 광장의 위치, 건물 및 기타 일반적으로 반복되는 레이아웃과 같은 것들. 거기서 시작할 수 있습니다. 정문과 같은 것은 거리, 방의 구석을 향한 문 및 기타 생각할 수있는 모든 것을 향합니다. 원래 저자의 패턴은 널리 사용되지 않았습니다. 그는 패턴 자체로는 충분하지 않다고 말한 것으로 알려졌다.

방 주위를 움직이는 것에 대해 토론하십시오. 의자를 문 앞에 놓으십시오. 창문이나 문을 다른 곳으로 옮기는 것이 합리적입니까? 그 이유는 무엇?

테이블에 장소를 설정하는 것과 같은 것을 시도하십시오. 크기에 따라 물건을 정리해보십시오. 정상적인 패턴이 아니며 작업하기가 어렵습니다. 정상적으로 설정하십시오. 주스의 빠른 유리에 적합한 레이아웃입니까? 패턴이 항상 적절한 것은 아닙니다.

우리는 항상 패턴으로 살아갑니다. 서너 권의 책을 가져 가서 책을 살펴보십시오. 레이아웃에는 분명한 패턴이 있습니다. 제목 페이지, 목차, 내용 및 색인. 모든 구성 요소가 필요한 것은 아니지만 구성 요소를 제자리에서 보는 것이 혼란 스러울 수 있습니다.


0

디자인 패턴은 지그가 목공에 사용하는 소프트웨어 개발입니다. 대규모 프로젝트에서 잘 알려진 '잘라 내기'를 수행 할 수있는 도구입니다.

컷을 만들기 위해 지그가 필요 하지 않으므로 일부 상황에서는 더 쉽습니다.


0

나는 다른 대답이 일반적인 경우를 의미한다고 생각하지만 OP는 세부 사항을 묻는 의견을 제시했습니다 (따라서 별도의 대답이 필요하다고 느꼈습니다). 슬프게도 리포지토리 패턴에 익숙하지 않지만 다른 것을 찌를 것입니다. 일반적으로 이러한 문제를 설명하는 가장 좋은 방법은 해결하려는 문제, 해결하려는 이유 및 문제를 해결하는 방법을 통하는 것입니다.

하나씩 일어나는 것

이 패턴은 하나만 있다는 것을 보장하고자 할 때 사용됩니다. 이 패턴은 다른 사람들이 우리의 객체를 만들지 못하게함으로써 달성됩니다.

위키 백과

MVC

이 패턴은 그와 함께 제공되는 모든 이점을 모듈 식으로 유지하는 데 사용됩니다. 보기는 "사용자 인터페이스"이고 모델은 데이터 (비즈니스 로직 포함)이며 컨트롤러는 사용자 작업이 모델을 조작하는 방법입니다. 이 모듈 방식을 사용하면 동일한 모델로 여러 뷰 / 컨트롤러를 사용할 수 있습니다. 지나치게 단순화 된 예제의 경우 웹 사이트, 데스크톱 응용 프로그램 및 iPhone ( "보기 + 컨트롤러")을 통해 내 이메일 ( "모델")과 상호 작용할 수 있습니다. 공유 그룹 사서함이 있으면 전자 메일을 보내지 않는 컨트롤러를 만들고 동일한 응용 프로그램보기와 전자 메일을 재사용 할 수 있습니다. (예, 지나치게 단순하지만 희망적으로 이해할 수 있음)

또한,이 잘 정의 된 우려의 분리로, 하나의 변경 (이상적으로)은 다른 변경을 요구하지 않습니다. 구체적인 예, Oracle 데이터베이스 대신 MySQL 데이터베이스에 대한 읽기 / 쓰기를 지원해야하는 경우 모델 만 변경하면되고 뷰 / 컨트롤러는 변경되지 않습니다.

위키 백과

공장

팩토리라는 유사한 패턴이 많으므로 여기에서주의해야합니다 ... 추상 팩토리 에 대해 이야기 할 것이지만 팩토리 메소드 패턴 도 있다는 것을 알아야 합니다.

기본적으로 수행하려는 단계를 알 때 추상 팩토리를 사용하지만 이러한 개별 단계를 수행하는 방법에 대한 단계는 다를 수 있습니다. 예를 들어, 버튼이있는 대화 상자를 만들어야하는 응용 프로그램을 구축 할 수 있습니다. 내 코드가 가상의 UI 팩토리를 사용하도록하여 Windows 대신 Mac 또는 Linux에서 코드가 필요한 경우 다른 팩토리를 제공하면 나머지 코드는 변경되지 않습니다. 좀 더 예리한 예를 들어, Web Factory를 가질 수 있고 갑자기 내 데스크탑 응용 프로그램을 백업하는 대부분의 코드가 이제 풍부한 웹 사이트를 제공하고 있습니다. :)


0

해커가되고 싶은 10 살짜리 아이에게.

당신이 해킹 할 때 세계 최고의 해커들이 당신 옆에 앉아있을 수 있다고 상상해보십시오. 그리고 지금은 그들이 말할 것입니다. "당신이 이런 식으로하면 ... [삽입 패턴] ... 그러면 코드가 [더 빠르거나 안전하고 유지 보수가 쉬워집니다] "

이제 그녀가 그 아이디어에 관심이 있다고 가정합니다. 나는 그녀의 "해킹 작업"을 설정 한 각 패턴을 설명하는 데 시간을 낭비하지 않을 것입니다. 그런 다음 디자인 패턴을 적용하고 값을 설명합니다. 좋은 자원과 그것이 어디로 가는지보십시오.

그러나 대부분 그녀는 멘토링을 통해 그들을 배워야합니다.

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