Jin's Dev Story

[JAVA] 디자인패턴 본문

Programming Language/JAVA

[JAVA] 디자인패턴

woojin._. 2023. 10. 20. 14:59

디자인 패턴

자주 사용하는 설계 형태를 정형화해서 이를 유형별로 설계 템플릿을 만들어둔 것

  • 객체지향 언어를 이용해 프로그래밍 할 때 디자인 패턴을 사용한다면 보다 효율적이고 재사용성이 높은 설계 가능
  • 유지보수 용이

디자인 패턴의 종류

GoF(Gang of Four)가 정의하는 디자인 패턴 → 총 23가지

  • 생성 패턴(Creational Pattern)
    • 객체를 생성하는 것과 관련된 패턴으로 객체의 생성과 변경이 전체 시스템에 미치는 영향을 최소화 하도록 만들어 줌
    • 유연성 높일 수 있고 코드를 유지하기 쉬운 편
    • 종류
      1. Factory Method : 생성할 객체의 클래스를 국한하지 않고 객체 생성
      2. Singleton : 한 클래스에 한 객체만 존재하도록 제한함
      3. Prototype : 기존 객체를 복제함으로써 객체를 생성
      4. Builder : 생성과 표기를 분리해 복잡한 객체를 생성함
      5. Abstraction Factory(추상 팩토리) : 동일한 주제의 다른 팩토리를 묶어줌
  • 구조 패턴(Structural Pattern)
    • 프로그램 내의 자료구조나 인터페이스 구조 등 프로그램의 구조를 설계하는데 많이 활용
    • 규모가 크고 복잡한 시스템을 개발하기 쉽게 만들어주는 패턴
    • 종류
      1. Adapter : 호환성이 없는 인터페이스 때문에 함께 동작할 수 없는 클래스들이 함께 작동하도록 해줌
      2. Composite : 0개, 1개 혹은 그 이상의 객체를 묶어 하나의 객체로 이용할 수 있음
      3. Bridge : 추상화와 구현을 분리해 둘을 각자 독립적으로 변형할 수 있게 하는 패턴
      4. Decorator : 기존 객체의 메서드에 새로운 행동을 추가하거나 Override 가능
      5. Facade : 다수의 유사한 객체를 생성, 조작하는 비용을 절감할 수 있음
      6. Proxy : 접근 조절, 비용 절감, 복잡도 감소를 위해 접근이 힘든 객체에 대한 대역 제공
  • 행위 패턴(Behavioral Pattern)
    • 반복적으로 사용되는 객체들의 상호작용을 패턴화한 것
    • 클래스나 객체들이 상호작용하는 방법과 책임을 분산하는 방법을 정의
    • 여러가지 행위 관련 패턴을 사용하여 독립적으로 일을 처리하게 해줌
    • 메세지 교환과 관련된 것 → 객체들 간의 행위나 알고리즘 등과 관련된 패턴을 말함
    • 종류
      1. Template Method : 상위 클래스에서는 추상적으로 표현하고 그 구체적인 내용은 하위 클래스에서 결정되는 패턴
      2. Interpreter : 문법 규칙을 클래스화하여 언어를 해석하고 정의하는 패턴
      3. Iterator(반복자) : 반복이 필요한 자료구조를 모두 동일한 인터페이스를 통해 접근할 수 있도록 하여 컨테이너의 요소들에 접근함
      4. Observer : 어떤 클래스에 변화가 일어났을 때, 이를 감지하여 다른 클래스에 통보해줌
      5. Strategy(전략) : 알고리즘 군을 정의하고 각각 캡슐화하여 서로 교환하여 사용할 수 있게 해줌
      6. Visitor : 각 클래스의 데이터 구조로부터 처리 기능을 분리하여 별도의 클래스로 만들고 이 클래스의 메소드가 각 클래스를 다니며 특정 작업을 수행함
      7. Chain of Responsibility(책임 연쇄) : 책임들이 연결되어 있어 해당 부분에서 처리가 불가능하면 다음으로 넘어가는 구조
      8. Command : 명령어를 각각 구현하는 것이 아닌 하나의 추상 클래스에 메소드를 하나 만들고 각 명령이 들어오면 그에 맞는 서브 클래스가 선택되어 실행하는 구조
      9. Mediator(중재자) : 클래스간의 복잡한 상호작용을 캡슐화하여 한 클래스에 위임해서 처리하는 디자인 패턴.
      10. State(상태) : 동일한 동작을 객체의 상태에 따라 다르게 처리해야 할 때 사용
      11. Memento : undo 기능과 같은 기능을 개발할 때 사용하며, 클래스 설계 관점에서 객체의 정보를 저장할 필요가 있을 때 사용.

디자인 패턴의 장점

  • 개발자(설계자) 간의 원활한 의사소통
  • 소프트웨어 구조 파악 용이
  • 재사용을 통한 개발 시간 단축
  • 설계 변경 요청에 대한 유연한 대처

디자인 패턴의 단점

  • 객체지향 설계/구현 위주
  • 초기 투자 비용 부담
  • 애플리케이션 개발에는 적합하지 않음

'Programming Language > JAVA' 카테고리의 다른 글

[JAVA] StringBuffer & StringBuilder 특징  (0) 2023.10.20
[JAVA] 정적 & 동적  (1) 2023.10.20
[JAVA] 절차 지향 프로그래밍  (0) 2023.10.20
[JAVA] 최대공약수, 최소공배수  (0) 2023.10.20
[JAVA] 인스턴스 메서드  (0) 2023.10.19