apple/iOS

Realm 간단하게 구조 적용하기

lgvv 2022. 9. 6. 16:25

Realm 간단하게 구조 적용하기

 

Relam을 도입했는데, 구현과 인터페이스를 분리해 재사용을 높이고자 함.

  • Realm 간단하게 적용해 볼 예정

 

예제 영상

 

이번시간에 하려고 한것

 

 

시도한 것

Realm을 사용하는데 update 메소드를 조금 변경해봄

  • 셀 내에 많은 데이터들이 있는데, 셀에서 일부 데이터만 수정하는 경우 업데이트를 시도
  • 근데 어떤 값을 설정할지 지정해주면 하나의 메서드로 처리해 응집도 및 재사용성을 높일 수 있음

 

추후에 Note와 관련하여 Service를 만드는 방향으로 수정합니다.

 

 

Realm 설계 구조 변경

애플에서는 DataModel이라고 해서 각 모델 단위(?)로 관리하는 것처럼 보임.

  • 개인적으로는 애플 예제 형태로 운영되면 너무 많은 레이어들이 모델에 의존하게 되는 형태라 결합도가 너무 높아질 것 같다는 생각이드는데 우선 애플이 보여주는 형태로 개선해보자.

(좌) Realm 기존 구조 (우) 새로운 구조

 

코드 변경 사항 적용

extension Note { 
	/// 업데이트 타입을 정의
    enum UpdateType {
        case all
        case content
        case bookmark
    }
    
    /// 해당 노트를 업데이트
    static func updateNote(note: Note, indexPath: IndexPath, forType type: UpdateType) async throws -> Void {
        // NOTE: - Realm은 이렇게해서 업데이트가 가능하다.
        try! realm.write {
            switch type {
            case .content:
                note.content = String.createRandomString(length: 30)
            case .bookmark:
                note.isBookmarked = !note.isBookmarked
            case .all:
                note.content = String.createRandomString(length: 30)
                note.isBookmarked = !note.isBookmarked
            }
            
            return
        }
    }
}