4.1 빌더

Builder 는 복합 개체를 만드는 방법을 제공하는 생성 디자인 패턴입니다.

복잡한 객체의 구성을 해당 표현에서 분리하여 동일한 구성 프로세스가 다른 표현을 만들 수 있도록 합니다.

빌더

강점:

  • 제품의 내부 표현을 변경할 수 있습니다.
  • 생성 및 표시를 구현하는 코드를 분리합니다.
  • 설계 프로세스를 보다 세밀하게 제어할 수 있습니다.

약점:

  • 복잡한 객체를 생성하는 알고리즘은 객체가 어떤 부분으로 구성되어 있고 어떻게 서로 맞물리는지에 의존해서는 안 됩니다.
  • 구성 프로세스는 구성 중인 개체의 다른 표현을 제공해야 합니다.

좋은 예는 HttpRequest 클래스의 인스턴스를 만들고 유효한지 확인하는 데 사용할 수 있는 HttpRequest.Builder 하위 클래스가 있는 HttpRequest 클래스입니다.

4.2 지연 초기화

지연 초기화는 결과가 사용되기 직전에 일부 리소스 집약적인 작업(객체 생성, 값 계산)이 수행되는 프로그래밍 기술입니다.

따라서 초기화는 미리 수행되는 것이 아니라 "요청 시" 수행됩니다. 유사한 아이디어가 다양한 영역에서 적용됩니다. 예를 들어 즉석 편집 및 Just-in-Time 물류 개념이 있습니다.

지연 초기화

게으른 초기화의 특별한 경우(액세스할 때 객체를 생성하는 것)는 생성 설계 패턴 중 하나입니다. 일반적으로 Factory Method, Loner 및 Proxy와 같은 패턴과 함께 사용됩니다.

강점:

  • 초기화는 꼭 필요한 경우에만 수행됩니다.
  • 애플리케이션의 초기 초기화가 가속화됩니다. 연기할 수 있는 모든 것이 연기됩니다.

약점:

  • 개체가 초기화되는 순서를 명시적으로 설정할 수 없습니다.
  • 개체에 대한 첫 번째 액세스에는 지연이 있으며, 이는 리소스를 많이 사용하는 다른 작업을 병렬로 수행할 때 중요할 수 있습니다. 이 때문에 다중 스레드 소프트웨어 시스템에서 지연 초기화를 사용하는 것이 적절한지 신중하게 고려해야 합니다.

web.xml을 작성할 때 거기에서 서블릿의 시작 순서를 지정할 수 있었던 방법을 기억하십니까? 이것이 바로 게으른 로딩의 결과입니다. Tomcat은 처음 액세스할 때 서블릿 객체를 생성합니다.

4.3 개체 풀

객체 풀은 초기화되고 사용 준비가 된 객체 집합인 부모 디자인 패턴입니다. 시스템에 개체가 필요한 경우 개체가 생성되지 않고 풀에서 가져옵니다. 객체가 더 이상 필요하지 않으면 소멸되지 않고 풀로 반환됩니다.

개체 풀

개체 풀링은 작업 시작 시 개체를 생성하고 마지막에 제거하는 데 비용이 많이 드는 경우 성능을 개선하는 데 사용됩니다. 특히 개체가 자주 생성되고 소멸되지만 동시에 존재하는 개체 수가 적은 경우 성능 향상이 두드러집니다.

개체 풀은 개체가 네트워크 소켓과 같은 메모리 이외의 리소스를 소유할 때 유용합니다. 또는 개체 모음이 컴퓨터 메모리의 상당 부분을 차지하고 많은 "쓰레기"가 생성되는 경우입니다.

아시다시피 Tomcat은 별도의 스레드에서 각 요청을 실행합니다. 그러나 스레드는 매번 새로 생성되는 것이 아니라 스레드 풀에 저장됩니다. 이를 통해 요청을 더 빠르게 실행할 수 있습니다. 스레드가 필요할 때 간단히 풀에서 가져옵니다. 그런데 문제는 실행 중인 스레드를 어떻게 풀에 넣고 풀에서 가져오느냐는 것입니다.