일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- sql
- mvc디자인패턴
- DTO
- oracle developer
- 데이터베이스
- Oracle
- DB
- C언어 표준 라이브러리
- DAO
- oracle db
- 메이븐업데이트
- 자바연산자
- 자바
- 빅오표기법
- o(log n)
- JavaSwing
- java
- DB 제약조건
- DATABASE
- O(n)
- DEFAULT
- Oracle SQL Developer
- C#접근제어자
- break
- java접근제어자
- JSP
- 오라클
- 접근제한자
- C#접근제한자
- Vo
성장일기 : 문과생의 개발 여정 (งᐖ)ว ( ᐛ )و
싱글톤 디자인패턴 본문
※싱글톤 디자인 패턴
전체 프로그램에서 단 하나의 객체만 만들도록 보장해야하는 경우
단 하나만 사용된다고 해서 싱글톤(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 |