[JAVA] 디자인패턴

2023. 10. 20. 14:59·Programming Language/JAVA

디자인 패턴

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

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

디자인 패턴의 종류

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
'Programming Language/JAVA' 카테고리의 다른 글
  • [JAVA] StringBuffer & StringBuilder 특징
  • [JAVA] 정적 & 동적
  • [JAVA] 절차 지향 프로그래밍
  • [JAVA] 최대공약수, 최소공배수
woojin._.
woojin._.
여러가지 개발을 해보며 발생하는 이야기들에 대한 블로그입니다:)
  • woojin._.
    Jin's Dev Story
    woojin._.
  • 전체
    오늘
    어제
    • 분류 전체보기 (829)
      • Tools (25)
        • eGovFrame (3)
        • GeoServer (3)
        • QGIS (2)
        • LabelImg (2)
        • Git (6)
        • GitHub (1)
        • Eclipse (7)
        • Visual Studio (1)
      • Web & Android (121)
        • SpringBoot (37)
        • Three.js (2)
        • Spring Data JPA (9)
        • 스프링 부트 쇼핑몰 프로젝트 with JPA (25)
        • Thymeleaf (4)
        • Spring Security (15)
        • Flutter (29)
      • Programming Language (61)
        • JAVA (27)
        • JavaScript (14)
        • Dart (2)
        • Python (15)
        • PHP (3)
      • Database (43)
        • PostgreSQL (32)
        • MYSQL (7)
        • Oracle (3)
        • MSSQL (1)
      • SERVER (17)
        • TCP_IP (3)
        • 리눅스 (7)
        • AWS (7)
      • Coding Test (445)
        • 백준[JAVA] (108)
        • 프로그래머스[JAVA] (260)
        • 알고리즘 고득점 Kit[JAVA] (3)
        • SQL 고득점 Kit[ORACLE] (74)
      • CS 지식 (49)
        • [자료구조] (14)
        • [네트워크] (12)
        • [데이터베이스] (10)
        • [알고리즘] (9)
        • [운영체제] (4)
      • 기타 (6)
      • 자격증 & 공부 (62)
        • 정보처리기사 (2)
        • SQLD (6)
        • 네트워크관리사 2급 (5)
        • 리눅스마스터 1급 (44)
        • 리눅스마스터 2급 (1)
        • ISTQB (3)
        • 시스템보안 (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 인기 글

  • 태그

    springboot
    postgresql
    Spring Security
    스프링
    리눅스마스터
    플러터
    Flutter
    CS지식
    시큐리티
    DB
    baekjoon
    데이터
    programmers
    JPA
    backjoon
    자바
    python
    스프링부트
    데이터베이스
    Linux
    pcce 기출문제
    프로그래머스
    리눅스
    spring
    스프링 부트 쇼핑몰 프로젝트 with JPA
    Oracle
    CS
    백준
    리눅스마스터 1급
    Java
  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
woojin._.
[JAVA] 디자인패턴
상단으로

티스토리툴바