iOS 개발 기록

UIKit에서 UI를 제작하는 방법 3가지의 장단점 본문

UIKit

UIKit에서 UI를 제작하는 방법 3가지의 장단점

택꽁이 2022. 5. 31. 16:08
728x90

 

1. Storyboard

정의 : 여러 애플리케이션 뷰들의 전환을 레이아웃 하기 위한 방법,

Storyboard 사용 유무 설명
사용할 때 - 다수의 서로 연결된 뷰 컨트롤러의 이동할 때에 경우, 네비게이션의 흐름(pop, push, present, dismiss )을 쉽게 해줌
- 뷰 컨트롤러가 자동으로 생성되므로 alloc이나 init을 해줄 필요 없음
- 테이블 뷰 컨트롤러의 이점으로는, 셀을 함께 디자인해서 테이블뷰와 함께 둘 수 있으며 여러 형태의 셀 템플릿을 디자인할 수 있음 
사용하지 않을 때 - 복잡한 레이아웃을 가진 뷰일 경우 (코드 추천)
- 뷰가 이미 XIB이나 코드로 개발 되어 있을 때
장점 / 단점 설명
장점 - 성능 퍼포먼스로는, 최초 뷰컨트롤러 하나만 생성된 후 나머지 연결된 뷰는 세그가 동작할 때 동적으로 객체화
- 프로토타입 제작 스토리보드와 코드 몇 줄로 빠른 목업 프로토타입이 가능
단점 - 여러 사람이 작업할 경우 충돌 발생 소지가 아주 높고 머지가 쉽지 않음
- 재사용성 : 단일 뷰 컨트롤러를 추출하여 다른곳에 사용하기 어려움. 스토리보드는 의존하는 모든 뷰 컨트롤러들과 함께 복사 혹은 이동해야 함 
- 데이터 흐름 스토리보드는 뷰 컨트롤러들 사이의 흐름을 다루지만 데이터의 흐름은 관여하지 않음

 

 

2) NIB

정의 : 단일 뷰 요소로 인터페이스 빌더에서 레이아웃 할 수 있는 방법. Nib는 바이너리 형태, Xib는 xml 형태. Nib를 컴파일하면 xml이 됨.

NIB 사용 유무 설명
사용할 때 - 모달 뷰, 간단한 로그인/회원가입 뷰, 설정, 팝업 윈도우, 재사용 가능한 뷰, 재사용 가능한 테이블 셀
사용하지 않을 때 - 복잡한 레이아웃
- 스토리보드에서는 단순하게 처리할 수 있는 복잡한 화면전환을 가진 뷰 컨트롤러들
장점 / 단점 설명
장점 - 모듈 객체지향 관점에서 뷰를 여러 분리된 모듈로 쪼개서, 개발/테스트/디버그를 쉽게 해줌
- 재사용성 여러 클래스에서 동일한 레이아웃을 공유할 경우 좋음
 
(로그인 뷰와 회원가입 뷰는 패스워드 필드 하나를 감추는 형태로 비슷한 기능과 레이아웃을 공유할 수 있음)
단점 - NIB는 필요할 때 로드가 됨 필요할 때 외에는 메모리를 사용하지 않으나, 로드 시 지연이 있을 수 있음

 

 

3) 코드

정의 : UI를 코드로 구현

코드 사용 유무 설명
사용할 때 - 다이나믹(변화가 크거나 빈번한) 뷰
- 둥근 모서리나 그림자 등의 효과를 갖는 뷰
- NIB와 스토리보드를 사용하는 것이 복잡하거나 불가능한 경우
사용하지 않을 때 - 보통 코드로 만든 UI는 언제나 사용되며, 좋지 않은 경우는 드뭄
- NIB와 스토리보드가 테이블에 몇 가지 장점이 있지만, 코드 사용을 만류할 만한 목록에 넣을 만한 합당한 단점이 없는 것 같음
장점 / 단점 설명
장점 - 스토리보드와 NIB으로 할 수 있는 어떤 것도 코드로도 가능
- 스토리보드와 NIB으로 할 수 없는 것들은 언제나 코드로 구현할 수 있음
- 직접 작성해서 그리므로 UI를 코드로 작성하는 법을 알면 그 이면에 어떤 일이 일어나는지 알 수 있음
- 뷰가 이리 저리 움직이는 다이나믹 레이아웃이나 내용물에 기반을 두고 변화하는 레이아웃 등이 있을 때 코드만이 UI 디자인에 있어 유일한 방법인 경우가 있음
- 협업시 충돌 NIB나 스토리보드보다 충돌을 해결하는 것이 그리 어렵지 않음
- 재사용성 코드로 작성하는 뷰는 재사용 가능한 디자인으로 구현할 수 있음
단점 - 프로토타입 제작 레이아웃이 화면에 어떻게 보여지고 작동하는지 보여주기 위해 작업해야 하는 시간이 NIB와 스토리보드에 비해 오래 걸림
- 리팩토링  누군가 오래 전에 작성한 코드를 리펙토링 하는 것이 훨씬 복잡해지며 구성요소들이 커스텀 메서드나 특정한 숫자들을 이용해 위치와 애니메이션을 결정하면 디버깅에 고통이 수반됨

 

 

'UIKit' 카테고리의 다른 글

[UIKit]Modern Collection View  (0) 2023.02.21
[UIKit]UICollectionViewCompositionalLayout (iOS 13.0 +)  (0) 2023.02.21
[iOS]Scene, Window, View의 개념  (0) 2023.02.15
View의 라이프 사이클  (0) 2022.05.31
AutoLayout의 특징  (0) 2022.05.31