Singletone Pattern 이란?

이창형·2023년 4월 19일
0

iOS 박살내기

목록 보기
7/10
post-thumbnail

Singletone Pattern?

싱글톤 패턴은 ??

특정 용도로 객체를 하나만 생성하여 공용으로 사용하고 싶을 때 사용하는 디자인 패턴

이해가 잘 안되시죠? 예제 보실게요

import UIKit


class Person {
    var name: String?
    var age: Int?
    var adress: String?
}


// ViewControllerA
let personInfo = UserInfo()
personInfo.name = "이창형"
// name: 이창형
// age: nil
// adress: nil

// ViewControllerB
let personInfo = UserInfo()
personInfo.age = 26
// name: nil
// age: 26
// adress: nil

// ViewControllerC
let personInfo = UserInfo()
personInfo.adress = "울산"
// name: nil
// age: nil
// adress: 울산

사람의 정보를 저장하는 PersonInfo 라는 클래스를 만들고 A, B, C 라는 3개의 ViewController 가 있다고 가정해보죠!

A에서는 사람의 이름을 B에서는 사람의 나이를 C에서는 사람의 주소를 받아야 합니다. 하지만 이런식으로 받으면 UserInfo의 인스턴스를 A,B,C에서 3개를 생성해 줘야합니다. 하지만 이 인스턴스들은 모두 다른 메모리를 가리키게 되죠.

그래서 저희가 원하는 대로 한 사람의 모든 정보가 들어가지 않습니다!! 이를 싱글톤 패턴을 이용하여 수정해보도록 할게요.

class PersonInfo {
    static let shared = PersonInfo()
    
    var name: String?
    var age: Int?
    var adress: String?
    
    private init() {}
}


// ViewControllerA
let personInfo = PersonInfo.shared
personInfo.name = "이창형"
// name: 이창형
// age: nil
// adress: nil

// ViewControllerB
let personInfo = PersonInfo.shared
personInfo.age = 26
// name: 이창형
// age: 26
// adress: nil

// ViewControllerC
let personInfo = PersonInfo.shared
personInfo.adress = "울산"
// name: 이창형
// age: 26
// adress: 울산

달라진 것이 뭘까요???🧐

shared라는 프로퍼티가 생성된 것과 private init() 생성자가 추가 되었다는 것 입니다.

shared는 static으로 선언되었기 때문에 프로그램이 실행될 때 메모리에 올라가고 그에 따라 personInfo 인스턴스는 딱 한 번 생성됩니다. let이라 변경도 불가능하죠!

이것을 이용하여 personInfo.shared를 사용하면 어디서든 인스턴스에 접근할 수 있고 static으로 선언되었기 때문에 인스턴스 내부의 프로퍼티 값을 공유합니다.

또한 생성자가 private 으로 선언되었기 때문에 외부에서 생성자를 다시 호출하여 인스턴스를 재생성하는 것을 방지할 수 있습니다.

profile
iOS Developer

0개의 댓글