성장일기 : 문과생의 개발 여정 (งᐖ)ว ( ᐛ )و

싱글톤 디자인패턴 본문

백엔드개발/JAVA

싱글톤 디자인패턴

hyemi_flora 2024. 1. 10. 11:09

※싱글톤 디자인 패턴

전체 프로그램에서 단 하나의 객체만 만들도록 보장해야하는 경우 

단 하나만 사용된다고 해서 싱글톤(Singleton)이라고 한다

1. 싱글톤은 클래스 외부에서 new 연산자로 호출(호출 될 때마다 객체가 생성되기 때문)할 수 없도록 private 접근 제한자를 붙여 막는다.

2. 자신의 타입인 정적 필드를 하나 선언하고 자신의 객체 생성해 초기화 한다

 

ex>

//정적 필드

private static 클래스명 sigleton = new 클래스명();

→ private static FilterIndexService instance = new FilterIndexService();

/*

내가 만들어놓은 new FilterIndexService(); 이것만 가져다 사용해라 하는 의미임 private 해놓으면 외부에서 가져다 사용할 수 없음으로 FilterIndexService() 클래스에서 추가 작업을 한다

*/

//생성자

//외부에서 이 클래스를 무단으로 생성하는 것을 방지하기 위함

private 클래스() {}

→ private FilterIndexService() {}

// 정적 메소드

//이 클래스의 인스턴스가 프로그램에서 단 하나밖에 생성되지 않도록 하는 패턴

public static 클래스 getInstance() {

   return singleton;

}

public static FilterIndexService getInstance() {

return instance;

}

//외부 클래스에서 사용하는방법

 클래스 변수 1 = 클래스.getInstance();

 클래스 변수 2 = 클래스.getInstance();

uriMapping.put("GET:/filter", FilterIndexService.getInstance());

}

메소드는 단 하나의 객체만 리턴한다. 변수1과 변수2는 동일한 객체를 참고하는 것


@Override

public void init() throws ServletException {

//service 초기화 가능

//uriMapping.put("메서드:/주소", 주소로 들어오면 갈 곳);

/*

uriMapping.put("GET:/filter", new FilterIndexService());

서비스라는 것을 만들어놨는데 계속 사용할 필요가 없기 때문에 (service 라는 건 항상 한개만 있으면 된다)

서비스에 대해 잘 모르는 사람이 new FilterIndexService() 여러개 사용하지 못하게 하려고 filterIndexService를 private으로 숨겨버린다.

private 해놓으면 외부에서 가져다 사용할 수 없음으로 FilterIndexService() 클래스에서 추가 작업을 한다

*/

/*

FilterIndexService.Instance() = null;

uriMapping.put("GET:/filter", FilterIndexService.Instance());

static 은 한번만 생성되고 수정이 어려운데, 이런식으로 값을 넣으면 안되기 때문에 개터를 달아준것이다

getInstance()로 사용하려고 함

*/

uriMapping.put("GET:/filter", FilterIndexService.getInstance());

//Calendar.getInstance(); 도 getInstance()를 사용했다.

'백엔드개발 > JAVA' 카테고리의 다른 글

AccessModifier 접근제어자  (0) 2024.01.10
[Java Swing]GridLayout  (0) 2023.11.30
[Java Swing]레이아웃 관리자 (Layout Manager) / BorderLayout  (0) 2023.11.30
[Java Swing]Java Swing  (0) 2023.11.30
While  (0) 2023.11.09