Menu
Coddy logo textTech

디자인 패턴 소개

Coddy Dart 여정의 객체 지향 프로그래밍 섹션에 포함된 레슨 — 110개 중 89번째.

디자인 패턴은 개발자들이 소프트웨어를 구축할 때 반복적으로 마주하는 일반적인 문제들에 대해 검증된 해결책입니다. 매번 바퀴를 다시 발명하는 대신, 이러한 확립된 템플릿을 적용하여 유사한 과제들을 일관되고 유지보수 가능한 방식으로 해결할 수 있습니다.

디자인 패턴을 레시피라고 생각해 보세요. 요리사가 매번 빵을 만드는 새로운 방법을 발명하지 않는 것처럼, 프로그래머도 수십 년 동안 다듬어진 패턴을 사용합니다. 이러한 패턴은 여러분이 이미 배운 OOP 개념(클래스, 상속, 인터페이스, 다형성)을 활용하며, 특정 문제를 해결하기 위해 이를 특정한 방식으로 결합합니다.

디자인 패턴은 일반적으로 세 가지 범주로 분류됩니다:

범주목적예시
생성(Creational)객체가 생성되는 방식Singleton, Factory
구조(Structural)객체가 구성되는 방식Adapter, Decorator
행위(Behavioral)객체가 통신하는 방식Observer, Strategy

앞으로의 레슨에서는 각 카테고리의 구체적인 패턴들을 배우게 될 것입니다. 각 패턴은 클래스의 인스턴스가 하나만 존재하도록 보장하거나, 정확한 클래스를 지정하지 않고 객체를 생성하거나, 객체가 다른 객체에 변경 사항을 알릴 수 있도록 하는 등 서로 다른 문제를 해결합니다. 각 패턴을 언제 그리고 왜 사용하는지 이해하는 것은 구현 방법을 아는 것만큼이나 중요합니다.

challenge icon

챌린지

쉬움

디자인 패턴이 카테고리별로 코드를 어떻게 구성하는지 보여주는 간단한 문제 해결 시스템을 만들어 봅시다! 다양한 소프트웨어 과제를 분류하고 어떤 유형의 패턴이 이를 해결하는 데 도움이 될 수 있는지 제안하는 구조를 만들 것입니다.

코드를 두 개의 파일로 구성합니다:

  • patterns.dart: creational, structural, behavioral 세 가지 값을 가진 PatternCategory라는 enum을 만듭니다. 각 값은 그 목적을 설명하는 String description 필드를 가져야 합니다:
    • creational: "Handles object creation"
    • structural: "Handles object composition"
    • behavioral: "Handles object communication"
    또한 소프트웨어 과제를 나타내는 Problem이라는 클래스를 만듭니다. 이 클래스는 String name 필드와 PatternCategory category 필드를 가져야 합니다. [name] -> Use a [category description] pattern 형식의 문자열을 반환하는 suggest() 메서드를 포함하세요.
  • main.dart: patterns 파일을 임포트하고 서로 다른 문제가 어떻게 서로 다른 패턴 카테고리에 매핑되는지 보여줍니다. 세 개의 Problem 인스턴스를 생성합니다:
    • 이름이 Ensure single database connection이고 카테고리가 creational인 문제
    • 이름이 Make old API work with new system이고 카테고리가 structural인 문제
    • 이름이 Notify users when data changes이고 카테고리가 behavioral인 문제
    각 문제에 대해 suggest()를 호출하고 결과를 출력합니다.

이 챌린지는 디자인 패턴이 해결하려는 문제의 유형에 따라 어떻게 분류되는지 이해하는 데 도움이 됩니다. 이는 향후 레슨에서 특정 패턴을 배우기 시작할 때 매우 중요한 개념입니다!

예상 출력:

Ensure single database connection -> Use a Handles object creation pattern
Make old API work with new system -> Use a Handles object composition pattern
Notify users when data changes -> Use a Handles object communication pattern

치트 시트

디자인 패턴은 일반적인 프로그래밍 문제에 대한 검증된 해결책입니다. 이는 OOP 개념(클래스, 상속, 인터페이스, 다형성)을 특정한 방식으로 결합한 템플릿입니다.

디자인 패턴은 세 가지 카테고리로 분류됩니다:

카테고리목적예시
생성(Creational)객체가 생성되는 방식Singleton, Factory
구조(Structural)객체가 구성되는 방식Adapter, Decorator
행위(Behavioral)객체가 통신하는 방식Observer, Strategy

직접 해보기

import 'patterns.dart';

void main() {
  // TODO: 세 개의 Problem 인스턴스를 생성하세요:
  // 1. name: "Ensure single database connection", category: creational
  // 2. name: "Make old API work with new system", category: structural
  // 3. name: "Notify users when data changes", category: behavioral

  // TODO: 각 problem에 대해 suggest()를 호출하고 결과를 출력하세요
}
quiz icon실력 점검

이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.

객체 지향 프로그래밍의 모든 레슨