brunch

You can make anything
by writing

C.S.Lewis

by 이준원 Oct 05. 2016

[Xcode] 스토리보드 어떻게 깔끔하게 사용할까?

스토리보드 깔끔하게 쓰는 법에 대한 고민의 글 

스토리보드를 사용하는 팀들이 많이 있는 것으로 알고 있습니다. 

스토리보드 사용시, 점점 커지고 복잡해지면서 겪는 어려움들이 있는데요.

미디움 아티클중에 스토리보드를 깔끔하게 사용하는 방법에 대해서 정리한 글이 있어서 공유 드립니다.

저도 아티클에서 제시하는 방법을 선택적으로 사용하면서 스토리보드를 최대한 깔끔하게 유지하도록 노력하고 있습니다.


아티클 요점 

 스토리보드가 너무 복잡할때, 깔끔하게 사용하는 방법에 대해 고민 

스토리보드 나누어서 사용하자 

이니셜라이징 코드를  뷰컨트롤러 코드안에 선언해주자

세그웨이를 이용하여 푸쉬, 프레젠팅 하는것 보다, 코드를 이용해서 이니셜라이징한 뷰컨트롤러를 푸쉬, 프레젠팅 하자


아래는 해당 아티클 번역 글입니다. 


아티클 내용

새로운  xcode8 인터페이스빌더 화면


 애플은 xcode8에서 인터페이스 빌더의 많은 개선들을 가져왔다. 

 사이즈클래스 사용은 더 직관적이고, 스토리보드에서 줌은 더 편리해졌으며, 프리뷰 보기는 진짜 어마어마하다. 그래서 지금까지 인터페이스 빌더 사용을 주저하던 분들에게는 이제는 더이상 주저할 이유가 없어졌다.

 근데 한편으로

 인터페이스 빌더를 이용하여, 복잡한 네비게이션과 여러뷰를 연결하는 앱을 만드는 개발자들에게는 아직 몇가지 고민해야할 이슈들이 있다. 

 이번 글에서는, 스토리보드 사용에 있어서 몇가지 꿀팁을 공유하고자 한다. 이미 스토리보드를 만들어서 사용하거나, 이제 스토리보드를 사용해서 만들고자하는 사용자로서는 매우 도움이 될것이다


1. 팀으로 일하는 분들…., 스토리보드를 나누어서 사용합시다. (혼자 작업하는 사람이라도 스토리보드 나누는 방법은 매우 좋은 습관이 될것임)


혹시 main.storyboard 이거 딸랑 하나 쓰는 분 있나요? 아래 그림처럼?

흐미 이 어마어마한 스토리보드를 보시요

(이것은 디자이너 관점에서 보면, 뷰의 전체흐름을 볼수 있어서 좋아 보인다. 사실 그러한 이유로 스토리보드가 만들어진거니까….)


근데, 개발자에게 몇가지 문제를 일으킬수 있다. 

소스관리:  스토리보드 수정후, 머지할때 컨플릭트 나게되고, 이것이 생각보다 간단하게 풀리지 않을 때가 꾀 있음. 차라리 스토리 보드 분리하는게 인생에 도움이 됨(마음이 편함)

스토리 보드파일이 무거워지고, 네비게이팅하기가 점점 힘들어짐

나도 모르게 클릭 잘못해서 컨스트레인트 바꾸는 경험도 종종 하게됨 

모든 뷰 컨트롤러 별로 스토리보드 아이디를 할당해 줘야됨, 직접 할당하다보면 실수 할 여지가 좀 있음 (오타같은)


음 알겠어요. 저런 이유때문에 스토리보드 분리를 해야 한다는 거잖아요. 분리했으면, 뭔가 서로간 연결을 어떻게 시켜주나요?

두가지 방법이 있습니다. 

  1. 스토리보드 레퍼를 하는 방법 사용

  2. 스토리보드를 코드로 연결하는 방법이 있음


첫번째 방법은 [여기서] 자세히 읽을 수 있구욥. 

이글에서는 2번째 방법에 대해서 소개하고자 해욥. (이런 방법은 복잡한 프로젝트에서 종종 사용되는 방법이에요)


2. 뷰컨트롤러 이름과 스토리보드 파일 이름을 같도록 맞추기

이건 단순히 네이밍 컨벤션인데요. 나중에 나한테 도움이 많이 되는 컨벤션이에요. 


3. 뷰컨트롤러에서 스토리보드 이니셜라이징하기 

보통 스토리보드를 이용한 뷰컨트롤러 이니셜라이징 할때,  아래와 같은 코드를 자주 접하게되죠 



뭔가 아주 깨끗해 보이진 안하요. 

왜냐하면, 스토리보드 명도 필요하고, 해당하는 뷰컨틀로러에 스토리보드ID도 설정해야하고,  또 이런 과정을 매번  홈뷰컨트롤러를 만들때 해줘야 겠죠

 더 좋은 방법은 위의 코드를 뷰컨트롤러 안에 옮겨 놓고, static method를 이용해서 스토리보드와 함께 이니셜라이징 하는 방법입니다. 

이렇게 말이죠 



그리고 스토리보드 아이디를 클래스 이름으로 설정하도록 합니다. 

아래와 같이

 

저 방법을 쓰면, 하드코딩으로 스토리보드 아이디 설정하는 방법 피할수 있고, 대신 클래스명 직접 이용해서 사용할수가 있어서 에러를 줄일수 있죠


이제 뷰컨트롤러 이니셜라이즈 할때, 한줄로 만들수 있게 되었습니다.


꾀 명확하죠?


4. 스토리보드 세그웨이관련 메소드 오버라이딩 안하기


만약 싱글 스토리보드 안에 여러 뷰컨틀롤러가 있어도 세그웨이 관련 메소드 오버라이드 하지 않은게 좋은듯 하다. 

왜냐하면 

각 세그웨이 마다 이름을 달아야 하고, 이런것은 에러 유발 가능성 있다. 하드코딩하는 것은 좋은 프로그래밍 습관은 아니다

prepareForSegue method 는 세그웨이가 추가 될때마다 점점 못생겨지고 읽기 어려운 코딩이 될거다


그럼 어떻게 하나?

 예를 들어 버튼 클릭시 다음 뷰컨트롤러로 푸쉬 할때는 단순히 IBAction 을 걸고, 이 메소드안에서 뷰컨트롤러 이니셜라이징 코드를 넣으면 된다




여기까지 입니다. 

5번도 있지만 그것은 패스 (unwind segue관한 내용입니다. 궁금하신분은 아래 원본 링크에서 5번 내용 확인 가능)


원본링크 


브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari