Android

[JAVA] 싱글톤(Singleton) 패턴

an-hayyy 2021. 4. 11. 23:10

싱글톤 패턴의 정의?

 

싱글턴 패턴(Singleton pattern)을 따르는 클래스는 생성자가 여러 차례 호출되더라도 실제로 생성되는 객체는 하나이고 최초 생성 이후에 호출된 생성자는 최초의 생성자가 생성한 객체를 리턴. 즉 하나의 해당 클레스에서 단 하나의 인스턴스만 만들도록 보장하는 방법으로 하나의 인스턴스만을 재사용하여 불필요한 자원 낭비나 오버헤드 등을 막을 수 있음.

주로 공통된 객체를 여러개 생성해서 사용하는 DBCP(DataBase Connection Pool)와 같은 상황에서 많이 사용.

 

 

싱글톤 만드는 방법?

 

> 외부에서 생성자를 호출할 수 없도록 제한해야 한다. (생성자의 접근제어자 : private 사용)

이유: 외부에서 생성자를 호출할 때마다 인스턴스가 생성되기 때문.
> 자신의 클래스 타입으로 정적(static) 필드를 선언하고 자신의 인스턴스를 생성하여 초기화를 한다. 생성한 정적 필드 또한 외부 클래스에서 값을 변경하지 못하도록 접근제어자를 private로 설정
> 외부에서 호출이 가능한 정적 메소드인 getInstance()를 정의.

이때 정적 필드에서 생성한 인스턴스를 리턴값으로 돌려줌. 즉, 외부 클래스에서 싱글톤으로 정의된 클래스의 인스턴스를 얻기 위해서는 getInstance() 메서드를 호출하여만 함

 

class 클래스 {

  private staic 클래스 객체명 = new 클래스();  // 자신의 인스턴스 생성
  
  private 클래스(){ .. }  // 생성자 호출 제한
  
  public static 클래스 getInstance(){  // getInstance 메서드 정의
   return 객체명;  // 생성한 인스턴스를 리턴 
  }
  
}

 

 

싱글톤의 문제?

 

> 프로그램 전체에서 하나의 객체만을 공통으로 사용하고 있기 때문에 각 객체간의 결합도가 높아지고 변경에 유연하게 대처할 수 없다. (싱글톤 객체가 변경되면 이를 참조하고 있는 모든 값들이 변경되어야 하기 때문에)

> 멀티쓰레드 환경에서 대처가 어느정도 가능하지만 고려해야 할 요소가 많아 사용이 어렵고, 프로그램 전반에 걸쳐서 필요한 부분에만 사용한다면 장점이 있지만 그 포인트를 잡기가 어렵다.

 

 

 

 

참고 : m.blog.naver.com/PostView.nhn?blogId=heartflow89&logNo=221001179016&proxyReferer=https:%2F%2Fwww.google.com%2F

velog.io/@kyle/%EC%9E%90%EB%B0%94-%EC%8B%B1%EA%B8%80%ED%86%A4-%ED%8C%A8%ED%84%B4-Singleton-Pattern

 

 

 

'Android' 카테고리의 다른 글

[Android] CallBack  (0) 2021.06.08
[Android] 라이브러리 만들기  (0) 2021.06.07
[Android] DB (SQLite)  (0) 2021.03.23
[Android] 리니어 레이아웃 (Doit! 레이아웃익히기)  (0) 2021.03.21
[Android] Byte <-> Srting 변환  (0) 2021.03.18