싱글턴 패턴은 소프트웨어 설계 패턴 중 하나로, 클래스의 인스턴스가 오직 하나만 생성되도록 보장합니다.
이 패턴은 전역적으로 접근 가능한 단일 인스턴스를 제공하여, 앱 내에서 공유 리소스에 대한 중앙 집중적 관리를 가능하게 합니다.
예를 한번 들어보죠,
우리 집 고양이가 있어요. 이름은 "휴지"라고 합시다.
이 휴지가 특별한 이유는 우리 집에 단 하나뿐이기 때문이죠.
어디서나 휴지를 찾으면 그 휴지는 바로 우리 집 고양이, 유일무이한 존재입니다.
이렇듯, 싱글턴 패턴도 우리 집 휴지처럼 앱 전체에서 단 하나만 존재해야 하는 특별한 패턴입니다.
싱글턴 패턴은 마치 냉장고처럼, 모두가 공유해야 하는 리소스나 서비스에 적합합니다.
공유 리소스 접근: 냉장고에 있는 김치처럼, 데이터베이스 연결이나 네트워크 세션 같은 것들이 여기에 해당됩니다.
설정 정보 관리: 우리 집 냉장고 온도 설정 같이, 앱 전체에 걸쳐 공통적으로 사용되는 설정 정보를 관리할 때 유용합니다.
네트워크 통신: 인터넷이 우리 집에서 하나뿐이듯, 앱에서도 하나의 네트워크 통신 객체로 모든 것을 처리할 수 있습니다.
사용자 세션 관리: 마치 집안에 있는 사람들을 체크하는 것처럼, 사용자의 로그인 상태를 전역적으로 관리합니다.
로깅: 우리 집 CCTV가 모든 움직임을 기록하듯, 앱의 모든 로그를 한 곳에서 관리할 수 있습니다.
싱글턴 패턴을 만드는 건, 냉장고에 '휴지 전용'이라고 스티커 붙이는 것만큼 간단합니다.
간단하게 코드로 예시를 들어보자면,
class CatSingleton {
static let shared = CatSingleton()
private init() {}
func miaow() {
print("야옹~")
}
}
클래스 내에 static 키워드를 사용하여 싱글턴 인스턴스를 선언
외부에서 인스턴스를 생성하지 못하도록 생성자를 private으로 설정
이렇게 객체를 만들어 주면 이제 독립적인 하나의 휴지가 되었습니다. 이제 휴지를 부를 땐 언제든
CatSingleton.shared
를 통해 앱 전체 어디서나 휴지의 야옹을 들을 수 있습니다.
싱글턴 패턴을 남발하면 마치 집안에 고양이가 너무 많아져서 아무 곳에나 야옹 소리가 울려퍼지는 것과 같습니다.
메모리 사용, 전역 상태 관리, 코드의 유연성이 떨어질 수 있으니 주의해야 합니다.
휴지가 우리 집에서만 유일한 것처럼, 정말 필요한 곳에서만 싱글턴 패턴을 사용해야 합니다.
싱글턴 패턴은 편하게 사용할 수 있는 강력한 도구지만, 모든 상황에 편리하게 사용될 수 있는 건 아닙니다.
휴지가 우리 집에서 행복하게 지내듯, 싱글턴도 적절히 사용했을 때 그 진가를 발휘합니다.
싱글턴의 사용은 코드의 복잡성 증가와 테스트 어려움을 초래할 수 있으므로, 사용 전에 그 필요성과 대안을 면밀히 검토해야 합니다.