"일꾼이 일을 잘하려면 먼저 도구를 갈고 닦아야 한다." - 공자, 『논어』.
첫 장 > 프로그램 작성 > 예제가 포함된 Java의 디자인 패턴

예제가 포함된 Java의 디자인 패턴

2024-11-09에 게시됨
검색:110

Design Patterns in Java with examples

Java의 디자인 패턴이란 무엇입니까?

디자인 패턴은 소프트웨어 디자인의 일반적인 문제에 대한 재사용 가능한 솔루션입니다. 이는 소프트웨어 개발, 특히 Java와 같은 객체 지향 프로그래밍의 다양한 상황에 적용할 수 있는 모범 사례를 나타냅니다.

디자인 패턴의 유형

  • 창조 패턴: 객체 생성 메커니즘을 처리합니다.
  • 구조적 패턴: 클래스와 객체가 구성되는 방식에 관심이 있습니다.
  • 행동 패턴: 개체 간의 의사소통에 중점을 둡니다.

디자인 패턴의 사용

  • 코드 재사용성을 촉진합니다.
  • 코드 가독성과 유지관리성을 향상시킵니다.
  • 개발자 간 커뮤니케이션을 촉진합니다.

디자인 패턴의 예

1. 싱글톤 패턴

    public class Singleton {
        private static Singleton instance;

        private Singleton() {}

        public static Singleton getInstance() {
            if (instance == null) {
                instance = new Singleton();
            }
            return instance;
        }
    }
장점:
  • 단일 인스턴스에 대한 액세스를 제어합니다.
  • 다중 인스턴스를 방지하여 메모리를 절약합니다.
단점:
  • 전역 상태로 인해 테스트가 어렵습니다.
  • 긴밀한 결합으로 이어질 수 있습니다.

2. 관찰자 패턴

    import java.util.ArrayList;
    import java.util.List;

    interface Observer {
        void update(String message);
    }

    class Subject {
        private List observers = new ArrayList();

        public void addObserver(Observer observer) {
            observers.add(observer);
        }

        public void notifyObservers(String message) {
            for (Observer observer : observers) {
                observer.update(message);
            }
        }
    }
장점:
  • 피험자와 관찰자 사이의 느슨한 결합을 촉진합니다.
  • 새로운 관찰자로 쉽게 확장할 수 있습니다.
단점:
  • 관찰자가 많으면 성능이 저하됩니다.
  • 간접 통신으로 인해 디버깅이 어렵습니다.

3. 빌더 패턴

    class Product {
        private String part1;
        private String part2;

        public void setPart1(String part1) { this.part1 = part1; }
        public void setPart2(String part2) { this.part2 = part2; }
    }

    class Builder {
        private Product product = new Product();

        public Builder buildPart1(String part1) {
            product.setPart1(part1);
            return this;
        }

        public Builder buildPart2(String part2) {
            product.setPart2(part2);
            return this;
        }

        public Product build() {
            return product;
        }
    }
장점:
  • 복잡한 객체 생성을 단순화합니다.
  • 코드를 더 읽기 쉽고 유지 관리하기 쉽게 만듭니다.
단점:
  • 여러 빌더 클래스로 복잡성을 추가합니다.
  • 단순한 객체에는 과잉일 수 있습니다.

4. 팩토리 패턴

    interface Shape {
       void draw();
    }

    class Circle implements Shape {
       public void draw() { System.out.println("Drawing a Circle"); }
    }

    class Rectangle implements Shape {
       public void draw() { System.out.println("Drawing a Rectangle"); }
    }

    class ShapeFactory {
       public Shape getShape(String shapeType) {
          if (shapeType == null) return null;
          if (shapeType.equalsIgnoreCase("CIRCLE")) return new Circle();
          if (shapeType.equalsIgnoreCase("RECTANGLE")) return new Rectangle();
          return null;
       }
    }
장점:
  • 객체 생성 논리를 캡슐화합니다.
  • 기존 코드를 수정하지 않고도 새로운 모양으로 쉽게 확장할 수 있습니다.
단점:
  • 복잡성을 증가시킬 수 있는 추가 클래스를 추가합니다.
  • 제대로 사용하지 않으면 팩토리 클래스가 급증할 수 있습니다.

GoF(갱 오브 포)

"Gang of Four"는 "Design Patterns: Elements of Reusable Object-Oriented Software"라는 영향력 있는 책의 저자를 가리킵니다. 저자인 Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides는 소프트웨어 엔지니어링의 기초가 된 23가지 고전적인 디자인 패턴을 소개했습니다.

결론

디자인 패턴은 개발자가 강력하고 유지 관리 가능한 시스템을 만드는 데 도움이 되는 Java 프로그래밍의 필수 도구입니다. 효과적인 소프트웨어 설계를 위해서는 용도, 장점 및 단점을 이해하는 것이 중요합니다. Gang of Four의 기여는 이러한 패턴을 효과적으로 적용하기 위한 견고한 기반을 제공합니다.

릴리스 선언문 이 글은 https://dev.to/codegreen/design-patterns-in-java-with-examples-1klg?1에서 복제되었습니다. 침해 내용이 있는 경우, [email protected]으로 연락하여 삭제하시기 바랍니다.
최신 튜토리얼 더>

부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.

Copyright© 2022 湘ICP备2022001581号-3