Thief of Wealth

페이지가 많아질수록, App.tsx에서 Routing을 하고 있는 숫자로 많아진다.

결과적으로 아래와 같은 아주 긴, 컴포넌트가 만들어지게 된다.

 

<Switch>
          <Route exact path={ROUTE.COMMON.HOME} component={LoadableHome} />
          <Route exact path={ROUTE.COMMON.ABOUT} component={About} />
          <Route exact path={ROUTE.COMMON.NOTICE} render={() => <ErrorPage notice="개발중인 페이지 입니다." />} />
          <ConditionalRoute
            exact
            path={ROUTE.NON_AUTHORIZED.OAUTH}
            component={OAuth}
            condition={!user}
            redirectPath={ROUTE.AUTHORIZED.MY_PROJECT}
          />
          <ConditionalRoute
            path={ROUTE.NON_AUTHORIZED.LOGIN}
            component={Login}
            condition={!user}
            redirectPath={ROUTE.AUTHORIZED.MY_PROJECT}
          />
          <ConditionalRoute
            path={ROUTE.AUTHORIZED.USER_PROFILE}
            component={LoadableUserProfile}
            condition={!!user || isLoading}
          />
          <ConditionalRoute
            path={ROUTE.AUTHORIZED.SCRIPT_PUBLISHING}
            component={LoadableScriptPublishing}
            condition={!!user || isLoading}
          />
          <ConditionalRoute
            path={ROUTE.AUTHORIZED.NEW_PROJECT}
            component={LoadableNewProject}
            condition={!!user || isLoading}
          />
          <ConditionalRoute
            path={ROUTE.AUTHORIZED.PROJECT_MANAGE}
            component={LoadableManage}
            condition={!!user || isLoading}
          />
          <ConditionalRoute
            path={ROUTE.AUTHORIZED.STATISTICS}
            component={LoadableStatistics}
            condition={!!user || isLoading}
          />
          <ConditionalRoute
            path={ROUTE.AUTHORIZED.PROJECT_DETAIL}
            component={LoadableProjectDetail}
            condition={!!user || isLoading}
          />
          <ConditionalRoute
            path={ROUTE.AUTHORIZED.MY_PROJECT}
            component={LoadableMyProject}
            condition={!!user || isLoading}
          />

          <Redirect to={ROUTE.COMMON.HOME} />
        </Switch>

 

지금까지 간과하고 있었는데, 같은 로직이 중복되는 코드가 너무 많음을 알 수 있다.

 

유지보수가 쉬운 코드를 위하여 공통된 로직을 추상화했다.

 

<Switch>
  <Route exact path={ROUTE.COMMON.HOME} component={LoadableHome} />,
  <Route exact path={ROUTE.COMMON.ABOUT} component={About} />,
  <Route exact path={ROUTE.COMMON.NOTICE} render={() => <ErrorPage notice="개발중인 페이지 입니다." />} />
  {nonAuthorizedRoute.map(({ path, component, redirectPath }) => {
  return <ConditionalRoute path={path} component={component} condition={!user} redirectPath={redirectPath} />;
  })}
  {authorizedRoute.map(({ path, component }) => {
  return <ConditionalRoute path={path} component={component} condition={!!user || isLoading} />;
  })}
  <Redirect to={ROUTE.COMMON.HOME} />
</Switch>

권한이 필요한 Path와 권한이 필요없는 Path를 상수화하여, render로직에서는 map으로 순회만하는 코드로 바꾸었다.

이렇게 하니, 훨씬 가독성도 높아지고 새로운 Path를 추가한다던지 할때 유용해진것같다.

커밋: https://github.com/woowacourse-teams/2021-darass/commit/8906d7832d7cae843cda26a8fa60dbf634295cf4

 

간단한 리팩터링이지만, 코드퀄리티가 높아진 기분이다.

앞으로도 이렇게 냄새가 나는 코드들을 잡아낼 수 있도록 후각을 발달시켜야겠다.

 

'개발 > 개발 리포트' 카테고리의 다른 글

2021/09/26 : 수많은 if문을 Object Literal로 바꾸자  (0) 2021.09.26
2021/09/25 : z-index 에 관한 고찰  (0) 2021.09.25
2021/09/23 : 테스트 커버리지를 높이자  (0) 2021.09.24
2021/09/20  (0) 2021.09.20
2021/09/19  (0) 2021.09.20
profile on loading

Loading...