본문 바로가기
프로그래밍

싱글톤 — 단일 인스턴스의 아름다움

by it-view 2021. 12. 30.
반응형

싱글톤이 뭐죠?

싱글톤 디자인 패턴의 간단한 정의부터 시작하겠습니다.

이 간단하고 의미 있는 디자인 패턴은 Creational Design Pattern 아래에 있습니다. 이 설계 패턴에서 단일 클래스는 한 번에 인스턴스 하나만 만듭니다.

그것은 무엇을 뜻하나요? 이 디자인 패턴의 용도는 무엇입니까?

앞서 말했듯이 이 디자인 패턴에서 클래스는 한 번에 한 인스턴스만 생성합니다. 클래스가 한 번에 여러 인스턴스를 만들 수 없도록 합니다. 이 프로세스는 클래스의 메모리 할당에 주로 영향을 미칩니다. 그 말은 얼마나 많은 요청이 와도 한 번에 개체를 만들 수 있다는 뜻입니다. 따라서 각 요청마다 하나의 인스턴스만 메모리에 저장됩니다. 그리고 그 인스턴스는 계속해서 재사용됩니다.

 

예를 들어 설명해보자.

학생 정보를 사용자 입력으로 받아 필요할 때 출력하는 학생 클래스를 만들어야 한다고 가정합니다. 다음 예는 싱글톤 디자인 패턴을 사용하여 다음 시나리오를 구현하는 방법을 명확하게 보여줍니다. 이 디자인 패턴에는 두 가지 형태가 있습니다. 하나는 Lazy Instantization으로, 필요할 때 인스턴스를 생성하는 역할을 담당합니다. (간단한 예를 통해 이러한 설계 패턴을 설명하기 위해 게으른 인스턴스화를 사용했습니다.) 다른 하나는 로드 시 인스턴스를 생성하는 Eager Instantization입니다.

위의 코드 세그먼트에서 Student 클래스를 생성하고 생성자를 비공개로 만듭니다. 그런 다음 자체의 정적 인스턴스(obj)를 만듭니다.

그런 다음 정적 메서드(getInstance)를 만들어 다른 클래스에서 참조할 이 클래스의 인스턴스를 가져옵니다. 이 getInstance 메소드 내에서 먼저 인스턴스가 생성되었는지 여부(또는 인스턴스가 null임)를 확인한 다음 null이면 이 클래스를 동기화된 클래스로 만들거나 클래스를 한 번 잠근 다음 인스턴스 생성 여부(또는 인스턴스가 null임)를 다시 확인합니다. 결과가 null이거나 생성되지 않은 경우 새 인스턴스를 만듭니다. 이 특수 방법을 "이중 확인 잠금"이라고 합니다. 그런 다음 메인 클래스를 Singleton으로 만들어 이 Student 수업과 메소드를 참조하겠습니다. 다음 코드 세그먼트에 이 작업을 수행하는 방법이 명확히 설명되어 있습니다.

 

이 프로그램을 실행해서 이 디자인 패턴에 대한 설명에 따라 정답을 맞혔는지 봅시다.

위의 결과를 주의 깊게 보면 빨간색으로 강조 표시된 인스턴스가 한 번 생성된다는 것을 알 수 있습니다. (확인하기 위해 학생 클래스의 개인 생성자 안에 "Instance Created" 인쇄했습니다.) 그래서 만약 우리가 학생 클래스의 인스턴스를 한 번 이상 생성하려고 한다면 (Singleton 클래스 위의 예제에서) 학생 및 학생1로 두 번 이상 학생 클래스의 인스턴스를 생성하려고 시도했습니다.) 그러면 인스턴스가 한 번 생성되고 해당 인스턴스가 두 번 이상 참조됩니다. 그런 다음 setStudentDetails 방법을 사용하여 수동으로 학생 세부 정보를 삽입한 후 getStudentCGPA 방법으로 세부 정보를 볼 수 있습니다.

이 설계 패턴에서 한 가지 더 중요한 점은 데이터베이스 응용프로그램, 로깅, 스레드 풀 등과 같은 일부 특수 영역에서만 사용할 수 있다는 것입니다.

 

추가 참조:

지금은 여기까지입니다. 의심이 가거나 덧붙일 말이 있으면 얼마든지 말씀하세요.

댓글