Menu
Coddy logo textTech

디자인 패턴 소개

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

디자인 패턴은 개발자들이 소프트웨어를 구축할 때 반복적으로 마주하는 공통적인 문제들에 대한 검증된 해결책입니다. 매번 바퀴를 다시 발명하는 대신, 여러분의 코드에서 유사한 과제들을 해결하기 위해 이러한 확립된 템플릿을 적용할 수 있습니다.

디자인 패턴을 레시피라고 생각해 보세요. 요리사가 오랜 시간에 걸쳐 완성된 요리를 만들기 위해 레시피를 따르는 것처럼, 개발자들은 이전의 수많은 프로그래머에 의해 테스트되고 다듬어진 방식으로 코드를 구조화하기 위해 디자인 패턴을 사용합니다.

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

카테고리 목적 예시
생성(Creational) 객체가 생성되는 방식 Singleton, Factory
구조(Structural) 객체가 구성되는 방식 Adapter, Decorator
행위(Behavioral) 객체 간의 상호작용 방식 Observer, Strategy

사실 여러분은 이 코스를 진행하는 동안 자신도 모르게 패턴을 사용해 왔습니다. 자식 클래스가 반드시 구현해야 하는 메서드를 포함한 추상 클래스를 만들었을 때, 여러분은 템플릿 메서드(Template Method) 패턴의 한 형태를 적용하고 있었던 것입니다. 인터페이스를 사용하여 규약(contracts)을 정의했을 때, 여러분은 전략(Strategy) 패턴을 위한 설정을 하고 있었습니다.

디자인 패턴을 배우면 다른 개발자들과 공유할 수 있는 어휘를 갖게 됩니다. 복잡한 구조를 상세히 설명하는 대신, 단순히 "여기에는 Factory 패턴을 사용했습니다"라고 말하면 숙련된 개발자들은 당신의 접근 방식을 즉시 이해할 것입니다. 다음 레슨에서는 PHP로 몇 가지 필수적인 패턴을 구현해 보겠습니다.

challenge icon

챌린지

쉬움

디자인 패턴이 코드를 구조화하는 데 어떻게 도움이 되는지 보여주는 간단한 메시지 포맷팅 시스템을 구축해 보겠습니다. 각 구성 요소가 어떤 패턴 카테고리에 속하는지 식별하고 시스템의 서로 다른 부분들이 어떻게 함께 작동하는지 확인하게 될 것입니다.

코드는 세 개의 파일로 구성됩니다:

  • MessageFormatter.php — 메시지 포맷팅을 위한 규약을 정의하는 MessageFormatter라는 인터페이스를 생성하세요. 이 인터페이스는 format(string $message): string이라는 단일 메서드를 가져야 합니다. 이것은 behavioral(행위) 카테고리를 나타내며, 객체들이 어떻게 통신하고 데이터를 처리하는지 정의합니다.
  • Formatters.php — MessageFormatter 파일을 포함하고 인터페이스를 구현하는 두 개의 클래스를 생성하세요:
    • UppercaseFormatterformat() 메서드는 메시지를 대문자로 변환하여 반환합니다.
    • BracketFormatterformat() 메서드는 메시지를 [message]와 같이 대괄호로 감쌉니다.
  • main.php — Formatters 파일을 포함하세요. 메시지 문자열과 포맷터 타입("upper" 또는 "bracket")이라는 두 개의 입력을 받게 됩니다.

    MessageFormatter와 메시지 문자열을 인자로 받아 포맷팅된 결과를 반환하는 processMessage라는 함수를 생성하세요. 이 함수는 어떤 구체적인 포맷터를 받는지 알 필요가 없으며, 전달된 객체의 format()을 호출하기만 하면 됩니다.

    입력받은 포맷터 타입에 따라 적절한 포맷터 객체를 생성하세요. 메시지와 함께 processMessage 함수에 전달하고 결과를 출력하세요.

    새 줄에 이 구조가 어떤 패턴 카테고리를 나타내는지 출력하세요. 인터페이스를 통해 교체 가능한 행위를 정의하고 있으므로, 다음과 같이 출력하세요: Pattern category: Behavioral

이 챌린지는 인터페이스를 통해 사용하는 코드를 변경하지 않고도 구현을 교체하는 방법을 보여줍니다. 이는 향후 레슨에서 배우게 될 Strategy 패턴과 같은 패턴의 기초가 됩니다.

치트 시트

디자인 패턴은 코드를 효과적으로 구조화하기 위한 템플릿을 제공하며, 일반적인 프로그래밍 문제에 대해 검증된 솔루션입니다.

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

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

디자인 패턴은 개발자 간의 공통된 어휘를 제공하여 복잡한 아키텍처 결정을 더 쉽게 전달할 수 있게 해줍니다.

직접 해보기

<?php
require_once 'Formatters.php';

// 입력 읽기
$message = trim(fgets(STDIN));
$formatterType = trim(fgets(STDIN));

// TODO: MessageFormatter와 메시지 문자열을 인자로 받아
// 포맷된 결과를 반환하는 processMessage 함수를 생성하세요


// TODO: $formatterType ("upper" 또는 "bracket")에 따라 적절한 포맷터를 생성하세요


// TODO: 포맷터와 메시지를 사용하여 processMessage를 호출하고 결과를 출력하세요


// TODO: 새 줄에 패턴 카테고리를 출력하세요
// 형식: "Pattern category: Behavioral"

?>
quiz icon실력 점검

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

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