[iOS] 싱글톤(Singleton) 패턴

-inn·2022년 3월 18일
0

iOS

목록 보기
8/8

Singleton Pattern이란?

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


사용하는 이유

class Info {
    var image: String
    var name: String
    var age: Int
}

A 뷰컨트롤러에서 image를, B 뷰컨트롤러에서 name과 age의 정보를 받아 UserInfo 클래스에 저장해야 한다고 하자.

// A 뷰컨트롤러
let infoImg = Info().image
infoImg = "Jenny"
// B 뷰컨트롤러
let infoName = Info().name
infoName = "Jenny"
let infoAge = Info().age
infoAge = 24

이렇게 저장할 시, 각 Instance의 프로퍼티에만 저장되고, 하나의 Instance에 모든 정보가 저장되지 못한다.

→ Info 클래스에 대한 Instance는 최초 생성될 때, 한 번만 생성해 전역에 두고, 그 이후에는 Instance 접근만 가능하게 하자 !
= Singleton Pattern


Singleton 사용방법

예시 : CollectionView에서 셀 클릭 시, 해당 셀의 데이터를 다음 뷰 컨트롤러에 전달하는 경우

  1. Singleton class 생성

    // SingletonInfo.swift
    class SingletonInfo {
        // 1. static 프로퍼티로 Instance 생성
        static let shared = SingletonInfo()
        
        var image: String
        var name: String
        var age: Int
        
        // 2. init 함수 접근제어자 private로 지정
        private init() {
            image = "0inn"
            name = "영인"
            age = 24
        }
    }
  2. CollectionView 클릭 시, SingletonInfo에 데이터 입력

    // CollectionViewController.swift
    func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
            let cell = testModel.itemAt(indexPath.row)
            // 싱글톤 사용하여 데이터 전달
            SingletonInfo.shared.image = cell.image
            SingletonInfo.shared.name = cell.name
            SingletonInfo.shared.age = cell.age
            // 화면 전환
            presentNVC(SingletonTestViewController())
        }
  3. 클릭 시, 보여질 뷰 컨트롤러에 SingletonInfo 데이터 전달

    // SingletonTestViewController.swift
    private func setupDisplay() {
            image.image = UIImage(named: SingletonInfo.shared.image)
            name.text = SingletonInfo.shared.name
            age.text = String(SingletonInfo.shared.age)
        }

참조 블로그

Swift) 싱글톤 패턴(Singleton Pattern)

profile
☁️

0개의 댓글