ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Singleton 패턴을 활용하는 경우를 예를 들어 설명하시오.
    개발/ios 2023. 2. 15. 23:59

    ios 면접 레포지토리 링크

    자바에서도 스프링과 함께 많이 사용했던 싱글톤 패턴입니다. ios에도 존재하긴 하는데 잘 안 쓰는 것 같더라고요. 한번 Singleton 패턴에 대해 알아봅시다

    Singleton 패턴이란?

    • 공식문서에 의하면 '단일 공유 클래스 인스턴스를 사용하여 공유 리소스에 대한 액세스를 제공하는 패턴'입니다.
    • 싱글톤 클래스 내에서 static let , 즉 타입 프로퍼티로 자기 자신의 인스턴스를 가지고 다른 객체에서 해당 프로퍼티에 접근하여 속성을 공유합니다.
    • 이로 인해 싱글톤 클래스가 처음 생성됐을 때 단 1회만 객체가 생성됩니다.

    구현 방법

    • 간단히 내부에 static 타입 프로퍼티를 선언 후 싱글톤 클래스의 객체를 할당해줍니다.
    class Singleton {
        var age = 0
        static let shared = Singleton()
    }
    • 해당 객체를 사용해서 속성을 관리할 객체에서는 Singleton() 인스턴스를 새로 선언하지 않고 타입 프로퍼티인 shared 를 다른 변수/상수에 할당 후 속성에 접근합니다.
    • Singleton 클래스가 처음 메모리에 생성될 때 shared 타입 프로퍼티를 위해 Singleton() 객체가 1번 생성되는 것을 제외하고는 객체를 생성하지 않습니다.
    class Family1 {
        let sharedInstance = Singleton.shared
        var familyAge = 3
        sharedInstance.age = familyAge // 싱글톤 객체의 age에 저장
    }

    Singelton 패턴의 효능(?)

    • 사용하기 진짜 쉽.습.니.다. 공유 클래스를 만든다 -> 내부에 전역 타입 프로퍼티를 선언한다 끝😄
    • 객체를 단 한번만 생성하기 때문에 메모리 낭비를 막고 내부 속성을 캡슐화 할 수 있습니다.

    Singleton 패턴의 단점

    테스트 코드 작성을 방해한다

    • 싱글톤 클래스는 사용자가 객체를 여러번 생성할 수 없도록 생성자를 private으로 선언하여 접근제한한다.
    • 테스트 코드는 더미 객체를 생성하여 진행하기 때문에 TDD를 실현할 수 없다..참조의 투명성을 보장하기 힘들다
    • 이게 무슨 말이냐, 작은 프로젝트에서는 해당 싱글톤을 공유하는 객체의 수가 적기 때문에 어떤 객체의 속성이 싱글톤 속성에 할당되었는지 추적할 수 있으나 그 규모가 커질수록 싱글톤 속성의 원본이 누구였는지 찾기 힘들어진다는 의미!동시성에 약하다
    • 싱글톤의 최고 장점은 객체를 1개만 생성하는 것이나 이것은 싱글 쓰레드 환경에 한해서이다. 다양한 사용자가 멀티 쓰레딩 환경에서 싱글톤 객체에 접근했을 때 의도치 않게 두 개의 싱글톤 객체가 생성될 수도 있다!

    결론

    위에서 서술한 단점들로 인해 anti-pattern이라고도 여겨지며 기피하는 패턴이지만 그 편리함으로 인해 작은 프로젝트에서는 가볍게 쓸만하다

    참고 문헌

    애플 공식 문서

    희찬님의 Swift: Singleton 포스팅

    싱글톤은 나쁘다?

    싱글톤 디자인 패턴의 장단점

    댓글

Designed by Tistory.