-Today's Learning Content-

  • Relationsships

1. Relationsships

내용 정리

프로젝트에서 사용할 코어데이터의 엔티티를 만들어보자

1) Relationsships란?

Relationships는 엔티티 간의 연결을 나타내는 것으로, 관계형 데이터베이스에서 테이블 간 관계를 정의하는 것과 같다. 서로 다른 두 엔티티가 어떻게 연결되는지를 설정하며, 1:N(One-to-Many), N:N(Many-to-Many) 등 다양한 관계 설정이 가능하다.

2) 엔티티 연결하기

이번 프로젝트에서는 알람 앱을 만드는데, 새로운 알람을 등록할 때 아래와 같은 데이터 값을 저장하게 된다.

  • 알람의 활성화 여부
  • 알람 시간
  • 알람 노트
  • 반복 주기(일주일)

여기서 반복 주기는 알람을 일주일(월~일)중 어느 요일마다 반복할 것인지에 대한 데이터이다.

반복 주기로 만들지 않고 월~일에 대한 Attribute를 각각 만들어줘도 되지만, 그렇게 하면 엔티티가 너무 지저분하기 때문에 별도의 엔티티로 만들어 관리해주기로 했다.

우선 엔티티를 두개 만들어준다.
그리고 Alarm 엔티티에서 Attribute를 만들어주고, WeekDays 엔티티에서도 Attribute를 만들어준 다음 Relationships를 설정한다.

Alarm 엔티티WeekDays 엔티티

이렇게 하면 두 엔티티가 서로 연결되게 된다.
우측의 인스펙터에서 Relationships에 대한 세부적인 설정도 가능하다.
예를 들어, Relationships로 연결한 엔티티가 삭제될 경우 어떻게 할 것인지, 연결 방식은 OTM으로 할 것인지 MTM으로 할 것인지 등에 대해 설정할 수 있다.

3) Relationships 데이터 저장하기

Relationships를 통해 연결한 엔티티의 데이터를 저장하는 방식은 일반적인 방식과 조금 다르다.

func addParentAndChildren(context: NSManagedObjectContext) {
    // Create a ParentEntity
    let parent = ParentEntity(context: context)
    parent.id = UUID()
    parent.name = "MyPokemons"

    // Create ChildEntities
    let child1 = ChildEntity(context: context)
    child1.value = 100
    child1.parent = parent

    let child2 = ChildEntity(context: context)
    child2.value = 200
    child2.parent = parent

    // Add children to parent
    parent.children = NSSet(array: [child1, child2])

    // Save the context
    do {
        try context.save()
        print("Data saved successfully!")
    } catch {
        print("Failed to save data: \(error)")
    }
}

위 코드처럼 Relationships로 등록한 자식 엔티티를 별도로 선언해주고 값을 설정한 뒤 자식 엔티티의 Relationships를 부모 엔티티로 설정해주면 된다.

그리고 부모 엔티티의 Relationships를 정의해준 뒤 변경 사항을 context에 저장해주면 된다.

꼭 위의 코드와 같은 방식을 채택하지 않아도 여러 방법이 있기 때문에 본인의 취향과 맞는 방식을 선택하면 좋을 것 같다.

4) 결론

처음으로 Relationships를 사용해 보았는데, 아직 실제로 테스트를 해보지 않아서 잘 작동할지는 모르겠다.
코어 데이터에 대해 아직 잘 모르는 부분이 많아서 이번 프로젝트를 기회로 많이 공부해 보면서 익혀볼 예정이다.

-Today's Lesson Review-

코어 데이터 너무 불편해
profile
이유있는 코드를 쓰자!!

0개의 댓글