본문 바로가기

iOS 관련 공부

접근제어(Access Control), 싱클톤(Signleton) 패턴

접근제어(Access Control)

객체의 은닉화

class SomeClass {
    private var name = "이름"
    
    func nameChange(name: String) {
        self.name = name
    }
}


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

외부에서 private으로 선언된 속성/메서드에 접근불가하므로 

코드 내부의 세부 구현 내용을 숨기는 것이 가능(은닉화)

 

name 속성은 외부에서 볼 수 없음(접근 불가)

 

 

접근 제어가 필요한 이유

  • 애플이 자신들이 원하는 코드를 감출 수 있음
  • 코드의 영역을 분리시켜서 효율적 관리 가능
  • 컴파일 시간이 줄어든다 (컴파일러가 해당 변수가 어느범위에서만 쓰이는지를 인지 가능)

 

싱글톤(Singleton) 패턴

메모리상에 유일하게 1개만 존재하는 객체 설계

 

싱글톤 패턴이 필요한 이유

앱 구현시에 유일하게 한개만 존재하는 객체가 필요한 경우에 사용(특정한 유일한 데이터/관리 객체가 필요한 경우)

한번 생성된 이후에는 앱이 종료될 때까지 유일한 객체로 메모리에 상주

 

 

싱글톤 패턴의 문법적 이해

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

static let 이름 = 객체생성() -> (데이터 영역에 유일한 객체의 주소가 담겨있음)

자기자신을 초기화해서 static let 변수에 할당

일반적으로 공유되는 자원이라는 뜻에서 shared 용어를 많이 사용

 

변수로 접근하는 순간 lazy하게(지연저장속성처럼) 동작하여, 메모리(데이터 영역)에 올라감

Singleton.shared    // 이 순간에 올라감
let object = Singleton.shared
object.userInfoId = 777

Singleton.shared.userInfoId   // 출력: 777

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

Singleton.shared.userInfoId   // 출력: 777

동일한 객체를 가르키고 있기 때문에 전부 같음

 

 

새로운 객체를 생성하는 것도 가능

let object3 = Singleton()
object3.userInfoId    // 출력: 12345

 

 

새로운 객체를 찍어낼 수 없도록 하는 방법도 있음 (올바른 싱글톤 패턴의 구현)

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

let object3 = Singleton()   // 오류 생성자에 접근 불가

private init() 설정으로 새로운 객체 추가적 생성이 불가하게 막는 것 가능

 

 

 

실제 사용 예

앱을 실행하는 동안 하나의 유일한 객체만 생성되어서 해당 부분을 관리

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

타입속성처럼 접근해서 사용하는 싱글톤 패턴

실제 애플이 만들어놓은 프레임워크에서 사용하는 싱글톤 패턴

'iOS 관련 공부' 카테고리의 다른 글

속성(Property)과 메서드(Method) - 2  (0) 2025.02.24
타입 캐스팅 (Type Casting)  (0) 2025.02.21
속성(Property)과 메서드(Method) - 1  (0) 2025.02.16
초기화 (initialization) - 1  (0) 2025.02.13
클래스와 구조체  (0) 2025.02.06