UIApplication.shared 라는 코드가 뭔지 몰라서 찾아보니 싱글톤이라는 디자인 패턴이며, 이것에 대해서 뭔지 몰라서 찾아보게 되었다.
싱글톤이란, 단 하나의 인스턴스만을 생성해서 사용하는 디자인 패턴을 의미한다.
당연히 이러한 디자인 패턴을 이용하는데에는 다 장점이 있겠죠?
싱글톤 디자인 패턴, 하나의 User Info 라는 전역 인스턴스가 존재한다.
구체클래스에 의존하게 되어서, ocp, dip 를 위반할 가능성이 높다.
→ 그런데 싱글톤의 경우에는 하나의 구체클래스에 의존하고 있으며, 변경을 할때도 해당 구체에 대한 직접적인 변경을 할수 있기 때문에 이 두가지 원칙에 대한 위배 가능성이 존재한다.
테스트가 어렵다. 싱글톤 디자인패턴은 하나의 인스턴스가 데이터를 공유하고 있기 때문에, 데이터와 모델의 격리가 불가능하다. 따라서 테스트가 온전하게 수행되기 어렵는 단점이 있다.
싱글톤은 멀티스레드 환경에서 동시에 singleton 객체를 생성하면, 여러개의 객체가 생성되고 이는 Thread-safe(여러스레드가 접근했을때 문제가 발생하지 않는다)하지 않다.
스위프트는 static 키워드를 사용하여 타입프로퍼티로 생성하게 되면, 이러한 thread-safe한 문제에서 벗어날수 있다.
static은 타입프로퍼티와 타입메소드를 지정하는 키워드이다.