티스토리 뷰

반응형


개발일지 24일차(2018-08-09)

전체 목록, 진행 상황 보기 : 링크 



Singleton Design Pattern

 

시스템에 객체를 단 한번 생성해서 공유해 사용하고자 할 때 적용하는 디자인패턴 

 how? 외부에서 객체 생성할 수 없게 생성자에 private 을 명시 

 static 변수 초기화 시점에 자신의 객체를 생성 

 static 메서드로 한번 생성된 객체를 공유한다. 

 ex) 회원수 조회.jsp ----new MemberDAO()--> MemberDAO()

         검색.jsp ----new MemberDAO()-->

 

  위와 같이 동일한 객체를 반복해서 생성해 사용하므로 메모라낭비--> 

  이 경우 Singleton Pattern 을 적용해 시스템 상에서 단 한번 객체를 생성해 여러 곳(jsp) 에서 사용하게 한다.

  이 후 Spring Framework 에서 객체 운영의 기본 방식이 Singleton 으로 운용된다. 

 

 code 예)  예외처리가 있을경우 

 class MemberDAO(){

  private static MemberDAO instance;

  private MemberDAO throws Exception{

  }

  public static MemberDAO getInstance(){

  if(instance==null)

  instanc=new MemberDAO();

  return instance;

  }

  }

Ex) CompanyDAO.class

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
32
33
package test.singleton;
 
//Singleton Design Pattern 연습
class CompanyDAO{
    // class loading 시점에 단 한번 생성 
    private static CompanyDAO instance = new CompanyDAO();
    // 외부에서 생성할 수 없게 private 생성자로 정의 
    private CompanyDAO() {
        System.out.println("CompanyDAO 객체 생성");
    }
    // 외부에서 현 객체를 사용할 수 있또록 static 메서드를 정의 
    public static CompanyDAO getInstance() {
        return instance;
    }
    public String findInfo() {
        return "회사정보";
    }
}
public class TestSingletonDesignPattern {
    public static void main(String[] args) {
        //error : private 생성자이므로 외부에서 생성불가 
        /*CompanyDAO dao =new CompanyDAO();
        System.out.println(dao.findInfo());*/
        // CompanyDAO 객체의 주소값(레퍼런스)를 반환받는다. 
        CompanyDAO dao = CompanyDAO.getInstance();
        System.out.println(dao.findInfo());
        CompanyDAO dao2 = CompanyDAO.getInstance();
        System.out.println(dao.findInfo());
        CompanyDAO dao3 = CompanyDAO.getInstance();
        System.out.println(dao.findInfo());
    }
}
 
cs


반응형
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크