디자인 패턴

정태경·2023년 10월 7일
0
post-thumbnail

디자인 패턴

개발자에게 디자인 패턴은 꽤나 중요한 내용이다. 디자인 패턴은 소프트웨어를 개발하면서 공통적으로 발생하는 문제를 해결하기 위한 일종의 설계 템플릿이기 때문이다. 디자인 패턴은 수년간 축적되고 검증된 설계 방법론이기에 개발할 때 일관성 있고 효율적인 방식으로 설계할 수 있도록 도와준다. 따라서 디자인 패턴을 잘 이해하고 사용하면 다음과 같은 이점을 얻을 수 있다.

  • 코드의 재사용성 향상 : 디자인 패턴은 이미 검증된 설계 방법론이기에 한 번 작성된 코드를 재사용하여 효율적으로 활용할 수 있다.

  • 유지보수 용이성 향상 : 디자인 패턴은 일관성 있는 설계 방식을 제공하므로 코드의 가독성과 유지보수 용이성을 높일 수 있다.

  • 개발 시간 단축 : 디자인 패턴을 잘 활용하면 개발 시간을 획기적으로 단축할 수 있다.

  • 협업의 용이성 향상 : 디자인 패턴은 개발자들 사이에서 공유되는 패턴이기에 양쪽 모두 디자인 패턴을 이해하고 있다면 효율적인 의사소통과 협업을 할 수 있다.

디자인 패턴의 종류

디자인 패턴은 크게 생성 패턴(Creational), 구조 패턴(Structural), 행위(Behavioral) 패턴으로 구분하곤 한다.

생성 패턴은 객체를 생성하는 방법을 다루는 패턴이다. 객체 생성 시 발생할 수 있는 복잡성을 줄이고, 코드의 유연성과 재사용성을 높일 수 있다. 대표적으로는 Singleton 패턴, Factory 패턴, Builder 패턴 등이 있다.

구조 패턴은 객체들이 상호 작용하는 방식을 다루는 패턴이다. 객체 간의 관계를 조직화하고 복잡한 구조를 간소화할 수 있다. 대표적으로는 Facade 패턴, Decorator 패턴, Adapter 패턴 등이 있다.

행위 패턴은 객체 간의 상호작용 방식을 다루는 패턴이다. 객체 간의 행위를 조정하고 동작을 최적화하는 방법을 제공한다. 대표적으로는 Observer 패턴, Template Method 패턴, State 패턴 등이 있다.

생성 패턴(Creational)

  • 팩토리 메서드 패턴 (Factory Method Pattern)
    객체 생성을 처리하는 추상 메서드를 정의하고, 이를 상속받은 여러 개의 클래스에서 구체적인 객체 생성을 처리하는 패턴

  • 추상 팩토리 패턴 (Abstract Factory Pattern)
    객체 생성을 처리하는 추상 메서드를 정의하고, 이를 상속받은 여러 개의 팩토리 클래스에서 구체적인 객체 생성을 처리하는 패턴

  • 빌더 패턴 (Builder Pattern)
    복잡한 객체의 생성 과정을 단계별로 분리하여 처리하는 패턴

  • 프로토타입 패턴 (Prototype Pattern)
    객체를 생성할 때, 기존 객체를 복제하여 새로운 객체를 생성하는 패턴

  • 단일체 패턴 (Singleton Pattern)
    어떤 클래스의 인스턴스가 오직 하나만 생성되도록 보장하는 패턴

구조 패턴(Structural)

  • 어댑터 패턴 (Adapter Pattern)
    호환성이 없는 인터페이스를 함께 동작할 수 있도록 중간에서 변환해주는 패턴

  • 브릿지 패턴 (Bridge Pattern)
    구현부와 추상화된 부분을 분리하여, 두 부분이 서로 독립적으로 확장될 수 있도록 하는 패턴

  • 컴포지트 패턴 (Composite Pattern)
    객체들을 트리 구조로 구성하여, 단일 객체와 복합 객체를 동일한 방법으로 다룰 수 있도록 하는 패턴

  • 데코레이터 패턴 (Decorator Pattern)
    객체에 동적으로 새로운 기능을 추가할 수 있도록 하는 패턴

  • 퍼사드 패턴 (Facade Pattern)
    복잡한 서브시스템을 간단한 인터페이스로 제공하여, 사용자가 쉽게 접근할 수 있도록 하는 패턴

  • 플라이웨이트 패턴 (Flyweight Pattern)
    객체의 공유를 통해 메모리 사용량을 최소화하고 성능을 향상시키는 패턴

  • 프록시 패턴 (Proxy Pattern)
    객체에 대한 접근을 제어하기 위한 대리자 역할을 하는 패턴

행위 패턴(Behavioral)

  • 책임 연쇄 패턴 (Chain of Responsibility Pattern)
    요청을 처리할 수 있는 객체를 연결하여, 요청을 처리할 수 있는 객체를 찾을 때까지 요청을 전달하는 패턴

  • 커맨드 패턴 (Command Pattern)
    요청을 객체로 캡슐화하여, 요청을 다른 객체에게 전달하고, 요청을 수행할 객체를 변경할 수 있는 패턴

  • 인터프리터 패턴 (Interpreter Pattern)
    언어나 규칙의 문법을 정의하고, 이를 해석하는 인터프리터를 구현하는 패턴

  • 이터레이터 패턴 (Iterator Pattern)
    객체들의 집합을 하나씩 순서대로 처리할 수 있는 방법을 제공하는 패턴

  • 미디에이터 패턴 (Mediator Pattern)
    객체들 간의 복잡한 상호작용을 캡슐화하여, 객체들 간의 직접적인 의존성을 제거하는 패턴

  • 메멘토 패턴 (Memento Pattern)
    객체의 상태를 저장하고, 이전 상태로 복원할 수 있는 패턴

  • 옵저버 패턴 (Observer Pattern)
    객체의 상태 변화를 감지하고, 이에 대응하여 자동으로 상태를 업데이트하는 패턴

  • 스테이트 패턴 (State Pattern)
    객체의 상태에 따라 행위를 변경할 수 있도록, 객체의 상태를 객체로 캡슐화하는 패턴

  • 스트래티지 패턴 (Strategy Pattern)
    알고리즘의 변경에 따라, 행위를 동적으로 변경할 수 있도록, 알고리즘을 객체로 캡슐화하는 패턴

  • 템플릿 메서드 패턴 (Template Method Pattern)
    알고리즘의 구조를 정의하고, 구체적인 구현은 서브클래스에서 처리하는 패턴

다음 포스팅에서는 자주 사용되는 패턴을 직접 구현해보며 정리해 보자.

profile
두나무 업비트 QA 엔지니어

0개의 댓글