/**
접근제어(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 // 노티피케이션(특정 상황, 시점을 알려줌)