Singleton Pattern
- JVM에서 하나의 인스턴스를 생성하고 사용하는 개발 패턴 (Design pattern)
- 메모리를 절감할 수 있음
- 참조하는 속도가 빠름
- Framework에서 주로 객체를 생성하고 사용하는 방식
- 아래 작성법이 class안에 들어가있으면 singleton 패턴인 클래스 라고 함
- Ex) Calendar Class의 getInstance()
- 작성법)
| 작성법 | 코드 예 |
| 1. 객체화를 클래스 안에서만 할 수 있도록 작성함 => 생성자의 접근지정자를 private로 지정 2. 객체를 생성하여 반환하는 일을 하는 method 작성 => public static 클래스명 getInstance() { 3. 객체를 하나로 유지하고 반환하는 일. if ( 객체 == null ) { 객체 = new 생성자(); } return 객체; } |
class Test{ private static Test t; private Test(){ } public static Test getInstance(){ if (t == null) { t = new Test(); } return t; } } |
# 예시 #
- 싱글톤 패턴의 클래스
/**
* 싱글톤 패턴으로 만드는 클래스 : 객체가 하나로만 사용되는 클래스
* @author user
*/
public class Singleton {
private static Singleton single;
private Singleton() { // 접근지정자 private으로 클래스 외부에서 객체화 불가
}// Singleton
/**
* 생성된 객체를 얻기 위한 method
* @return
*/
public static Singleton getInstance() {
// 객체를 하나로 생성 관리할 수 있는 코드
if (single == null) {
single = new Singleton();
}//end if
return single;
}// getInstance
}// class
- 싱글톤 클래스 사용
public class UseSingleton {
public static void main(String[] args) {
//생성자가 private이기 때문에 클래스 외부에서 객체화 될 수 없음
// Singleton single = new Singleton(); // 생성자가 보이지 않아서 생성 불가! getInstance 사용해야함
//getInstance method를 통해서만 객체를얻음
Singleton single = Singleton.getInstance();
Singleton single2 = Singleton.getInstance();
Singleton single3 = Singleton.getInstance();
//몇개를 생성하든 객체는 하나이므로 주소는 똑같당
System.out.println(single);
System.out.println(single2);
System.out.println(single3);
//일반 class는 객체 생성 횟수만큼 heap 주소가 할당됨!
UseStatement us = new UseStatement();
UseStatement us2 = new UseStatement();
UseStatement us3 = new UseStatement();
System.out.println(us);
System.out.println(us2);
System.out.println(us3);
}//main
}//class
# 출력 결과 #

> 객체를 하나만 생성해서 사용할 때 !!
DB 연동 작업 시 한 객체만 DB에 접근/조작할 수 있도록 할 수 있음
'Development > JDBC' 카테고리의 다른 글
| [JDBC] ResultSetMetaData / Transaction 처리 (0) | 2021.10.19 |
|---|---|
| [JDBC] DAO / PreparedStatement 활용 (0) | 2021.10.15 |
| [JDBC] SQL Exception / SQL Injection (0) | 2021.10.13 |
| [JDBC] ResultSet / Statement 활용 (0) | 2021.10.12 |
| [JDBC] JDBC 작업 순서 / 쿼리문 생성객체 / bind 변수 (0) | 2021.10.11 |