디자인 패턴 소개
Coddy PHP 여정의 객체 지향 프로그래밍 섹션에 포함된 레슨. 91개 중 70번째.
디자인 패턴은 개발자가 소프트웨어를 만들 때 반복적으로 마주치는 일반적인 문제에 대한 검증된 해결책입니다. 매번 바퀴를 새로 발명하는 대신, 이러한 확립된 템플릿을 적용하여 자신의 코드에서 유사한 문제를 해결할 수 있습니다.
디자인 패턴을 레시피라고 생각해 보세요. 셰프가 시간이 지나며 완성된 요리를 만들기 위해 레시피를 따르는 것처럼, 개발자는 수많은 선배 프로그래머가 테스트하고 다듬어 온 방식으로 코드를 구성하기 위해 디자인 패턴을 사용합니다.
Design patterns는 일반적으로 세 가지 category로 그룹화됩니다:
| 범주 | 목적 | 예시 |
|---|---|---|
| Creational | How 객체가 생성되는지 | Singleton, Factory |
| 구조적 | How 객체가 구성되는지 | Adapter, Decorator |
| Behavioral | How 객체가 communicate하는지 | Observer, Strategy |
여러분은 깨닫지 못한 채 이 과정 전체에서 이미 패턴을 사용해 왔습니다. 자식 클래스가 구현해야 하는 메서드를 포함한 추상 클래스를 만들었을 때, 여러분은 Template Method Pattern의 한 형태를 적용하고 있었습니다. 계약을 define하기 위해 인터페이스를 사용했을 때는 Strategy pattern을 위한 기반을 마련하고 있었습니다.
디자인 Pattern을 학습하면 다른 개발자들과 공유하는 어휘를 갖게 됩니다. 복잡한 구조를 자세히 설명하는 대신, 간단히 "여기에서 Factory pattern을 사용했습니다"라고 말하면 숙련된 개발자들은 즉시 여러분의 접근 방식을 이해할 것입니다. 다음 레슨에서는 PHP에서 몇 가지 필수적인 Pattern을 구현해 보겠습니다.
챌린지
쉬움디자인 패턴이 코드를 구성하는 데 어떻게 도움을 주는지 보여 주는 간단한 메시지 서식 지정 시스템을 만들어 봅시다. 각 구성 요소가 어떤 패턴 category에 속하는지 식별하고 시스템의 서로 다른 부분이 어떻게 함께 작동하는지 살펴봅니다.
코드를 세 개의 파일로 구성합니다:
MessageFormatter.php: 메시지 서식 지정에 대한 계약을 define하는MessageFormatterinterface를 Create합니다. 단일 methodformat(string $message): string을 가져야 합니다. 이는 behavioral category를 나타냅니다. objects가 communicate하고 데이터를 처리하는 how를 define합니다.Formatters.php: MessageFormatter 파일을 포함하고 interface를 구현하는 두 개의 class를 create합니다:UppercaseFormatter: Itsformat()method는 message를 대문자로 converted한 결과를 반환합니다BracketFormatter: Itsformat()method는[message]처럼 message를 대괄호로 감쌉니다
main.php: Formatters 파일을 포함합니다. 두 개의 input을 받습니다: message string과 formatter type("upper"또는"bracket")입니다.MessageFormatter와 message string을 accepts한 다음 formatted result를 반환하는processMessagefunction을 Create합니다. 이 function은 어떤 특정 formatter를 받는지 알 필요가 없습니다. 전달된 어떤 object에서든format()만 호출합니다.formatter type input을 Based으로 appropriate formatter object를 Create합니다. 이를 message와 함께
processMessagefunction에 전달하고 result를 print합니다.새 line에 이 구조가 나타내는 pattern category를 print합니다. interface를 통해 교체 가능한 behavior를 define하고 있으므로 다음을 print합니다:
Pattern category: Behavioral
이 challenge는 interface를 사용하면 이를 사용하는 코드를 변경하지 않고도 구현을 교체할 수 있다는 것을 보여 줍니다. 이는 다음 lesson에서 살펴볼 Strategy와 같은 patterns의 foundation입니다.
직접 해보기
<?php
require_once 'Formatters.php';
// 입력 읽기
$message = trim(fgets(STDIN));
$formatterType = trim(fgets(STDIN));
// TODO: MessageFormatter를 받는 processMessage라는 함수를 생성하세요
// 그리고 메시지 문자열을 받은 다음 포맷된 결과를 반환합니다
// TODO: $formatterType ("upper" 또는 "bracket")에 따라 적절한 포맷터를 생성하세요
// TODO: 포맷터와 메시지로 processMessage를 호출한 다음 결과를 출력하세요
// TODO: Print the pattern category on a new line
// Format: "Pattern category: Behavioral"
?>이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.
객체 지향 프로그래밍의 모든 레슨
직접 연습해 보세요: 온라인 PHP 컴파일러