두번째 팀 과제에서 모델을 생성해야했다. 데이터가 적었고 접근하는 로직이 많지 않을거란 생각으로 구조체를 사용하여 모델을 만들었으나 count 세줘야할 변수(var)가 필요하게 되었고 구조체안에서 그것이 계속 변경되는 것이 몬가..몬가.. 부자연스러운 느낌이 들었다.
struct CoffeeList {
let imageName: String
let menuName: String
let menuPrice: Int
let type: String
var count: Int = 0
}
그리고 이런 케이스에 대해서 조금 더 찾아보게 되었다.
Equatable
프로토콜을 구현해야 한다.종합하여 생각하자면 함수에 전달될때마다 복사되기 때문에 count값이 일관되게 유지되지 않을 수 있는 문제가 있을 수 있었고, 이것저것 기능로직이 생겨나감에 따라 여러 스레드에서 이 구조체 인스턴스에 접근하게 되었다.
이런 상황에서 해결방안은 구조체를 클래스로 바꾸거나 동기화를 해줄 수 있는 구현이 필요했다. 나는 클래스로 바꿔야하나라고 생각했지만 팀원분이 delegate 패턴을 적용시켜오셨다...
delegate패턴으로서 객체간의 통신이 가능 하게 하는데 사용자 클릭으로 amount값이 변경될 때마다 그것을 viewController에 알려서 업데이트하는 것이다
이런 비슷한 경우에 싱글톤 패턴을 적용해서 프로젝트 전역에서 인스턴스를 공유하므로 데이터 값이 뒤틀릴 수 있는 상황을 방지할 수도 있다.
프로젝트 필요 사항에 따라 적절한 선택을 해야하고 많이 만들어보면서 뭐가 적합할지 느낌이 오게 될것이다. 함께 사용하여 각자의 장점을 활용하는 것도 좋을듯하다