-
Notifications
You must be signed in to change notification settings - Fork 0
Open
Description
배경
- 팀 프로젝트를 진행하면서 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를 사용하기로 판단했다
-
이와 같은 고민의 경우 현직자분과 이야기할 기회가 있다면 이야기를 나눠보고싶다
Reactions are currently unavailable