Skip to content

Realm CRUD  #7

@zzangzzangguy

Description

@zzangzzangguy

개요

  • Realm 데이터베이스를 사용하여 포켓몬 카드 정보 저장 및 관리
  • 즐겨찾기 기능 구현을 위한 CRUD(Create, Read, Update, Delete) 작업 수행
  • Realm 모델 정의 및 데이터 마이그레이션 처리

1. Realm 모델 정의

class RealmPokemonCard: Object {
    @Persisted(primaryKey: true) var id: String
    @Persisted var name: String
    @Persisted var imageURL: String
    @Persisted var isFavorite: Bool = false
    // ...
    
    convenience init(pokemonCard: PokemonCard) {
        self.init()
        self.id = pokemonCard.id
        self.name = pokemonCard.name
        self.imageURL = pokemonCard.imageURL
        // ...
    }
}
  • RealmPokemonCard 클래스를 정의하여 Realm 데이터베이스에 저장할 모델 생성
  • @persisted 속성 래퍼를 사용하여 각 필드의 저장 방식 지정
  • pokemonCard를 받아 RealmPokemonCard 인스턴스를 초기화하는 생성자 구현

2. Realm 데이터베이스 설정 및 초기화

class RealmManager {
    static let shared = RealmManager()
    private let realm: Realm
    
    private init() {
        do {
            let config = Realm.Configuration(
                schemaVersion: 1,
                migrationBlock: { migration, oldSchemaVersion in
                    // 마이그레이션 처리
                }
            )
            self.realm = try Realm(configuration: config)
        } catch {
            fatalError("Failed to initialize Realm: \(error)")
        }
    }
    // ...
}
  • RealmManager 싱글톤 클래스를 생성하여 Realm 데이터베이스 인스턴스 관리
    -Realm 설정(Realm.Configuration)을 통해 스키마 버전과 마이그레이션 처리 설정
  • 초기화 시 설정을 기반으로 Realm 인스턴스 생성

3. 즐겨찾기 추가/삭제 기능 구현

extension RealmManager {
    func addFavorite(_ pokemonCard: PokemonCard) {
        let realmPokemonCard = RealmPokemonCard(pokemonCard: pokemonCard)
        realmPokemonCard.isFavorite = true
        
        do {
            try realm.write {
                realm.add(realmPokemonCard, update: .modified)
            }
        } catch {
            print("Failed to add favorite: \(error)")
        }
    }
    
    func removeFavorite(_ pokemonCard: PokemonCard) {
        guard let realmPokemonCard = realm.object(ofType: RealmPokemonCard.self, forPrimaryKey: pokemonCard.id) else {
            return
        }
        
        do {
            try realm.write {
                realmPokemonCard.isFavorite = false
                if !realmPokemonCard.isFavorite {
                    realm.delete(realmPokemonCard)
                }
            }
        } catch {
            print("Failed to remove favorite: \(error)")
        }
    }
    // ...
}
  • addFavorite 메서드를 통해 포켓몬 카드를 즐겨찾기에 추가
  • removeFavorite 메서드를 통해 포켓몬 카드를 즐겨찾기에서 삭제
  • Realm의 write 블록 내에서 데이터 변경 작업 수행
  • 에러 처리를 위해 do-catch 문 사용

RealmPokemonCard 모델을 정의하여 Realm에 저장할 데이터 구조 설계
RealmManager를 통해 Realm 데이터베이스 인스턴스 초기화 및 관리
포켓몬 카드를 즐겨찾기에 추가/삭제할 때 addFavorite, removeFavorite 메서드 호출
Realm의 write 블록 내에서 데이터 생성, 수정, 삭제 작업 수행
즐겨찾기 상태 변경 시 UI 업데이트 및 관련 로직 처리

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions