☕Java: 싱글턴 패턴

yoondgu·2022년 4월 28일
0

Java 

목록 보기
14/18

강의 수강 중 작성한 노트에서 내용을 발췌, 이응수 강사님 강의 의 노트와 이미지를 참조하고 있습니다.

싱글턴 패턴


📌 싱글턴 패턴

  • 애플리케이션이 실행되는 동안 객체의 인스턴스가 오직 1개만 생성되고 사용되도록 하는 패턴
  • 이러한 패턴으로 만들어진 객체를 싱글턴 객체라고 한다.

📌 싱글턴 객체

  • 프로그램이 실행되는 동안 클래스당 객체가 하나만 생성되는 객체다.
  • 다른 객체에서 사용하는 기능이 정의되어 있는 클래스들이 싱글턴 객체로 만들어야할 대표적인 예다.
    • xxxDao.java, xxxService.java, xxxController.java
  • 싱글턴 객체의 사용 이유
    • 값을 담는 용도의 객체(VO객체, Form객체, DTO객체)는 정보의 개수만큼 객체가 필요하다. 그러나, 기능 수행을 목적으로 하는 객체는 그 객체를 여러 개 생성할 필요가 없다.
    • 프로그램이 실행되는 동안 클래스당 객체가 하나만 생성되기 때문에 메모리 효율측면에서 좋다.

📌 싱글턴 객체의 정의

  • 객체를 자유롭게 생성하지 못하도록 생성자를 은닉화시킨다.
    • 생성자 메소드의 접근제한자를 private으로 하여 외부 클래스에서 같은 객체를 생성하지 못하게 한다.
public class UserDao {
  // 생성자 은닉화
  private UserDao() {}
}
  • 클래스가 로딩될 때 객체를 만들어서 정적변수에 저장한다.
    • 정적변수를 사용하면 클래스가 로딩될 때 객체가 생성된다.
    • 정적변수는 클래스가 로딩될 때 오직 한번 초기화되고, 프로그램이 종료될 때까지 유지되기 때문에 정적변수를 사용한다.
    • private 접근제한자를 사용한 이유는 외부에서 userDao변수에 접근하지 못하게 하기 위해서다.
public class UserDao {
  private UserDao() {}
  // 정적변수에 객체 저장하기
  private static UserDao userDao = new UserDao();
}
  • 정적변수에 저장된 객체를 제공하는 정적메소드 정의
    • 정적메소드를 사용하면, 객체 생성없이도 외부에서 클래스이름.getInstance()와 같이 작성하여 실행할 수 있다.
    • public 접근제한자를 사용하는 이유는 이 객체가 필요한 곳에서는 어느 곳에서나 클래스이름.getInstance()를 실행해서 객체를 제공받을 수 있도록 하기 위해서다.
public class UserDao {
  private UserDao() {}
  private static UserDao userDao = new UserDao();
  // 객체를 제공하는 정적 메소드 정의
  public static UserDao getInstance() {
    return userDao;
  }
}

0개의 댓글