🌻 JAVA/디자인 패턴

5. 싱글턴 (Singleton) 패턴 - Head First Design Patterns

2020. 4. 6. 21:29
반응형

인스턴스 생성할때 어떻게 할까? --------> new MyClass();

만약 생성자가 private으로 선언돼있으면? --------> 인스턴스 생성 불가.

생성하게 하려면?? --> 인스턴스변수를 static변수로 미리 선언후 --> 요청시 인스턴스 변수를 만들어서

넘겨주는 식으로 생성해준다.

 

public class Singleton{
	private static Singleton uniqueInstance;
    
    private Singleton() { } // private로 선언된 생성자
    
    public static Singleton getInstance() { //인스턴스 생성하는 메소드
    	if (uniqueInstance == null) { //인스턴스가 생성된 적이 있는지 확인후
        		uniqueInstance = new Singleton();  //생성
        }
        return uniqueInstance; //return
    }
}

 

 

 

싱글턴 패턴 정의 ) 싱글턴 패턴은 해당 클래스의 인스턴스가 하나만 만들어지고,

어디서든지 그 인스턴스에 접근할수 있도록 하기 위한 패턴입니다.

 

 

 

싱글턴 패턴 :  클래스 다이어그램

싱글턴 패턴 : 클래스 다이어그램

 

 

싱글턴 패턴의 문제점

 

ChocolateBoiler boiler = new ChocolateBoiler.getInstance();

fill();
boil();
drain();
Thread1 Thread2 uniqueInstance
public static Chocolate getInstance()   null
  public static Chocolate getInstance() null

if(uniqueInstance == null)

 

 

if(uniqueInstance == null) *안좋은 상황

null

null

uniqueInstance = new ChocolateBoiler();

return uniqueInstance;

 

 

 

 

 

 

 

uniqueInstance = new ChocolateBoiler();

 

return uniqueInstance;

 

<object1>

<object1>

 

 

<object2> ** 문제 발생!

<object2> ** 문제 발생!

 

 

 

멀티스레딩 문제 해결 방법

 

1. synchronized 동기화 시키기.

public class Singleton{
		private static Singleton uniqueInstance;
        //기타 인스턴스 변수
        
        private Singleton() {}
        
        public static synchronized Singleton getInstance(){
        		if(uniqueInstance == null){
                	uniqueInstance = new Singleton();
                 }
                 return uniqueInstance;
       }
       ....
}

단점) 엄청난 속도 저하 ( 동기화 시키면 성능이 100배 정도 저하 )

 

 

2. 처음부터 인스턴스를 만들어 버리기.

public class Singleton{
	public static Singleton uniqueInstance = new Singleton(); //!!
    
    private Singleton(){ }
    
    public static Singleton getInstance(){
    		return uniqueInstance;
    }
}

 

반응형
저작자표시 (새창열림)
'🌻 JAVA/디자인 패턴' 카테고리의 다른 글
  • Factory Pattern (feat. 추상 팩토리, 팩토리 메소드)
  • 6. 커맨드(Command) 패턴 - Head First Design Patterns
  • 4. 팩토리(Factory) 패턴 - Head First Design Patterns
  • 3. 데코레이터(Decorator) 패턴 - Head First Design Patterns
iseunghan
iseunghan
꾸준하게 열심히..
iseunghan꾸준하게 열심히..
iseunghan
iseunghan

공지사항

  • 어제보다 나은 오늘이 되기 위해 🔥
  • 분류 전체보기 (262)
    • 💐 Spring (14)
      • 개념 및 이해 (2)
      • Spring 핵심 기술 (24)
      • Spring REST API (8)
      • Spring MVC, DB 접근 기술 (7)
      • Spring Security (23)
      • Spring in Action (1)
    • 🌻 JAVA (84)
      • 자바 ORM 표준 JPA 프로그래밍 (20)
      • 알고리즘, 자료구조 (13)
      • 디자인 패턴 (7)
      • 정리정리정리 (43)
      • JUnit (1)
    • 🔖 Snippets (3)
      • Javascript (3)
    • ⚙️ Devops (22)
      • ⛏ Git (11)
      • 🐳 Docker (6)
      • 🐧 Linux (3)
      • 🌈 Jenkins (1)
      • 📬 Kafka (1)
    • 💬 ETC.. (4)
      • 💻 macOS (2)
    • 🌧️ ORM (2)
      • JPA (2)
    • 🐍 Python (3)
    • 📚 Databases (15)
      • 오라클로 배우는 데이터베이스 개론과 실습(2판) (3)
      • RealMySQL 8.0 (8)
    • 🔥 Computer Science (5)
      • 📡 네트워크 (5)
    • 🏷️ 협업 (1)
    • 📜 코딩테스트 (38)
      • BAEKJOON\수학 1, 수학 2 (8)
      • BAEKJOON\재귀 (5)
      • BAEKJOON\브루트 포스 (3)
      • BAEKJOON\정렬 (1)
      • BAEKJOON\백트래킹 (5)
      • BAEKJOON\BFS, DFS (6)
      • BAEKJOON\이분탐색 (1)
      • BAEKJOON\다이나믹 프로그래밍 (9)
      • BAEKJOON\그리디 알고리즘 (0)
    • ✨ ISEUNGHAN (1)

인기 글

최근 글

전체
오늘
어제
반응형
hELLO · Designed By 정상우.
iseunghan
5. 싱글턴 (Singleton) 패턴 - Head First Design Patterns
상단으로

티스토리툴바

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.