프로그래밍/JAVA

[Java] 싱글톤(singleton) 패턴을 활용한 DB접속

하와이블루 2022. 8. 12. 23:32
728x90

 

 

싱글톤 패턴은 디자인 패턴 중 하나로 객체의 인스턴스가 단 한개만 생성되어 사용하는 것을 의미하며, 메모리 측면에서 공유자원이기 때문에 메모리 낭비를 방지할 수 있다.

 

이런 패턴은 프로그램 내에서 하나로 공유해야하는 객체를 싱글톤 패턴으로 처리하여 모든 사용자가 해당 객체를 공유하여 사용할 수 있도록 할 때 사용된다.

 

싱글톤 패턴을 사용하여 BD에 연결하는 코드를 다른 클래스로 만들어 사용하고 싶을 때 사용할 수 있도록 코드를 작성해보자.

 

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

public class Dbconn {
    private static Connection conn;
    public static Connection getConnection() throws SQLException,ClassNotFoundException{
        String url = "jdbc:mysql://127.0.0.1/DB?useSSL=false";
        String userid = "root";
        String userpw = "0000";
        Class.forName("com.mysql.cj.jdbc.Driver");
        conn = DriverManager.getConnection(url,userid,userpw);
        return conn;
    }
    public static void dbclose(){
        try{
            conn.close();
            conn = null;
        }catch (SQLException e){
            e.printStackTrace();
        }
    }
}

이렇게 클래스를 구현해주고 필요할때 클래스를 호출하여 사용이 가능하다.

 

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

public class Jdbc6 {
    public static void main(String[] args) {
    
        System.out.println("****** 회원 목록******");
        StringBuilder sql = new StringBuilder();
        sql.append("select mem_idx, mem_userid, mem_name, mem_hp from tb_member");
        try {
        
            Connection conn = Dbconn.getConnection();
            Statement stmt = conn.createStatement();
            ResultSet rs = stmt.executeQuery(sql.toString());
            //ResultSet 인터페이스를 통해 레코드 단위로 데이터 호출
            
            while (rs.next()) {  // rs.next() 데이터 유무 확인
                int mem_idx = rs.getInt("mem_idx");
                String mem_userid = rs.getString("mem_userid");
                String mem_name = rs.getString("mem_name");
                System.out.println("번호 : " + mem_idx + ", 아이디 : " + mem_userid + ", 이름 : " + mem_name);
            }
            
            Dbconn.dbclose();
        } catch (Exception e) {
            e.printStackTrace();
        }

    }
}

/* 실행결과
****** 회원 목록******
번호 : 1, 아이디 : apple, 이름 : 김사과
번호 : 2, 아이디 : banana, 이름 : 반하나
번호 : 3, 아이디 : orange, 이름 : 오렌지
번호 : 4, 아이디 : melon, 이름 : 이멜론
번호 : 5, 아이디 : berry, 이름 : 배애리
번호 : 6, 아이디 : cherry, 이름 : 최애리
번호 : 12, 아이디 : avocado, 이름 : 안가도
*/

 

 

 

 

 

728x90