크리에이션 디자인 패턴 : 1. 싱글 톤 패턴

창작 디자인 패턴이란 무엇인가요?

(2020 년 12 월 26 일)

창조적 디자인 패턴은 클래스의 새 객체 생성 또는 복제를 다룹니다. 복제는 비슷한 종류의 개체가 이미 존재할 때 발생하며 새 개체를 인스턴스화하는 대신 기존 개체를 복제합니다.

개체를 만드는 다양한 방법은 문제 해결 방법에 큰 영향을줍니다. 따라서 다른 언어는 사용할 수있는 패턴에 영향을줍니다.

싱글 톤 패턴

싱글 톤 패턴은 클래스의 단일 인스턴스 만 필요할 때 사용됩니다. 예를 들어, 많은 자원을 필요로하는 로거를 사용하여 응용 프로그램, 프린터의 인쇄 대기열에서 DB 연결을 설정합니다. 이러한 모든 경우에 여러 인스턴스가 있으면 혼란과 불일치가 발생합니다.

이 패턴은 인스턴스가 애플리케이션 전체에서 공유되고 액세스 가능할 때 사용됩니다. 공유 리소스에 대한 액세스가 스레드로부터 안전한지 확인하는 것은 이러한 종류의 패턴 이 필수적인 경우에 대한 아주 좋은 예입니다. Singleton 패턴의 의도는 하나의 인스턴스로 제한된 클래스에 대한 전역 액세스를 제공하는 것입니다.

객체가 어떻게 생성되는지 살펴 보겠습니다.

public class DummyClass{ DummyClass(){}
}DummyClass dc = new DummyClass(); //every time when this line is called a new object of DummyClass is created

이제 DummyClass의 객체가 필요할 때마다 생성자가 호출되고 객체가 생성됩니다. 이를 Eager 초기화라고합니다.

그러나 싱글 톤 패턴에서는 클래스의 단일 인스턴스 만 필요합니다. DB 연결이 이미 설정되어있는 경우 새 DB 연결을 만들 필요가 없으며 기존 연결을 사용해야합니다. 이를 달성하는 방법을 살펴 보겠습니다.

여기서는 생성자의 범위를 클래스 자체로 제한했습니다. 따라서이 클래스의 객체를 생성하려면 클래스의 getDBConnection () 정적 메서드를 호출해야합니다. 그런 다음 dbConnection 개체가 null인지 확인한 다음 새 연결 개체를 만들고 그렇지 않으면 기존 연결 개체를 반환합니다.

이 예제는 지연 초기화 . 즉, 진정으로 필요한 경우가 아니면 클래스의 객체를 생성하지 않습니다. 따라서이 프로그램은 리소스 측면에서 더 효율적입니다.

Singleton 설계 원칙에는 절충안이 있습니다. 실행중인 컴퓨팅 스레드가 여러 개인 경우 공유 된 단일 객체에 액세스하려는 스레드로 인해 문제가 발생할 수 있습니다.

위 구현의 문제

이제 두 가지 문제가 발생할 수 있습니다. 스레드가 동시에 getDBConnection 메소드를 호출하고 객체가 아직 생성되지 않았습니다. 두 스레드 모두에 대해 dbConnection 객체는 null이되고 둘 다 새 인스턴스를 만들고 대신 사용하려고합니다. 따라서 여러 인스턴스가 생성되지 않도록 단일 스레드가 한 번에 getDBConnection에 액세스 할 수 있는지 확인하는 것이 매우 중요합니다.

스레드를 달성하려면 -safe 싱글 톤 클래스는 한 번에 하나의 스레드 만이 메소드를 실행할 수 있도록 글로벌 액세스 방법을 동기화하는 것입니다.

한 번에 하나의 스레드 만이 동기화 된 코드 블록에 액세스 할 수 있습니다.

지금 문제가 해결되었다고 생각할 수 있습니다. 그러나 불행히도 아닙니다! 싱글 톤 속성을 적용하기 위해 정적 getDBConnection 메소드에 잠금을 설정하지만 동시에 성능을 저하시킵니다. 개체가 이미 생성 된 경우 여러 스레드가 해당 개체의 기존 인스턴스를 가져 오기 위해 기다려야합니다. 더 나은 것을 할 수 있습니까? 봅시다.

분명히 잠금은 인스턴스가 null 인 경우에만 필요하므로 다른 스레드가 여러 인스턴스를 만들지 않습니다. 따라서 인스턴스가 null인지 여부를 확인하는 if 조건 내에 동기화 된 조건을 넣고 이중 확인을 추가하여 여러 인스턴스의 시나리오를 제거 할 수 있습니다.

실제 사용에서는 싱글 톤 패턴을 다양한 방식으로 구현할 수 있습니다. 이 패턴이 제공하는 기본 목적을 정의 할 뿐이지 만 코드 구현은 다를 수 있습니다.

그게 다 내 쪽입니다. 지금, 어디서, 언제, 어떻게 싱글 톤 디자인 패턴을 사용하는지 명확 해 졌으면합니다. 이해를 돕기 위해 Gang of Four의 디자인 패턴 카탈로그라는 책을 참조하시기 바랍니다.

의심스러운 점이 있으면 아래 댓글로 알려주세요. 이 블로그가 마음에 들면 친구들과 공유하세요. 행복한 소프트웨어 엔지니어링!

파트 2 :