접근제어 / 싱글톤 패턴

쏘스야·2023년 4월 14일
0

ios 개발자의 첫걸음

목록 보기
52/61
/**
 접근제어(Access Control)
 객체의 은닉화
 */

class SomeClass {
    private var name = "이름" // 접근제어자 : private
    
    func nameChange(name: String) {
        self.name = name
    }
}

var s = SomeClass()

//s.name = "홍길동"
s.nameChange(name: "홍길동")


/**
 싱글톤(Singleton)
 싱글톤 패턴이 필요한 이유
 - 앱 구현시에, 유일하게 한개만 존재하는 객체가 필요한 경우에 사용
 - (특정한 유일한 데이터/ 관리 객체가 필요한 경우)
 
 - 한번 생성된 이후에는 앱이 종료될때까지, 유일한 객체로 메모리에 상주
 */

// 싱글톤 패턴의 문법적 이해

class Singleton {
    // 타입 property(전역변수)로 선언
    static let shared = Singleton()     // 자신의 객체를 생성해서 전역변수에 할당
    var userInfoId = 12345
    private init() {}
}


// 변수로 접근하는 순간 lazy 하게 동작하여, 메모리(데이터 영역)에 올라감.
// 동일한 메모리 주소를 가르키고 있다.
Singleton.shared

let object = Singleton.shared
object.userInfoId = 12346


let object2 = Singleton.shared      // 유일한 객체를 가르키는 것일뿐
object2.userInfoId                  // 12346

Singleton.shared.userInfoId         // 12346


// 새로운 객체를 생성하였다.
//let object3 = Singleton()         // 새로운 객체를 찍어냄.
//object3.userInfoId                // 12345

/**
 private init() {} : 생성자를 private 선언을 하면
 새로운 객체를 찍어내지 못한다.
 */



// 실제 사용 예시

let screen = UIScreen.main                      // 화면
let userDefaults = UserDefaults.standard        // 한번 생성된 후, 계속 메모리에 남음 !!
let application = UIApplication.shared          // 앱
let fileManager = FileManager.default           // 파일
let notification = NotificationCenter.default   // 노티피케이션(특정 상황, 시점을 알려줌)
profile
개발자

0개의 댓글