디자인 패턴 소개
Coddy Java 여정의 객체 지향 프로그래밍 섹션에 포함된 레슨. 87개 중 64번째.
Design patterns는 소프트웨어를 구축할 때 개발자가 반복해서 마주치는 일반적인 문제에 대한 검증된 해결책입니다. 매번 바퀴를 새로 발명하는 대신, 오랜 시간 검증된 이러한 템플릿을 적용하여 반복적으로 발생하는 설계 문제를 해결할 수 있습니다.
디자인 pattern을 청사진이라고 생각해 보세요. 디자인 pattern은 복사하여 붙여 넣을 완성된 코드를 제공하지 않지만, 특정 유형의 문제를 해결하기 위해 classes와 objects를 어떻게 구조화해야 하는지 설명합니다. 여러분이 배우게 될 pattern은 이미 익힌 OOP 개념인 상속, interface, 다형성, 그리고 composed를 활용합니다.
Design pattern은 세 가지 주요 Category로 나뉩니다:
| Category | 목적 | 예시 |
|---|---|---|
| Creational | How object가 created되는 방식 | Singleton, Factory, Builder |
| 구조적 | How object가 composed되는 방식 | Adapter, Decorator, Composite |
| Behavioral | How object가 communicate하는 방식 | Observer, Strategy, Command |
디자인 패턴을 배워야 하는 이유는 무엇일까요? 디자인 패턴은 다른 개발자들과 공유하는 어휘를 제공합니다. "여기에는 Factory를 사용하자"라고 말하는 것만으로도 복잡한 아이디어를 즉시 전달할 수 있습니다. 또한 "구현이 아니라 interface를 대상으로 프로그래밍하라"와 같은 원칙을 적용하여 더 유연하고 유지 관리하기 쉬운 코드를 작성하는 데도 도움이 됩니다.
다가오는 수업에서는 Singleton 및 Factory와 같은 생성 patterns부터 시작하여 Observer 및 Strategy와 같은 행동 patterns로 넘어가면서 여러 필수 patterns를 implement하게 됩니다.
챌린지
쉬움세 가지 디자인 패턴 Category에 대한 이해를 보여 주는 간단한 패턴 분류기를 만들어 봅시다! 패턴을 분류하고 그 목적을 설명하는 시스템을 만들며, 여러 파일에 걸쳐 코드를 구성하게 됩니다.
세 개의 파일을 만들게 됩니다:
Pattern.java: 모든 디자인 패턴에 대한 계약을 정의하는Patterninterface를 Create하세요. interface에는 두 개의 methods를 declare해야 합니다. 패턴의 Category(Creational, Structural 또는 Behavioral)를 반환하는String getCategory()와 해당 Category의 patterns가 수행하는 작업에 대한 설명을 반환하는String getPurpose()입니다.PatternInfo.java:Patterninterface를 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를
Patterntype의 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()에서 가져온 목적]
}
}
이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.
객체 지향 프로그래밍의 모든 레슨
4상속
상속의 기초 (extends)super 키워드메서드 오버라이딩 (@Override)생성자 체이닝Object 클래스단일 및 다중 레벨 상속다중 클래스 상속이 불가능한 이유요약 - 직원 계층 구조직접 연습해 보세요: 온라인 Java 컴파일러