---
# System prepended metadata

title: Untitled

---


1. 싱글턴 디자인 패턴은 언제 활용하면 좋을까?
- 프로젝트 내에서 한가지의 객체만 존재하여야 할때  
- 단일 제어 지점이 바람직한 경우
    
2. 내 프로젝트에 적용한다면 어디에 적용하는게 좋을까?
- `ios-juice-maker` 프로젝트를 `예`로 들어 생각해본다면, 프로젝트 내에서 한가지의 객체만 존재하여야 하여야 하니, 과일 재고를 체크하는 `FruitStore` 클래스에 `싱글톤` 패턴을 적용하는 것이 좋을 것 같다.


3. 싱글턴 디자인 패턴의 장점과 단점은 무엇이 있을까?
- 장점: 고정된 메모리 영역을 얻으면서 한 번의 new로 인스턴스를 사용하기 때문에 메모리 낭비를 방지할 수 있다. 또한 싱글톤으로 만들어진 클래스의 인스턴스는 전역 인스턴스이기 때문에 다른 클래스의 인스턴스들이 데이터를 공유하기 쉬워진다. 
- 단점: 싱글톤 인스턴스가 너무 많은 일을 하거나 많은 데이터를 공유시킬 경우, 다른 클래스의 인스턴스들 간에 결합도가 높아져 '개방-패쇄' 원칙을 위배하게 된다.
'개방 패쇄의 원칙': 확장에 대해서는 열려있어야 하지만, 변경에 대해서는 닫혀 있어야 한다.
-> 유지보수 관리 및 수정이 쉬운 코드를 작성하는 것이 필수적!

4. 코코아터치 프레임워크에서 싱글턴이 활용된 사례는 무엇이 있을까?
- URLSession
    - URL 세션을 관리하는 클래스 `URLSession.shared`을 통하여 객체에 접근할 수 있습니다.
- UIApplication
    - iOS에서 실행되는 중앙제어 어플리케이션 객체 `UIApplication.shared`을 통하여 객체에 접근할 수 있습니다.
- FileManager
    - 애플리케이션 파일 시스템을 관리하는 클래스 `FileManager.default`을 통하여 객체에 접근할 수 있습니다.
- NotificationCenter
    - 등록된 알림의 정보를 사용할 수 있게 하는 클래스 `NotificationCenter.default`을 통하여 객체에 접근할 수 있습니다.
- UserDefaults
    - Key-Value 형태로 간단한 데이터를 저장하고, 관리할 수 있는 인터페이스를 제공하는 데이터 베이스 클래스 `UserDefaults.shared`을 통하여 객체에 접근할 수 있습니다.

5. 싱글턴 디자인 패턴을 구현할 때는 어떤 방식(열거형, 구조체, 클래스 등)을 활용하여 타입을 구현하는 것이 좋을까? 그 이유는?
값(enum,strcut) 타입은 인스턴스화 시 값이 참조가 되는것이 아니고 복사가 되는 것이여서 싱글턴 패턴 적용이 불가능하다.

참고 자료
[부스트코스 : 싱글턴 (SingleTon) - iOS 앱 프로그래밍](https://m.boostcourse.org/mo326/lecture/16855)
[싱글톤 패턴(Singleton pattern)을 쓰는 이유와 문제점](https://jeong-pro.tistory.com/86)

