[TIL] 09.12

Junyoung_Hong·2023년 9월 12일
0

TIL_9월

목록 보기
9/19
post-thumbnail

1. 싱글톤 패턴

싱글톤 패턴은 특정 용도로 객체를 하나만 생성하여, 공용으로 사용하고 싶을 때 사용하는 디자인 유형 을 말한다.

1-1. User 정보 저장 클래스 만들기

이번 프로젝트에서 사용했던 User의 정보를 저장하기 위핸 만든 구조체이다.

struct UserData: Codable {
    var name: String?
    var userID: String
    var password: String
    var nickname: String?
    var userImage: Data?
}

보통은 이 구조체에 접근해서 정보들을 추가, 삭제, 수정을 할 것이다. 그런데 ViewController마다 접근하는 파라미터가 다르다면, 제대로 유지하는 것이 힘들것이다.

1-2. UserData 관련 Manager 생성

UserData에 관련된 함수들이 여러개이기 때문에 UserDataManager라는 class를 만들었다. 이 class에는 사용자 추가, 프로필 업데이트, 로그아웃 등 사용자의 데이터에 관련된 함수들이 있다.

class UserDataManager {

    // 사용자 추가
    func addUser(userData: UserData) {
        users.append(userData)
        saveUsers()
    }

    // 사용자 목록 반환
    func getUsers() -> [UserData] {
        return users
    }
}

이 클래스는 많은 ViewController에서 사용할 것이다. 그 때마다 인스턴스화 시켜서 사용한다면 비효율적일 것이다. 비효율적인 부분을 해결하기 위해 전역으로 인스턴스를 생성 해서, 이 인스턴스에 접근하자는 것이 Singleton 패턴이다.

1-3. Singleton 패턴 적용

우선 static 프로퍼티로 인스턴스를 생성해주자.

class UserDataManager {

	// Singleton 인스턴스
	static let shared = UserDataManager()
    
    // 사용자 추가
    func addUser(userData: UserData) {
        users.append(userData)
        saveUsers()
    }

    // 사용자 목록 반환
    func getUsers() -> [UserData] {
        return users
    }
}

인스턴슬르 또 생성하는 것을 방지하기 위해 init 함수 접근제어자를 private로 지정해주자.

class UserDataManager {

	// Singleton 인스턴스
	static let shared = UserDataManager()
    
    // 사용자 추가
    func addUser(userData: UserData) {
        users.append(userData)
        saveUsers()
    }

    // 사용자 목록 반환
    func getUsers() -> [UserData] {
        return users
    }
    
    private init() {
    }
}

1-4. Singleton에 접근하기

이제 static 프로퍼티에 접근해서 사용을 하면 된다.

let userInfo = UserDataManager.shared.getUsers()
profile
iOS 개발자를 향해 성장 중

0개의 댓글

관련 채용 정보