싱글톤 패턴

kmb·2021년 8월 13일
0

자바

목록 보기
28/31
post-thumbnail

싱글톤 패턴

클래스를 통해서 생성된 객체는 오직 하나임을 보장하는 패턴.
이미 만들어진 객체를 공유하기 위해서 사용

만드는 방식

1) 생성자의 접근제어자를 private으로 선언 (외부에서 생성자 호출을 못하게 하기 위해)
2) 자신의 클래스 타입으로 정적(static)필드를 생성하고 초기화한다. 또한 정적(static)필드를 외부 클래스에서 값을 변경하지 못하도록 접근제어자를 private로 설정한다.
3) 외부에서 유일하게 호출할 수 있도록 getInstance() 메서드를 정의한다. 이때 정적(static)필드에서 생성한 인스턴스를 반환값으로 돌려준다.

싱글톤을 사용하는 이유

스프링(DI 컨테이너)에서 쓰이는 객체가 bean인데 싱글톤 패턴으로 이루어져있다. 1개의 객체를 한번만 생성시키고 이것만 계속 쓰게한다.
(계속해서 새로운 new 연산자로 객체를 생성하면 메모리를 차지하므로 1개의 객체를 만들어놓고 그것만 쓰게한다)

--> 즉 메모리를 공유하기 위해

싱글턴 패턴의 특징

1) 싱글턴 패턴을 따르는 클래스는 생성자가 여러 차례가 호출되더라도 실제로 생성되는 객체는 1개!

2) 최초 생성 이후에 호출된 생성자는 최초의 생성자가 생성한 개체를 return한다.

3) DI 컨테이너인 요청을 할 때마다 새로운 객체를 생성한다.
(요청이 엄청나게 많은 트래픽 사이트에서는 계속 객체를 생성하게 되면 메모리 낭비가 심하기 때문)

4) 스프링 컨테이너에서 싱글턴 관련 코드는 작성하지 않아도 스프링의 기능으로 bean에다가 객체를 1개 설정.
appConfig.getBean(Member.class) 하나의 주소를 가르킨다.

싱글톤 패턴으로 CarFactory 클래스를 만들면 다음과 같다.

public class CarFactory {

	
   private CarFactory() {   
		
   }
	
   private static CarFactory instance = new CarFactory();	
	
   public static CarFactory getInstance() {		
	
       if(instance == null) {
	   
           instance = new CarFactory();
	
       }
       return instance;
   }
}
public class SingleTonPattern {

	
    public static void main(String[] args) {
				
	CarFactory carFactory1 = CarFactory.getInstance();
	CarFactory carFactory2 = CarFactory.getInstance();
		  
	System.out.println(carFactory1);		
	System.out.println(carFactory2);		

	
    }
}

결과는 다음과 같다

두 주소값이 같은것을 볼수있는데, 즉 싱글톤 패턴은 주소값이 같은 1개의 인스턴스임을 알 수 있다.

profile
꾸준하게

0개의 댓글