JAVA

JAVA 싱글톤(Singleton)

짱코딩러 2022. 8. 17. 00:20

자주 사용하는 기능 사용 시, 미리 메모리에 생성해놓고 사용.

메모리에 1개의 객체만 존재하게 한다.

 

싱글톤 클래스

public class SingletionTest {
	public static void main(String[] args) {
		System.out.println("첫 번째 getInstance() 호출");
		//getInstance()로 MySingleton객체 생성
		MySingleton a = MySingleton.getInstance();
		//직접적으로 new 쓰면 오류남(생성자가 private이라서)
		//MySingleton a = new MySingleton();
		
		System.out.println("두 번째 getInstance() 호출");
		MySingleton b = MySingleton.getInstance();
		
		if(a==b) {
			System.out.println("두 싱글톤은 동일한 객체입니다.");
		}
	}

}

 

싱글톤 사용 예제

//단 1개의 인스턴스만 생성되는 클래스 작성
public class MySingleton {
	//변수 static으로 지정
	private static MySingleton mySingleton = null;
	
	//생성자 private으로 작성(외부 호출 불가)
	private MySingleton() {
		System.out.println("MySingleton 인스턴스 생성");
	}
	//getInstance()를 통해 접근하도록 함.
	//접근 할 메서드는 public으로 작성
	public static MySingleton getInstance() {
		if(mySingleton == null) {
			mySingleton = new MySingleton();
		}
		
		return mySingleton;
	}
	//외부 클래스에서는 new를 통한 인스턴스 생성 불가
}

출처: 초보자를 위한 자바 프로그래밍

 

 

예제2

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class JdbcConnectionUtil {
	private static JdbcConnectionUtil instance;
	private String url = "jdbc:oracle:thin:@localhost:1521:XE";
	private String user = "jspuser";
	private String password = "1234";
	
	private JdbcConnectionUtil() {}
	
	public static JdbcConnectionUtil getInstance() {
		synchronized (instance) {
			if(instance == null) {
				instance = new JdbcConnectionUtil();
			}
		}
		return instance;
	}
	
	public Connection getConnection() throws SQLException {
		return DriverManager.getConnection(url, user, password);
	}
	
	public void close(ResultSet rs) {
		if(rs != null) {
			try {
				rs.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
	}
	
	public void close(Statement stmt) {
		if(stmt != null) {
			try {
				stmt.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
	}

	public void close(Connection conn) {
		if(conn != null) {
			try {
				conn.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
	}
}

'JAVA' 카테고리의 다른 글

JAVA 문자열 쪼개기 StringTokenizer charAt  (0) 2022.11.11
JDBC 한번에 여러개 처리 addBatch, executeBatch  (0) 2022.10.06
JAVA 쓰레드  (0) 2022.07.29
JAVA 컬렉션 프레임웍 List Set Map  (0) 2022.07.29
JAVA Calendar  (0) 2022.07.26