[42CM] 싱글톤 패턴의 장단점

·2024년 4월 30일

프로젝트-42CM

목록 보기
6/9
post-thumbnail

안녕하세요! 오늘은 싱글톤 패턴에 대해 적어보고자 합니다. 저는 싱글톤 패턴을 여러 프로젝트에 사용해왔는데, 정작 장단점에 대해 정리해본적이 없는 것 같아 정리해보고자 합니다 :)
많은 개발자들이 이 패턴을 선택하는 이유는 여러가지인데요, 그 중에서도 공유 자원을 관리하고 인스턴스 생성을 제한하는 기능이 대표적입니다. iOS 개발에서도 이 패턴을 자주 사용하는 이유는 명확합니다. 전역적으로 공유되어야 하는 자원이나 상태를 관리할 때 유용하게 사용할 수 있기 때문입니다.

싱글톤 패턴이란?

싱글톤 패턴은 클래스의 인스턴스를 하나만 생성하고, 이를 전역적으로 접근할 수 있도록 하는 디자인 패턴입니다. 간단히 말해, 하나의 클래스가 단 하나의 인스턴스만을 가지도록 보장하는 구조입니다.

class Singleton {
    static let shared = Singleton()
    
    private init() { 
        // Private initializer to prevent multiple instances 
    }
}

위의 코드에서 Singleton 클래스는 shared라는 정적 프로퍼티를 통해 인스턴스를 제공합니다. 이 클래스의 생성자는 private로 선언되어, 외부에서 인스턴스를 생성할 수 없도록 제한하고 있습니다.


싱글톤 패턴의 장점

전역 접근성
어디서든 동일한 인스턴스를 사용하여 데이터의 일관성을 유지할 수 있습니다. 네트워크 관리 객체, 설정 관리 객체 등에서 유용합니다.

메모리 절약
하나의 인스턴스만을 생성하므로 메모리를 절약할 수 있습니다. 이는 특히 큰 자원을 사용하는 경우에 유리합니다.

간편한 상태 관리
앱의 전반적인 상태를 관리하는데 유용합니다. 예를 들어, 사용자 세션 정보나 설정 값을 관리할 때 효과적입니다.


사용 시 주의할 점

싱글톤 패턴은 사용하기에 정말 간편하지만, 몇 가지 주의사항이 있습니다.

의존성 관리
싱글톤은 전역 인스턴스이기 때문에, 의존성이 높아질 수 있습니다. 이는 테스트하기 어려운 코드를 만들 수 있습니다. 의존성 주입(Dependency Injection) 패턴과 같이 다른 패턴과 조합하여 사용하는 것이 좋습니다.

초기화 시점
앱 시작 시 자동으로 초기화되는 싱글톤 객체는 초기 로딩 시간을 늘릴 수 있습니다. 필요 시점에 초기화하는 방법을 고려해야 합니다.

상태 공유 문제
여러 객체에서 동일한 싱글톤 인스턴스를 사용하게 되면, 동시 접근에 따른 데이터 불일치 문제가 발생할 수 있습니다. 이는 특히 멀티스레드 환경에서 주의해야 합니다.


결론

싱글톤 패턴은 매우 유용한 패턴이지만, 남용하지 않는 것이 중요합니다. 적절하게 사용하면 코드의 복잡성을 줄이고, 데이터의 일관성을 유지하는 데 큰 도움이 됩니다. 하지만, 필요하지 않은 경우에도 싱글톤을 사용하게 되면 오히려 코드의 유지보수가 어려워질 수 있습니다. 따라서, 상황에 맞게 신중하게 선택하는 것이 필요함을 느꼈습니다.

0개의 댓글