[Java] 싱글톤 패턴

charco·2021년 7월 25일
0

재미코딩

목록 보기
8/10

스프링은 기본적으로 빈을 싱글톤 오브젝트로 만든다.

출처 : https://www.javatpoint.com/singleton-design-pattern-in-java

싱글톤 패턴이란

오직 하나의 인스턴스만 갖는 클래스를 정의하고
전역적으로 접근 가능하도록 한다.

다시 말하면 , 싱글톤 클래스는 오직 하나의 인스턴스만 갖는다는 것을 보장해야 하고 다른 클래스에서 이것에 접근할 수 있어야 한다.

싱글톤 패턴에는 두가지 방식이 있다.

  • Early Instantiation: 로드할때 인스턴스 생성
  • Lazy Instantiation: 필요할때 인스턴스 생성

싱글톤 패턴의 장점

매번 인스턴스를 생성하지 않기에 메모리를 절약할 수 있다.
같은 인스턴스가 계속 재사용되는 것이다.

언제 쓰는가?

싱글톤 패턴은 멀티쓰레드와 데이터베이스를 이용하는 애플리케이션에서 대부분 사용된다. 로깅 , 캐싱 , 쓰레드 풀, 설정등에 사용된다.


싱글톤 클래스를 만들어보자.

싱글톤 클래스를 만들기 위해 다음의 것들이 필요하다.

  • 스태틱 멤버 : static 이기 때문에 메모리에 한번만 저장된다. 싱글톤 클래스의 인스턴스가 저장된다.
  • private 생성자 : 다른 클래스가 싱글톤 클래스의 인스턴스를 생성하지 못하게 한다.
  • 스태틱 팩토리 메서드 : 싱글톤 오브젝트에 대한 전역적인 접근을 가능케 하고 caller 에게 인스턴스를 반환한다.

Early Instantiation 에 대한 이해

스태틱 멤버를 선언함과 동시에 인스턴스를 생성한다.
그래서 클래스가 로딩될때 인스턴스가 생성된다.

class A{  
 private static A obj=new A();//자기 자신의 인스턴스를 생성한다. 클래스가 로딩될때 생성된다.
 
 //기본생성자를 private 으로 선언함으로써 다른 클래스가 이 클래스의 인스턴스를 생성하지 못하게 한다.
 private A(){}  
 
 //static 팩토리 메서드를 통해 인스턴스를 반환한다.
 public static A getA(){  
  return obj;  
 }  
  
 public void doSomething(){  
 //write your code  
 }  
}  

Lazy Instantiation 에 대한 이해

인스턴스를 synchronized method 나 synchronized 블럭을 이용해 생성한다. 필요할때 인스턴스가 생성된다.

class A{  
 private static A obj;  
 private A(){}  
   
 public static A getA(){  
   if (obj == null){  
      synchronized(Singleton.class){  
           if (obj == null){  
            	obj = new Singleton();//필요할때 인스턴스가 생성된다.
           }  
    	}              
    }  
  return obj;  
 }  
  
 public void doSomething(){  
 //write your code  
 }  
}  
profile
아직 배우는 중입니다

0개의 댓글

관련 채용 정보