코드를 참고하거나 블로그를 보다 보면 종종 "싱글톤"이라는 말을 들었다. "싱글톤 패턴으로 ~~해야 됩니다"라는 말을 들어와서 이게 뭘까라고 생각해왔다. 이해를 미뤄오다가 오늘 여유가 되니까 싱글톤 패턴이 뭔지, 왜 사용하는지에 대해 알아보려고 한다.
In software engineering, the singleton pattern is a software design pattern that restricts the instantiation of a class to one "single" instance. This is useful when exactly one object is needed to coordinate actions across the system.
from Wikipedia
간단히 해석해보면, 싱글톤 패턴은 소프트웨어 디자인 패턴 중 하나로, 클래스의 객체화를 "single" 객체로 제한한다.
예를 들어 생각해보면, 가위 클래스를 객체화해서 무언가를 자르게 되는데 엄마가 쓸 때 새로 객체화하고, 아빠가 쓸 때 새로 객체화하면 가족 수 만큼 가위가 필요하게 되고 이는 결국 집에 가위가 넘쳐나는 현상이 발생하는 원인이 된다.
따라서 가위 클래스를 한 번 객체화 했으면 그 뒤로 엄마, 아빠, 동생, 나, 그 누가 쓰더라도 처음 객체화한 그 가위를 나눠 쓰면 집에 가위가 넘쳐날 일이 없다. 프로그램을 개발할 때도 마찬가지이다. 어떤 곳에서 한 번 객체화를 했으면 다른 곳에서 가위가 필요하면 이미 객체화된 가위를 갖다 쓰면 된다. 너무 비유를 한 것 같지만 대강 이해하자면 이렇다.
위에서 가위로 예를 들었으니 가위 클래스를 한 번 구현해 보겠다.
public class Scissor {
private static Scissor myScissor = null;
//Scissor를 싱글톤 패턴으로 구현
public static Scissor getInstance(Context context)
{
if(myDBManager == null)
{
myScissor = new Scissor(context);
}
return myScissor;
}
}
이렇게 코드를 짜두면 Scissor class를 사용하고 싶을 때 마다 getInstance를 통해 데려와야 하니까 불필요한 메모리 사용을 막을 수 있다.
썸네일 출처 : https://refactoring.guru/