이끼의 생각

[Android Design Pattern] 싱글톤 패턴 (1) 본문

Mobile App/안드로이드와 Java

[Android Design Pattern] 싱글톤 패턴 (1)

IKKIson 2019. 5. 12. 05:57

Singleton Pattern


싱글턴(싱글턴)패턴은 어떤 객체의 인스턴스를 오직 하나만 존재하게 보장하고, 이 인스턴스에 접근할 수 있도록 전역적인 접촉점을 제공하는 패턴이다.


이건 위키백과에서 검색된 뜻으로 정확하지만 추상적이고 이해하기가 좀 어려운 설명입니다.


조금더 쉽게 설명해드리면......




왜 사용할까?


프로그램을 개발하면서 객체를 하나만 써야되는 경우가 많이 있는데, 예를 들어


1) 이미지, 오디오, 영상 그리고 내장DB 파일, DBCP와 같은 리소스를 관리하는 객체


2) 쓰레드풀, 캐쉬, 레지스트리, 그래픽카드, WIFI, Bluetooth 등의 디바이스 드라이버나 하드웨어를 접근관리하는 객체


3) 어플리케이션의 사용자 설정, 시스템 설정, 로그 기록, 대화 상자 등과 같은 객체


들!! 과 같이 실제 유일한 객체를 여러 곳에서 생성하여 사용하는 상황에서 싱글톤을 사용한다.




다시 정리


어플리케이션이 실행 시작하면 전역(static)으로 최초로 한번만 메모리할당을 하여, 이 할당된 메모리에서 인스턴스를 생성(Private)한다. 이 객체가 필요하여 생성자가 여러 곳에서 여러 차례 호출(getInstance) 되더라도 실제로 생성되는 인스턴스는 없고 최초로 생성된 인스턴스가 호출되어 반환한다.




장점이 있네


1) 고정된 메모리 영역을 할당 받기 때문에 한번의 new 생성자 호출로 인스턴스를 생성하고 그 왜에는 메모리에 있는 인스턴스를 호출만 하므로 메모리낭비 방지와 컨텍스트 스위칭(객체 로딩 시간 및 연산) 비용을 아낄 수 있다.


2) 싱글톤으로 인해 인스턴스는 전역 인스턴스이므로 공유하기가 쉬워 진다.


 안드로이드에서는 액티비티, 클래스에서 일일이 생성하거나 인텐트하기 번거롭고 비용낭비가 발생할 수 있는데 싱글톤 인스턴스로 접근하기 편하다.




문제가 있네


내가 생성한 싱글톤 인스턴스가 연산이 많거나 킨 소스코드 작성으로 작업량이 많은 경우 공유 시 다른 클래스간의 결합도가 높아지면 객체지향적이지 못하게된다.


<여기서 결합도와 응집도란??>

    응집도 : 하나의 기능을 제공하는 모듈의 내부에서 집중하는 정도(복잡성), 하나의 모듈(클래스) 내에서 구성요소들 간의 기능적인 관련성

    

    결합도 : 모듈 간의 연관관계, 상호 의존 정도, 모듈(클래스)들 간의 상호 의존성


    높은 응집도와 낮은 결합도 : 객체지향 설계 원리로써 응집도는 높게, 결합도는 낮게 해야되면 재사용성과 수정, 유지보수를 용이하게 한다.


이러한 객체지향적이지 않은 싱글톤 설계는 재사용, 수정, 유지보수 뿐만 아니라 테스트하기도 어려워 질 수 있다.


그리고 멀티쓰레드에서 하나의 싱글톤을 사용하는 환경이면 동기화처리도 중요하다.


마지막으로, goto를 사용할까라는 잔인한 생각조차, 극악무도한 생각은 안하실거라 믿습니다.ㅎㅎ(사용하고 새드엔딩, 자멸하지맙시다)


     


UML로 보자


가장 기본적인 싱글톤 UML 입니다.



'Mobile App > 안드로이드와 Java' 카테고리의 다른 글

[Android Design Pattern] 싱글톤 패턴 (2)  (0) 2019.05.12
Comments