2022. 8. 11. 00:13ㆍARCHITECTURE/Design Pattern
🧸 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배 이상의 메모리가 할당되어 질 것이다.
이러한 문제를 해결하기 위해 처음에 할당한 객체를 계속해서 사용할 때 사용하는 것이다.
'ARCHITECTURE > Design Pattern' 카테고리의 다른 글
[Design Pattern] 디자인패턴 -MVC 패턴 (0) | 2022.09.18 |
---|---|
[Design Pattern] 디자인패턴 -Delegate Pattern (델리게이트 패턴) (0) | 2022.08.14 |