Apple-CS-interview / iOS-CS-interview

7 stars 1 forks source link

Singleton 패턴을 활용하는 경우를 예를 들어 설명하시오. #12

Open Do-hyun-Kim opened 1 year ago

Do-hyun-Kim commented 1 year ago

Singleton 패턴을 활용하는 경우를 예를 들어 설명하시오.

🧐 Singleton Pattern 이란?

🥰 Singleton Pattern 장점

🤔 Singleton Pattern 단점

✍️ Singleton Pattern 단점 개선

protocol LogEvent {
    func trakingEvent(event: [String: String])
}

public class Analytics: LogEvent {

    static let shared: LogEvent = Analytics()

    private init() { }

    public func trakingEvent(event: [String : String]) {
        print("envet Key: \(event.keys) 이며, event Value: \(event.values)")
    }
}

/// Example
/// 별도 IoC를 구현하여 의존성을 관리하도록 하며
/// DI을 통해 내부에서 의존성을 주입할 뿐만 아니라 , DIP  Analytics을 Protocol에 따르도록 구현하여 객체 간의 결합도록 낮추도록 하였습니다.
class DIContainer {

    public var logging: LogEvent

    init(logging: LogEvent) {
        self.logging = logging
    }

    public func didTapLoggin(){
        self.logging.trakingEvent(event: ["Jenny":"Tap"])
    }
}

let jennyUser: LogEvent = Analytics.shared
let container: DIContainer = DIContainer(logging: jennyUser)

container.didTapLoggin()
print(container.logging)

📝 참고 사이트

ronick-grammer commented 1 year ago

Singleton 패턴이란

Singleton 객체 생성방법

static let 을 사용하고, 클래스 내부에 pirvate init 을 해서 외부에서 생성할 수 없도록 한다.

class Singleton {
    static let shared = Singleton()

    private init() {}
}

Swift에서의 Singleton 객체

*dispatch_once: App 라이프 사이클에서 단 한번만 실행되도록 보장해 주는 것을 의미하며 Thread Safe을 보장 받기 위해 사용한다.

Singleton 패턴의 장점

Singleton 패턴의 단점

📝 참고 사이트

Hminchae commented 1 year ago

Singleton Pattern 이란?

내가 어떤 객체를 만들어서 그 객체 하나만을 사용하는 패턴을 의미. 만약 자주 써야하는 객체일 경우, 객체를 만들어서 메모리에 올려놓을 것이다. 그럼 그 메모리에 올려놓은 객체를 지속적으로 데리고 다니면서 사용하고, 계속 참조해서 이용하는 패턴이다.

Singleton Pattern 사용 장점

하나의 메모리에 있는 객체를 지속적으로 사용함으로써 메모리 누수를 방지할 수 있다. 또한 싱글톤으로 구현한 인스턴스는 '전역'이므로, 다른 클래스의 인스턴스들이 데이터를 공유할 수 있다는 것이 장점이다.

Singleton Pattern 사용 단점

싱글톤 인스턴스가 혼자 너무 많은 일을 하거나, 많은 양의 데이터를 공유시키면 다른 클래스들의 결합도가 높아진다. 이렇게 되게 되면 객체 지향 설계 원칙 중에 '개방 폐쇄 원칙 (Open Closed Principle, OCP)'를 위반하게 된다.

OCP란 기존의 코드를 변경하지 않으면서 기능을 추가할 수 있도록 설계해야한다는 원칙이다. 고로, 확장에 대해서는 개방적이고, 수정에 대해서는 폐쇄적이어야 한다. 코드 사이의 결합도가 높아지게 되면, 유지보수가 힘들어지고, 테스트도 원활하게 진행해주기 쉽지 않음

또한 멀티 스레드 환경에서 동기화 처리를 해주지 않았을 때, 인스턴스가 두개 이상 생성되는 문제도 발생할 수 있다. 따라서 싱글톤 패턴은 반드시 사용해야하는 상황이 아니면, 지양하는것이 좋다고 함

사용

  1. Singleton Class 생성하기
    • static 프로퍼티로 Instance 생성하기 : static let 으로 상속 방지 및 외부 접근 가능
      static let shared = SinglethonSample()

      let 으로 선언한 것은 기본적으로 thread-safe 하므로 별도로 dispatch_once_t 가 불필요하고, static 전역변수로 선언한 것은 lazy하게 동작하므로 처음 Singleton을 생성하기 전까지 메모리에 올라가지 않음

vichye-1 commented 1 year ago

Singleton 패턴이란?

특정 용도로 객체를 하나만 생성하여 공용으로 사용하고 싶을 때 사용하는 디자인 유형 한 Instance로 어디 클래스에서든 접근 가능하게 하는 것

Singleton의 활용

Singleton 의 장점

Singleton 의 단점

📝참고