[iOS] Programmatically의 시작
TIL(Today I Learned)
- swift에는 UI 작성하는 대표적인 두가지 방법이 있습니다.
아직은 초보이기때문에 당연히 storyboard를 사용하는 것이 간다하지만 언젠가는 코드로 작성하게 될테고, 밴드부의 성장세로 보아 곧 시작할 협업에 있어서 필요하다는 생각이 들어서 조금씩 알아보기로 했습니다.
Storyboard
장점
- UI를 즉시 시각적으로 확인 가능 - 앱을 실행하지 않아도 바로바로 UI의 변경을 확인 가능
- ViewController의 코드 간결성 - 스토리보드 상에서 해결할 수 있는 작업들로 인하여 VC의 코드가 간결
단점
- Storyboard의 크기에 따른 로딩속도의 증가 - 화면이 늘어날수록 로딩속도가 증가 -> 스토리보드 분리로 어느정도 해결 가능
- 충돌 문제 - 스토리보드는 결국 xml파일이기 때문에 충돌이 일어날 경우 해결이 어려움
- 필요하지 않은 ViewController들로 인한 메모리 낭비 - VC를 따로 init 해줄 필요가 없지만 사용하지 않는 VC들도 생기기때문에 메모리 낭비 발생
Programmatically
장점
- Storyboard의 상위호환 - 스토리보드로 할 수 있는 모든것이 가능 + @
- 문법적 직관성 - 코드는 결국 문법적 의미가 존재하는 것이기 때문에 다른 사람이 봤을 때도 이해하기 편한 코드를 선호 -> 코드 리뷰 / 충돌 해결 가능
- 성능 측면 - xml을 파싱해서 코드로 변환시키는 작업을 포함하는 스토리보드에 비해 코드로만 작성하면 성능면에서 유리
단점
- ViewController의 코드 복잡성 - 스토리보드의 장점이 곧 코드의 단점. 오토레이아웃만 적용해도 코드가 늘어남
- UI 확인 - 앱을 실행시켜야만 UI의 변경을 확인 가능
Programmatically 설정
- Main.storyboard 파일 삭제
- info.plist 에서 StortBoard Name = Main 삭제
- Application Scene Manifest 안에 BuildSettings에서 UIKit Main storyboard file base name = Main 삭제
- 앱의 첫 화면으로 쓸 UIViewController 생성
- SceneDelegate 의 scene 함수 수정
func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
guard let windowScene = scene as? UIWindowScene else {return}
self.window = UIWindow(windowScene: windowScene)
//루트뷰로 설정할 뷰컨트롤러 클래스
let rootViewController = MainViewController()
let rootNavigationController = UINavigationController(rootViewController: rootViewController)
// window를 설정하고 makeKeyAndVisible 설정.
self.window?.rootViewController = rootNavigationController
self.window?.makeKeyAndVisible()
}
댓글남기기