@StateObject vs @EnvironmentObejct
1. 학습동기
가장 처음 공부를 시작했던 방법인 무작정 내가 만들고싶은것을 만들기.
이 방법을 먼저 채택해서 공부를 시작했다. 이 공부를 시작하고 어찌저찌 프로젝트를 구현해나가다 보니,, 어느순간 내가 모르는 소스를 내가 기능이 동작되게만 구현을 해나가는 느낌이 들었다. 그때부터 공부를 어떻게 해야하는지에 대한 고민을 정말 많이 했던것같다.
그 방법중하나가 주석을 달면서 공부하는것이다. 요즘엔 블로그며 ChatGpt 며 학습을 할 수 있는 플랫폼들이 참 많은것같다.
그래서 나는 주석을 달며 내가 모르는 개념들을 찾기 시작햇고 헷갈렸던 개념들중 하나가 바로 이 두가지에 대한 고찰이다.
이제 시작해보겠다.
2. StateObject
내가 이해한 개념으로는.
간단하게 말해서는 데이터를 공유하게 도와준다. 사실 공유라기보다는 라우터같은 느낌의 정의가 맞을것같다고 생각을 한다.
예를 들어 Pathmodel 이라는 파일에 옵저버블옵젝트를 따라는 구조체가 있다고 생각하자 . 그러면 이 PathmodelView 상단에서 @State를 사용하게 된다면 PathModelView 파일 내부에서 pathmodel 에 있는 데이터들에 접근할 수 있게해준다는 개념이다. 이것을 사용해서 PathmodelView 이곳에서 데이터들을 불러서 사용할 수 있을뿐더러 데이터의 관리등을 더 쉽게 가져갈수 있다.
3. EnvironmentObject
사실 이녀석과 2번에 StateObject는 거의 비슷하다. 근데 유일한 차이점은 새로고침이다. 객체라는 개념으로 접근을 해보자.
State는 객체를 생성을 하고 화면을 다시그리는데 있어서 State가 만든객체는 새로고침이 되지가 않는다. 즉 뷰를 새롭게 그리지않는다는 뜻이다. State는 뷰가 다시 그려지더라도 객체가 바뀌지않는 특성을 가졌고 EnvironmentObject는 바뀌는 특성을 가졌다 그러니까 둘의 차이점을 정확하게 이해하고있어아만 사용을 제대로 할 수가 있는것이다. 예를 들어 카운트 뷰를 만든다고 생각을 해보면 State로 만든녀석과 EnvironmentObject 이녀석으로 만든 부분이있고 각자 숫자가 다른 기준으로 돌아간다고해보자 나는 EnvironmentObject이녀석의 숫자만 올리고싶어서 뷰를 다시그리게 했고 그상태에서 State 가 아니라 같은 EnvironmentObject 이것을 사용했다면 두 카운트모두 둘중하나라도 업데이트가 되면 뷰전체가 다시로딩되기에 아예 새로고침처럼 첫상태로 돌아간다는것이다. 이를인지하고 개발을 진행했으면 좋겠다.
4.MVVM 패턴
이패턴에 대해서는 사실 다음시간에 더 상세히다루려고 하지만 위에것들을 공부를 하다보니 머리에 빡 꽂힌것이있었다.
한줄요약만 하고 감사인사를 올리고끝내겠다. 다들 정의는 알것이다. View 단과 Data 단을 구분해서 구현한다를 알고있겠지만
솔직히 나도 처음에 플젝을 진행할땐 내가 이거 뭐를 쓴거지 했다. 근데 위에 대한 개념이 정확히 구분된후 아 그래서 MVVM 즉 데이터를 구분할수 있다고 하는게 이런이유 때문이구나를 알게 되었다. 이후에 뭔가 프로젝트를 진행을 할때는 머리속에서일단 Serviec 에 대한 파일 Model 에 대한 파일, 뷰에 대한 파일 등등을 모두 구분이 일단 명확해지고 메모리 누수가 확연히 줄었다. 이를 보며 확실히 이게 개발자에 대한 자세이고 항상 노력해야한다고 느꼈고 무엇보다 주석 공부법 짱이다..ㅋㅋ
5. 마무리
오늘도 긴 길을 읽어주셔서 너무 감사하고 화이팅하자는 말씀을 드리고싶다..!