본문 바로가기
개념정리

[디자인패턴] 싱글톤(Singleton)

by JJH0100 2022. 11. 23.
728x90
반응형

싱글톤(Singleton)

객체의 인스턴스가 오직 1개만 생성되는 패턴

하나의 객체를 생성하면 어디서든 참조할 수 있지만, 여러 프로세스가 동시에 참조하는 것은 불가능하다.

메모리 낭비를 최소화 할 수 있음.

 

형식

public class MemberDAO {	
	private MemberDAO() {
        //public을 private으로 바꿔주어야 한다
        //private으로 해주어야 외부에서 객체 생성을 할 수 없음. 
	}
    
	private static MemberDAO instance = new MemberDAO(); 
    
	public static MemberDAO getInstance() {
		return instance; //반환시에 instance이 생성
	}
}

Ex

MemberVO.class

package com.lbi;

public class MemberVO {
	private String name;
	private String userid;
	private String pwd;
	private String email;
	private String phone;
	private int admin;
	
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getUserid() {
		return userid;
	}
	public void setUserid(String userid) {
		this.userid = userid;
	}
	public String getPwd() {
		return pwd;
	}
	public void setPwd(String pwd) {
		this.pwd = pwd;
	}
	public String getEmail() {
		return email;
	}
	public void setEmail(String email) {
		this.email = email;
	}
	public String getPhone() {
		return phone;
	}
	public void setPhone(String phone) {
		this.phone = phone;
	}
	public int getAdmin() {
		return admin;
	}
	public void setAdmin(int admin) {
		this.admin = admin;
	}	
}

 

MemberDAO.class

package com.lbi;

import java.sql.*;
import javax.sql.*;
import javax.naming.*;

public class MemberDAO {
	private MemberDAO() { //생성자
		
	}	
	private static MemberDAO instance = new MemberDAO(); 
	public static MemberDAO getInstance() {
		return instance;
	}
	
	public Connection getConnection() throws Exception{ //예외처리 왜...?
		Connection conn = null;
		Context init = new InitialContext();
		Context env = (Context)init.lookup("java:/comp/env");
		DataSource ds = (DataSource)env.lookup("jdbc/TestDB");
		conn = ds.getConnection();
		return conn;		
	}
}

 

TestJSP.jsp

<%@page import="java.sql.Connection"%>
<%@page import="com.lbi.MemberDAO" %>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
	MemberDAO memDao = MemberDAO.getInstance(); //객체생성
	Connection conn = memDao.getConnection(); //데이터 연동
	out.print("DBCP 연동 성공");
%>
</body>
</html>

728x90
반응형

댓글