두번째 내비게이션 컨트롤러는 왜 필요한가?

zoe·2021년 11월 1일
1

궁금한점

  • 야곰은 왜 재고수정 뷰컨을 Navigation Controller에 임베드 했을까
  • 왜 재고수정 뷰컨은 Navigation Controller를 가지는가
  • Navigation Controller 에 Navigation Controller에 임베드된 뷰를 띄웠을때의 장점
    + 언제 저렇게 사용해야 할까

궁금한 이유

나는 재고수정화면이 모달로 띄워져야 한다고 생각한다.
왜냐하면 재고수정화면은 잠깐 머무는 화면이고 정보의 흐름과 관계가 없기 때문에 depth가 깊어질 필요가 없다고 느꼈다. 화면전환을 모달방식으로 할거라면 내비게이션 컨트롤러를 가질 필요가 없다.
여기서 Navigation Controller에 왜 임베드했는지 1차로 이해가 안됐다

하지만

사람마다 생각이 다를 수 있다. 누군가는 재고수정 뷰컨을 navigation 방식으로 띄우는게 적절하다고 생각 할 수 있기때문에 navigation 방식으로 화면을 보여주는것에 대해서도 생각을 해봤다
그래도 왜 navigation controller에 임베드 했는지는 이해가 안된다

왜냐하면 첫번째 뷰컨이 navigationController를 가지기 때문에 navigation controller에 임베드 했을 때 누릴 수 있는 것들은 다 누릴 수 있다고 생각했다 (예를들면 네비게이션 바)

재고수정 뷰컨이 navigationController에 임베드 됨으로서 좋은점은 무엇일까?

  • 프로젝트의 스텝3에 있는 완성본 사진처럼 재고수정뷰컨에 뒤로가기 버튼을 없앨 수 있다 (재고수정 뷰컨이 내비게이션 컨트롤러의 루트뷰가 되기 때문이다)
  • 핵심경험을 준수한다...?
  • 프로젝트가 커지고, 기능이 추가되면서 재고수정 뷰컨에사 depth가 깊어질 여지가 있다면 그에 대비할 수 있다

아리의 생각

스텝2 핵심경험중 하나인 내비게이션 바 및 바 버튼 아이템의 활용 도 준수하고 + 기획서에 나타난 완성본 사진 그대로 구현하려면 내비게이션 컨트롤러가 필요합니다

(재고수정 뷰컨이 내비게이션 컨트롤러의 루트뷰가 되면서 -> 뒤로가기 버튼이 없어지고 -> 내비게이션 바 아이템을 사용해서 오른쪽 위에 닫기 버튼도 넣어줄 수 있기 때문에)

생각이 바뀌셨는지 모르겠지만 저번주에 이야기 해봤을 때 아리는 재고수정 뷰컨을 모달방식으로 띄워져야 할것같다고 말해주셨다. 이유는 핵심경험 준수 + 기획서에 이전으로 돌아가는 버튼이 없기 때문이었던걸로 기억한다.

근데 위의 이유로 모달로 띄울 뷰에 내비게이션 컨트롤러가 필요하다고 하는건 좀 모순적이라고 생각한다.
왜냐면 모달로 띄울 뷰에 내비게이션 컨트롤러가 있을 필요가 없다. 아니 오히려 있으면 안된다.
모달은 depth가 깊어질 수 없고 / 깊어지면 안되기 때문에....

허황이 말해주신 것

내가 내비게이션 컨트롤러의 존재를 너무 불편해했더니 허황이 이렇게 말해주셨다.

object library에 내비게이션바가 있어요. 내비게이션 컨트롤러 없이도 내비게이션바를 따로 추가해줄 수 있습니다. 내비게이션바 때문에 내비게이션 컨트롤러를 가질 필요는 없습니다.

몰랐는데 object library에 내비게이션바가 있다 (허황 알려주셔서 감사합니다!)

하이라이트 된 부분을 해석해보면

이 말을 듣고 내비게이션 컨트롤러을 없앨 수 있어서 처음에는 너무 좋았다. 이렇게 허황 말대로 하면
(저작권 때문에 스토리보드 사진 첨부 불가.. 소중한 저작권)

  • 재고수정뷰컨을 모달로 띄우면서
  • 내가 불편해했던 내비게이션 컨트롤러를 없앨 수 있고
  • 내비게이션 바 버튼 아이템을 사용하니 핵심경험도 준수할 수 있고
  • 기획서에 나타난 완성본 사진 그대로 구현할 수 있다

근데 이게 대체 머선 의미가 있는지 모르겠다. 닫기버튼과 타이틀을 만들려고 + 핵심경험 준수를 위해 + 기획서에 있는 그대로 구현하려고 모달로 띄울 뷰에 내비게이션바를 추가한다?

(공식문서를 봤는데 이럴때 사용하라고 내비게이션바를 만들어 놓은것 같지 않다. 뭔가 커스텀할때 개별적으로 추가하라는것 같은데... 나중에 알아봐야겠다)

아샌의 생각

야곰은 프로젝트의 확장성 까지 고려했을 수도 있다
나중에 기능이 추가되면서 재고수정 뷰컨을 루트뷰로 해서 depth가 깊어질 수도 있기 때문이다
그래서 navigationController를 넣어준 것 아닐까? (더불어 확장성도 고려해야 한다는 교훈을 주기 위해?)

근데 이렇게 생각해도 모순되는 점이 너무 많다. 왜냐하면

  • 프로젝트 요구사항에 있는 재고수정 뷰컨에는 닫기 버튼이 있다
  • 야곰이 만들어준 스토리보드에서 재고수정 뷰컨은 내비게이션 컨트롤러의 루트뷰 이다

= 루트뷰 컨트롤러에 닫기버튼이 있다

우디가 해주신 말

모달뷰는 최종화면 입니다. 모달뷰에서 더 깊어질 수 없다. 그러면 안된다 (HIG에 위배된다)

결론

야곰은 모달방식을 의도했지만 일부러 내비게이션 컨트롤러를 넣었다.
HIG를 잘 읽자
무지성 개발자가 되지 말자

한가지 궁금한건 모달방식을 의도했다고 가정했을때
재고수정 뷰에 왜 타이틀을 넣어주셨을까?
가로화면이라서?

profile
개발하면서 마주친 문제들을 정리하는 공간입니다.

0개의 댓글