서론
작심삼일은 학업과 새로운 프로젝트로 인해 신규 기능 개발은 잠시 접어둔 상태입니다
그렇지만 코드 정리는 꾸준히 해야할 거 같아서 오랜만에 프로젝트를 열어보았는데요.
최근 알아본 스토리보드 최적화를 작심삼일 프로젝트에 적용하려고 합니다.
전에 비해 굉장히 쾌적(?)해져서 정말 뿌듯하더라고요 ㅎㅎ
오늘 사용할 스토리보드 레퍼런스 포스팅은 https://jeong9216.tistory.com/535 에서 볼 수 있습니다.
기존 스토리보드 구성
기존에는 Main 스토리보드에 모든 화면이 존재했습니다.
화면 자체가 많은 앱이 아니라 불편한 점은 없었지만 화면마다 따로 협업할 경우 문제가 생길 수 있습니다.
그래서 스토리보드 레퍼런스를 이용해 여러 개의 스토리보드 파일로 분리하기로 결정했습니다.
스토리보드 레퍼런스 사용하기
스토리보드 레퍼런스를 사용하기 위해서는 우선 스토리보드 파일을 분리해야 합니다.
화면 하나당 하나의 스토리보드로 분리해주었습니다.
각 스토리보드에는 각각의 화면을 만들면 되고 이때 탭바를 사용하신다면 탭바 아이템도 잊지 말고 배치해주어야 합니다.
마지막으로 클래스를 연결하고 Storyboard ID를 설정하면 준비는 끝났습니다.
하나만 변경하고 스크린샷을 찍었는데요 ㅋㅋ
스토리보드 레퍼런스가 너무 옹졸하죠...? ㅎㅎ
(스토리보드 레퍼런스 사용법은 맨 위에 소개드린 포스팅에서 확인 가능합니다.)
나머지 화면도 모두 변경해주면,
이렇게 매우 심플해졌습니다.
탭바 컨트롤러에 배치되는 순서대로 스토리보드 레퍼런스를 배치해서
어떤 화면으로 이동하는지도 어렵지 않게 확인할 수 있어요.
한 가지 아쉬운 점은 탭바 아이템이 적용이 안 된다는 것인데요.
만약 각 화면의 탭바 아이템도 Main 스토리보드에서 볼 수 있다면 훨씬 더 깔끔했을 거 같아요.
이건 추후에 방법이 있는지 알아보겠습니다.
스토리보드 코드 개선하기
스토리보드를 분리했으니 스토리보드를 사용하는 코드도 개선해보도록 합시다.
기존에는 스토리보드 이름을 하드코딩하여 스토리보드를 얻었습니다.
let storyboard = UIStoryboard(name: "InfoViewController", bundle: nil)
let viewController = storyboard.instantiateViewController(withIdentifier: "InfoViewController")
하지만 지난 스토리보드 포스팅에서 말씀드린 것처럼 스토리보드 이름을 UIViewController 클래스 이름과 동일하게 생성하면 이를 개선할 수 있습니다.
UIViewController를 extension 하면 각자의 클래스 이름을 얻을 수 있습니다.
String(describing: self)
"\(self)" //warning이 발생함
이를 이용해 연산 프로퍼티로 스토리보드와 UIViewController를 생성할 수 있습니다.
static var storyboard: UIStoryboard {
UIStoryboard(name: String(describing: self), bundle: nil)
}
static var instantiate: UIViewController {
storyboard.instantiateViewController(withIdentifier: String(describing: self))
}
static을 이용해 변수가 타입에 종속되게 하였고,
스토리보드만 단독으로 사용하는 일은 없지만 역할 분리를 위해 따로 생성하였습니다.
이제 처음 봤던 코드는 이렇게 변하였습니다.
let viewController = InfoViewController.instantiate
단 한 줄로 마무리 되고 하드 코딩도 하지 않아 안정성도 증가하였습니다.
또한, static 변수로 선언한 덕분에 타입.instantiate로 손쉽게 UIViewController를 생성할 수 있습니다.
마무리
유일한 스토리보드 진행 프로젝트인 작심삼일의 스토리보드 최적화를 진행해보았습니다.
아직 개선할 부분이 많이 보이네요 ㅠㅠ
다음에는 UserDefualts 코드 최적화를 진행해보도록 하겠습니다.
감사합니다!
아직은 초보 개발자입니다.
더 효율적인 코드 훈수 환영합니다!
공감과 댓글 부탁드립니다.