Skip to content

[기록] Repository Pattern을 사용한 것에 대하여 #2

@SH0123

Description

@SH0123

배경

  • 팀 프로젝트를 진행하면서 CoreData를 이용하여 데이터를 가져왔음.
  • 팀원들이 각자 역할을 맡은 화면의 파일에서 Data CRUD 코드를 제각기 구현하여 사용하였고, 이로인하여 코드의 중복성과 복잡성이 증가함
  • 추후 CoreData를 Realm으로 변경하거나, 서버를 이용하여 DB를 바꿔야하는 경우 변경해야하는 코드가 많을 것으로 예상됨. (변경에 취약)

과정

  • 변경에 용이한 코드 작성에 관심을 갖게되어, Repository Pattern이라는 디자인 패턴에 대해 알게됨
  • 오브젝트 책을 공부하며 기록해놓은 내용을 읽어보며 객체가 본인만의 역할을 수행하고, 확장에 용이한 유지보수에 좋은 코드를 작성해보기로 결정

고민사항

  • Usecase와 DataSource에 대해서 class와 struct중 어느것을 사용할 것인지
  • CoreData의 객체와 domain에서 사용하는 객체의 구분 필요성. 이에 대해 어떻게 구현할 것인지
  • DB 접근 객체를 사용할 때 Singleton에 대한 사용

내 생각 및 여전한 고민 사항들

DataSource

  • DB에 접근하는 객체이기 때문에 여러개의 객체를 개별로 생성하고 여러 장소에서 접근한다면 concurrency 문제가 발생할 수 있을 것 같다는 생각이 들었다
  • 그렇기에 Class로 객체를 만들고 static으로 만들어 프로그램 시작되고 끝날 때 까지 heap 영역에 존재하도록 하고 singleton으로 만들어야겠다는 판단을 했다.

Singleton vs 공유 인스턴스

Usecase

  • Struct 객체로 만들기로 결정했다.

  • [WWDC 2016 Swift Performance(https://developer.apple.com/wwdc16/416) 영상을 보면 Struct가 메모리 생성 및 할당 측면에서 Class보다 오버헤드가 덜 발생한다고 한다.

  • 하지만 Struct가 갖고 있는 property에 heap 영역에 할당되어 참조해야하는 레퍼런스가 2개 이상이면 Class보다 성능이 좋지 않을 수 있다고 한다. reference count 연산에 있어서 오버헤드가 있기 때문에!! 이에 대한 실험

  • 나의 경우 Usecase에서는 DB를 연결할 Repository(Datasource) 객체가 heap 영역에 할당되지만, static으로 프로그램 생성과 동시에 할당되어 종료될 때 까지 존재하며 단 하나의 레퍼런스만 property로 갖고있기 때문에 아직까지는 큰 문제가 되지 않는다는 판단하에 속도가 조금 더 빠를 수 있는 Struct를 사용하기로 판단했다

  • 이와 같은 고민의 경우 현직자분과 이야기할 기회가 있다면 이야기를 나눠보고싶다

Metadata

Metadata

Assignees

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions