[Design Pattern] 디자인패턴 -Singleton Pattern (싱글턴 패턴)

2022. 8. 11. 00:13ARCHITECTURE/Design Pattern

728x90
반응형

🧸 Singleton Pattern (싱글턴 패턴) 이란?

앱이 시작하고 클래스가 처음에 한번만 메모리에 할당하여 그 객체를 계속 사용하는 디자인 패턴

하나의 객체를 생성하였기 때문에 동시에 공유하여 사용하는 것이 불가능하다.

하지만 API호출같이 계속 사용하는 클래스를 싱글턴패턴으로 생성하면 메모리관리를 더 효율적으로 할 수 있다.

또한 처음에만 메모리를 할당하기에 두번째 사용할때는 객체를 호출하는 시간이 줄어들어 성능이 좋아진다.

 

 

✔️  사용예시

사용해보자!

앱을 하나 만든 다음에 swift파일을 추가하여 클래스를 하나 만든다

import Foundation

final class SingletonPattern {
    static let shared = SingletonPattern()
    
    private init() {
        print("싱글턴패턴 생성")
    }
}

그리고 자기 자신을 호출해준다. (iOS에서는 싱글턴패턴에서 이름을 shared라고 쓴다고 한다. 다른 언어도 쓰는 이름있는 지는 모르겠다)

 

import UIKit

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        
        let first = SingletonPattern.shared
        print("첫번째 싱글톤 호출 : \(first)")
        
        let second = SingletonPattern.shared
        print("두번째 싱글톤 호출 : \(second)")
        
        let third = SingletonPattern.shared
        print("세번째 싱글톤 호출 : \(third)")
        
        
    }
}

그리고 viewcontroller 파일에서 싱글턴클래스를 호출해준다

 

프린트를 하여 호출한 것을 보면 일단 싱글턴패턴의 Init() 함수는 처음에만 호출했을 때만 실행한다.

더보기

init() 함수는 사용하기전에 반드시 초기화를 해줘야하는 데 기본 값을 설정하거나 특정 값을 설정해준다. 

처음 메모리에 할당해줄 때 !! 딱 그때 설정할 값을 정해주면 된다.

 

 

그리고 싱글턴패턴의 특징이 메모리를 한번만 할당해주는 것인 데

진짜 그렇게 되는 지도 확인해보자

xcode에서 처음 숫자가 있는 부분을 클릭하게 되면 break가 걸린다.

그러면 이제 디버깅할 수 있다.

내가 클릭한 부분에서 프로세스가 멈추게 된다.

 

멈추고 나서 콘솔창을 보게되면 (11db)라고 초록색으로 쓰여있는 것을 볼 수 있다.

여기에 

po first

po 명령어를 이용하여 해당 객체의 메모리 주소를 알 수 있다

 

 

확인해보면 모든 객체가 같은 메모리주소를 할당하는 것을 볼 수 있다

 

 

앞서 말했듯이 계속 반복해서 호출해주면 객체가 여러개 생성되서 메모리를 많이 할당할 것이다.

뉴스 기사앱을 만든다고 가정했을 때

뉴스 API를 처음에 받아오면서 뿌려주고 새로고침할 때마다 이제 새로운 뉴스로 업데이트를 시켜주면서 API를 계속 호출하게 된다.

그럴 때 사용자가 100번넘게 새로고침을 하게 되면 100배 이상의 메모리가 할당되어 질 것이다.

이러한 문제를 해결하기 위해 처음에 할당한 객체를 계속해서 사용할 때 사용하는 것이다.

 

 

 

 

728x90
반응형