Menu
Coddy logo textTech

디자인 패턴 소개

Coddy Java 여정의 객체 지향 프로그래밍 섹션에 포함된 레슨. 87개 중 64번째.

Design patterns는 소프트웨어를 구축할 때 개발자가 반복해서 마주치는 일반적인 문제에 대한 검증된 해결책입니다. 매번 바퀴를 새로 발명하는 대신, 오랜 시간 검증된 이러한 템플릿을 적용하여 반복적으로 발생하는 설계 문제를 해결할 수 있습니다.

디자인 pattern을 청사진이라고 생각해 보세요. 디자인 pattern은 복사하여 붙여 넣을 완성된 코드를 제공하지 않지만, 특정 유형의 문제를 해결하기 위해 classes와 objects를 어떻게 구조화해야 하는지 설명합니다. 여러분이 배우게 될 pattern은 이미 익힌 OOP 개념인 상속, interface, 다형성, 그리고 composed를 활용합니다.

Design pattern은 세 가지 주요 Category로 나뉩니다:

Category목적예시
CreationalHow object가 created되는 방식Singleton, Factory, Builder
구조적How object가 composed되는 방식Adapter, Decorator, Composite
BehavioralHow object가 communicate하는 방식Observer, Strategy, Command

디자인 패턴을 배워야 하는 이유는 무엇일까요? 디자인 패턴은 다른 개발자들과 공유하는 어휘를 제공합니다. "여기에는 Factory를 사용하자"라고 말하는 것만으로도 복잡한 아이디어를 즉시 전달할 수 있습니다. 또한 "구현이 아니라 interface를 대상으로 프로그래밍하라"와 같은 원칙을 적용하여 더 유연하고 유지 관리하기 쉬운 코드를 작성하는 데도 도움이 됩니다.

다가오는 수업에서는 Singleton 및 Factory와 같은 생성 patterns부터 시작하여 Observer 및 Strategy와 같은 행동 patterns로 넘어가면서 여러 필수 patterns를 implement하게 됩니다.

challenge icon

챌린지

쉬움

세 가지 디자인 패턴 Category에 대한 이해를 보여 주는 간단한 패턴 분류기를 만들어 봅시다! 패턴을 분류하고 그 목적을 설명하는 시스템을 만들며, 여러 파일에 걸쳐 코드를 구성하게 됩니다.

세 개의 파일을 만들게 됩니다:

  • Pattern.java: 모든 디자인 패턴에 대한 계약을 정의하는 Pattern interface를 Create하세요. interface에는 두 개의 methods를 declare해야 합니다. 패턴의 Category(Creational, Structural 또는 Behavioral)를 반환하는 String getCategory()와 해당 Category의 patterns가 수행하는 작업에 대한 설명을 반환하는 String getPurpose()입니다.
  • PatternInfo.java: Pattern interface를 implement하는 세 개의 classes를 Create하고, 각각 디자인 패턴의 한 Category를 나타내도록 하세요:

    CreationalPattern - Category로 "Creational"을, purpose로 "How objects are created"를 반환해야 합니다.

    StructuralPattern - Category로 "Structural"을, purpose로 "How objects are composed"를 반환해야 합니다.

    BehavioralPattern - Category로 "Behavioral"을, purpose로 "How objects communicate"를 반환해야 합니다.

  • Main.java: 패턴 분류기를 완성하세요! 다음 중 하나인 패턴 이름(String) 하나를 input으로 받게 됩니다: "Singleton", "Factory", "Adapter", "Decorator", "Observer" 또는 "Strategy".

    input을 Based으로 appropriate pattern object를 create하세요:

    • "Singleton""Factory"는 Creational patterns입니다.
    • "Adapter""Decorator"는 Structural patterns입니다.
    • "Observer""Strategy"는 Behavioral patterns입니다.

    패턴 object를 Pattern type의 variable(interface)에 저장하여 interface를 대상으로 프로그래밍하는 원칙을 보여 주세요. 그런 다음 다음 세 줄을 Print하세요:

    Pattern: [input pattern name]

    Category: [category from getCategory()]

    Purpose: [purpose from getPurpose()]

input으로 디자인 패턴의 이름(String)을 하나 받게 됩니다.

이 challenge는 lesson의 핵심 통찰을 강화합니다. 디자인 패턴은 해결하는 문제에 Based하여 Category별로 구성됩니다. 또한 interface를 사용함으로써 "programming to an interface, not an implementation" 원칙을 연습하게 됩니다. 이는 디자인 패턴을 매우 강력하게 만드는 핵심 개념입니다!

직접 해보기

import java.util.Scanner;

class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        String patternName = scanner.nextLine();
        
        // TODO: Pattern 타입(인터페이스) 변수를 선언하세요
        Pattern pattern = null;
        
        // TODO: patternName을 기반으로 적절한 패턴 객체를 생성하세요:
        // - "Singleton"과 "Factory"는 Creational 패턴입니다
        // - "Adapter"와 "Decorator"는 Structural 패턴입니다
        // - "Observer"와 "Strategy"는 Behavioral 패턴입니다
        
        // TODO: 다음 형식으로 결과를 출력하세요:
        // Pattern: [입력받은 패턴 이름]
        // Category: [getCategory()에서 가져온 카테고리]
        // Purpose: [getPurpose()에서 가져온 목적]
    }
}
quiz icon실력 점검

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

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

직접 연습해 보세요: 온라인 Java 컴파일러