Closed namsoo5 closed 3 years ago
객체를 단 한번만 생성가능하게해서, 프로젝트에서 전역적으로 사용가능하게함
앱의 뎁스가 깊은 곳에서 데이터 전달을 끌고 가야되는 경우 (A->B->C->D) 싱글턴패턴을 사용해 하나의 전역 데이터에 각각 데이터를 저장하게하고, 마지막 뷰에서 서버통신을 하는 방식으로 사용
특정한 용도로 객체를 하나 생성해서 공용으로 사용하게 한다. 여러 객체에서 접근이 가능하며 임의로 메모리에서 해제해주지 않는 이상 프로그램이 끝날 때까지 메모리에 유지됨
UserDefaults
, FileManager
, NotificationCenter
등에 주로 사용하며, 유저 정보
나 환경 설정
을 저장할 때 사용객체를 하나만 생성하게 되면, 생성한 객체를 어디에서든 참조해 사용가능하도록 만든 패턴!!
Thread-safe하게 만들어 멀티스레드에서 사용하더라도 문제가 없어야함!!
장점 : 싱글턴 객체는 최초 한번만 메모리에 할당하고 그 메모리에 인스턴스를 만들어 사용함!! (고정된 메모리 영역을 얻으면서 한번의 인스턴스를 사용하기 때문에 메모리 낭비를 방지할수가 있읍!!)
단점 : 남발하게 될 경우 데이터가 꼬이는 문제가 발생할 확률이 일반적인 구현 방식보다 높기 때문에 적절한 방식으로만 사용하도록!!
위에서 적은 Thread-safe하게 만들기 위해서는 let으로 선언해 사용하면 됨!! static 전역변수로 선언한것은 lazy하게 동작을 하는데 이때문에 처음 Singleton을 생성하기 전까지 메모리에 올라가지 않음!!
특정 객체가 앱에서 유일하게 하나만 존재하여 다른 객체들이 그 안의 내용을 공유하는 방식입니다. scope 에 제약받지 않고 어디서든지 접근이 가능합니다.
고정된 메모리 영역을 얻으면서 한 번의 인스턴스만 사용하기 때문에 메모리 낭비를 방지할 수 있습니다. 그러나 이 싱글톤 인스턴스가 다양한 곳에서 참조되어 데이터를 공유할 경우, 다른 클래스의 인스턴스들 간 결합도가 높아져서 설계에 위험이 따릅니다.
비슷한 시스템 프레임워크나 프로퍼티로는 UserDefault
, NotificationCenter
등이 있겠습니다.
앱이 생성 될 때부터 종료될 때까지 객체의 한 인스턴스만을 사용해서 이용해야하는 경우 사용한다. 그렇기 때문에, 너무 과하게 사용할 경우 오히려 좋지않을 수도 있다.
사용 예시 보통 전역전으로 무언가를 관리해야할 때 사용했는데, iOS 프레임워크 단에서 봤을 때는 UserDefaults, FileManager, UIApplication의 객체들이 있다. 개인적으로 선언할 때는 CoreData를 사용해야할 경우 이를 관리하는 객체나 네트워크를 관리하는 객체를 만들 때 사용했다.
Singleton패턴
하나의 인스턴스만을 생성해서 전역적으로 사용하기위한 패턴
앱내 다양한 곳에서 정보를 접근할때 간편하게 사용 앱실행중 사용자의 정보를 싱글턴으로 만들어서 접근가능