본문 바로가기

Android 공부

5. 안드로이드 Singleton 패턴

singleton 패턴은 아직 개발을 하면서 많이 접한 개념은 아니었다. singleton 패턴이라는게 있고 이런 상황에 쓰는 것이라는 정도만 알고 있었는데 공부를 하면서 singleton 개념과 관련한 글을 발견하여 간단하게 정리하고 넘어가려고 한다. 

 

 


 

 

singleton 패턴은 객체의 인스턴스를 1개만 생성하여 계속 재사용할 수 있는 패턴을 말한다. Java 에서는 이를 구현하려면 해당 클래스의 인스턴스가 생성된적이 있는지 확인하고 있다면 해당 인스턴스를 사용하고 아니라면 생성하는 방법을 이용한다. 이 과정은 생각보다 코드가 복잡하고 길다는 단점을 가지고 있다. 

 

kotlin에서는 singleton으로 구현되어야 하는 클래스를 Java와는 다른 방법인 object 키워드를 사용한다. 

object singletonClass { }

Java에서 구현하는 것과 비교하면 아주 간단하게 구현이 가능하다. 

 

 

singleton 패턴을 사용하는 이유는 한번의 연산자를 통해 고정된 메모리 영역을 사용하기 때문에 메모리 낭비를 방지할 수 있다. 또한 이미 만들어진 인스턴스를 사용하는 것이기 때문에 속도 측면에서도 빠르다는 장점이 있다. 인스턴스를 하나만 만들어서 관리한다는 정의로도 알 수 있듯 도메인 관점에서 인스턴스가 하나만 존재하는 것을 보증할 수 있다. 

 

 

하지만 singleton 패턴은 해당 인스턴스가 너무 많은 일을 하거나 데이터를 공유하게 되면 문제가 생길 수 있다. 또 인스턴스를 공유할 수 있기 때문에 인스턴스 간의 결합도가 높아져 객체지향 설계의 원칙에도 어긋날 수 있다. 

 

 

singleton 패턴을 설명할 때 함께 등장하는 개념인 Companion object는 클래스 내에 private 멤버 변수에 접근할 떄 사용하는 객체로 클래스 내에 하나만 생성이 가능하다는 특징이 있다. Companion object는 room db 를 설계할 때 사용해본 적이 있는데 다른 상황에서도 몇번 더 사용하고 공부해봐야 확실히 이해할 수 있을 것 같다. 관련해서는 더 확실히 공부하고 보충하도록 하겠다.