해결된 질문
23.10.08 04:01 작성
·
192
0
안녕하세요.
클린코드 3탄을 수강하고 너무 만족스러워서 이번 추석에 2탄을 추가로 수강했습니다. ㅎㅎ
2탄에서 뷰모델이 생성될 때 직접 데이터를 넣으시더군요.(객체가 아닌 일반 변수)
평소에 뷰모델이 생성될 때 객체가 아닌 변수도 같이 바로 넣으려고 했으나 클래스(객체)가 아니기 때문에 매번 뷰를 생성하고 initstate 에서 lazy 하게 뷰모델에 데이터를 업데이트 했었습니다.
여기서 의문이 생겨서 질문 드립니다.
객체가 아닌 일반 변수에 대해서도 의존성 주입을 하는 것이 옳은 것인가요?
만약 일반 변수에 대해서도 의존성 주입을 해야한다면(해도 된다면) getit 설정에서 어떻게 접근 하면 좋을 까요?
늦은 시간에 죄송합니다. 답변 주시면 감사하겠습니다.!!
답변 1
0
2023. 10. 08. 11:46
오오 3탄에 이어 2탄까지 감사합니다.
객체가 아닌 일반 변수에 대해서도 의존성 주입을 하는 것이 옳은 것인가요?
=> 의존성 주입이 항상 옳다고 할 수는 없습니다. 상황에 따라 선택하면 될 것 같습니다. 저의 경우에는 정적인 값일 경우에는 getit의 모듈을 통해서 의존성 주입을 하지만, 동적인 값의 경우에는 2탄처럼 하되 go_router 같이 라우팅하는 부분에서 직접 주입합니다.
만약 일반 변수에 대해서도 의존성 주입을 해야한다면(해도 된다면) getit 설정에서 어떻게 접근 하면 좋을 까요?
=> getit을 사용한다면 변수의 값을 등록하려는 시점에 getit에 등록하면 됩니다. 같은 타입의 변수가 여러개 있는 경우는 등록시 instanceName 이라는 파라미터로 이름을 정해줄 수 있을 겁니다. 그런데 이렇게 할 경우 아마도 presentation 레이어에서 직접 getit 을 활용하기 때문에 getit 의존성이 생기는 문제가 생기기 때문에 선호하지 않습니다.
presentation 레이어에서 특정 라이브러리 의존성이 생기면 UI 테스트 코드를 작성하기 어렵기 때문입니다.
이러한 내용은 앞으로 출시 예정인 '플러터 테스트 가이드' 편에서 다룰 예정입니다.
결론적으로 몇 가지 예시 코드입니다. 이 외에도 상황에 따라 다양한 예시가 있을 수 있겠습니다.
setId() 함수에 id를 추가 전달하는 경우
ViewModel의 생성자를 통해 전달하는 경우. getit 사용 안 함
2탄 다 보시고 3탄처럼 의존성 주입을 적용해 보시면 재밌을 것 같습니다.
2023. 10. 10. 01:42
정성스런 답변 감사합니다.!!
다음 강의도 기대돼요!