싱글톤 패턴의 정의?
싱글턴 패턴(Singleton pattern)을 따르는 클래스는 생성자가 여러 차례 호출되더라도 실제로 생성되는 객체는 하나이고 최초 생성 이후에 호출된 생성자는 최초의 생성자가 생성한 객체를 리턴. 즉 하나의 해당 클레스에서 단 하나의 인스턴스만 만들도록 보장하는 방법으로 하나의 인스턴스만을 재사용하여 불필요한 자원 낭비나 오버헤드 등을 막을 수 있음.
주로 공통된 객체를 여러개 생성해서 사용하는 DBCP(DataBase Connection Pool)와 같은 상황에서 많이 사용.
싱글톤 만드는 방법?
> 외부에서 생성자를 호출할 수 없도록 제한해야 한다. (생성자의 접근제어자 : private 사용)
이유: 외부에서 생성자를 호출할 때마다 인스턴스가 생성되기 때문.
> 자신의 클래스 타입으로 정적(static) 필드를 선언하고 자신의 인스턴스를 생성하여 초기화를 한다. 생성한 정적 필드 또한 외부 클래스에서 값을 변경하지 못하도록 접근제어자를 private로 설정.
> 외부에서 호출이 가능한 정적 메소드인 getInstance()를 정의.
이때 정적 필드에서 생성한 인스턴스를 리턴값으로 돌려줌. 즉, 외부 클래스에서 싱글톤으로 정의된 클래스의 인스턴스를 얻기 위해서는 getInstance() 메서드를 호출하여만 함.
class 클래스 {
private staic 클래스 객체명 = new 클래스(); // 자신의 인스턴스 생성
private 클래스(){ .. } // 생성자 호출 제한
public static 클래스 getInstance(){ // getInstance 메서드 정의
return 객체명; // 생성한 인스턴스를 리턴
}
}
싱글톤의 문제?
> 프로그램 전체에서 하나의 객체만을 공통으로 사용하고 있기 때문에 각 객체간의 결합도가 높아지고 변경에 유연하게 대처할 수 없다. (싱글톤 객체가 변경되면 이를 참조하고 있는 모든 값들이 변경되어야 하기 때문에)
> 멀티쓰레드 환경에서 대처가 어느정도 가능하지만 고려해야 할 요소가 많아 사용이 어렵고, 프로그램 전반에 걸쳐서 필요한 부분에만 사용한다면 장점이 있지만 그 포인트를 잡기가 어렵다.
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 |