본문 바로가기

iOS/Smeem 개발일지

[Refactor] DiaryViewControllerFactory() 생성

728x90

도입이유

생성로직들이 매 매서드마다 겹친다...
매서드마다 그 안에서 DiaryViewFactory()랑 viewModel을 참조하고 있다.
처음 리팩할때만해도 이 로직이 중복된다는 생각을 못했는데.. 킹받으니 Factory 클래스를 하나 새로파자

DiaryViewController를 상속받는 일기 작성 뷰 컨트롤러들의 생성 메서드들이 각 클래스의 익스텐션에 들어있어서 너무 파편화되었다는 생각이 들었다.

 

해결책으로 DiaryViewControllerFactory() 클래스를 하나 새로 파서 만들어주기로 했다.

 

그리고 swiftApiDedignGuides에 따르면 팩토리 메서드 패턴에서 메서드의 네이밍은 make를 권장하고 있다.

 

createWithDiaryView에서 ViewController를 반환하니 makeViewController()로 변경하기로 했다.

⛑️ 에러 발생

깔끔해지긴 했는데.. 에러파티네

Instance member 'diaryViewFactory' cannot be used on type 'DiaryViewControllerFactory'

인스턴스 멤버 'diaryViewFactory'는 'DiaryViewControllerFactory' 타입에서 사용할 수 없다라..

static 메서드 내에서 정적(static) 메서드를 호출할 때는 클래스 자체에 대해 접근하므로, 인스턴스 속성에 접근할 수 없다고 한다.

쏘 클린 앤 깔끔

의존성 주입 시켜주고 일반 메서드로 변경해서 간단히 해결.



## 문제 발생

근데 이렇게 되면 일기 작성뷰로 화면전환을 시도하는 모든 ViewController에서 DiaryFactory를 참조해야하는 문제가 생긴다.

이래서 코디네이터 패턴 쓰는건가

결론은

어차피 Factory 메서드로 생성하고 있어 클래스를 따로 만들어 추상화를 하는 방식이 더 맞는 방향이었다고 생각한다.  코디네이터 패턴도 도전해보고 싶어지네..