Menu
Coddy logo textTech

디자인 패턴 소개

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

디자인 패턴은 소프트웨어를 구축할 때 개발자들이 반복적으로 직면하는 일반적인 문제들에 대한 검증된 해결책입니다. 매번 바퀴를 다시 발명하는 대신, 이러한 검증된 템플릿을 적용하여 반복되는 디자인 과제를 해결할 수 있습니다.

디자인 패턴을 청사진이라고 생각하세요. 디자인 패턴은 복사해서 붙여넣을 수 있는 완성된 코드를 제공하는 것이 아니라, 특정 유형의 문제를 해결하기 위해 클래스와 객체를 어떻게 구조화할지 설명합니다. 여러분이 배우게 될 패턴들은 이미 익힌 OOP 개념인 상속(inheritance), 인터페이스(interfaces), 다형성(polymorphism), 그리고 구성(composition)을 활용합니다.

디자인 패턴은 크게 세 가지 범주로 나뉩니다:

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

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

앞으로의 레슨에서 여러분은 Singleton 및 Factory와 같은 생성 패턴을 시작으로, Observer 및 Strategy와 같은 행동 패턴에 이르기까지 몇 가지 필수적인 패턴을 구현하게 될 것입니다.

challenge icon

챌린지

쉬움

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

세 개의 파일을 생성해야 합니다:

  • Pattern.java: 모든 디자인 패턴의 계약을 정의하는 Pattern이라는 인터페이스를 생성하세요. 인터페이스에는 두 개의 메서드를 선언해야 합니다: 패턴의 카테고리(Creational, Structural, 또는 Behavioral)를 반환하는 String getCategory()와 해당 카테고리의 패턴이 무엇을 하는지 설명을 반환하는 String getPurpose()입니다.
  • PatternInfo.java: Pattern 인터페이스를 구현하는 세 개의 클래스를 생성하세요. 각 클래스는 디자인 패턴의 한 카테고리를 나타냅니다:

    CreationalPattern - 카테고리로 "Creational"을, 목적으로 "How objects are created"를 반환해야 합니다.

    StructuralPattern - 카테고리로 "Structural"을, 목적으로 "How objects are composed"를 반환해야 합니다.

    BehavioralPattern - 카테고리로 "Behavioral"을, 목적으로 "How objects communicate"를 반환해야 합니다.

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

    입력에 따라 적절한 패턴 객체를 생성하세요:

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

    패턴 객체를 Pattern(인터페이스) 타입의 변수에 저장하여 인터페이스에 맞춰 프로그래밍하는 원칙을 보여주세요. 그런 다음 다음 세 줄을 출력하세요:

    Pattern: [input pattern name]

    Category: [category from getCategory()]

    Purpose: [purpose from getPurpose()]

하나의 입력을 받습니다: 디자인 패턴의 이름(String)입니다.

이 챌린지는 학습 내용의 핵심 통찰력을 강화합니다: 디자인 패턴은 해결하려는 문제에 따라 카테고리로 구성됩니다. 인터페이스를 사용함으로써 "구현이 아닌 인터페이스에 맞춰 프로그래밍하라"는 원칙을 연습하게 됩니다. 이는 디자인 패턴을 강력하게 만드는 핵심 개념입니다!

직접 해보기

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실력 점검

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

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