예거's Bicycle for the mind

[iOS] ViewController 의 역할과 애플 공식 문서에 나오는 UIView, interface, layout 의 차이점 본문

iOS & Swift

[iOS] ViewController 의 역할과 애플 공식 문서에 나오는 UIView, interface, layout 의 차이점

유예거 2021. 11. 6. 21:43

앱은 하나 이상의 화면으로 이루어져 있습니다.

화면에서 다른 화면으로 이동할 수 있고, 또 되돌아올 수도 있어요.

 

View controllers are the foundation of your app’s internal structure.
Every app has at least one view controller, and most apps have several.
<View Controller Programming Guide for iOS>

 

앱의 모든 화면은 각자의 ViewController(이하 "뷰컨"), 그리고 생명주기(Life Cycle)를 갖습니다.

화면이 메모리에 처음 올라가고(로딩), 사용자에게 시각적으로 보여지고, 그리고 다음 화면을 위해 자리를 양보하며 사라지고, 메모리에서 아예 해제되기도 하는 일련의 과정을 UIViewController Life Cycle 이라고 불러요.

 

풀네임을 자세히 보면, 그냥 ViewController 가 아니라 UIViewController 인 것을 확인할 수 있는데요

그 이유는 생명주기의 모든 메서드는 애플이 제공하는 UIKit 내의 UIViewController 라는 클래스 안에 이미 정의가 되어있기 때문입니다.

 

우리는 UIViewController 클래스를 상속받은 뷰컨에서, 생명주기 메서드를 override 한 뒤에 사용하면 되는 거죠!

 

 

새로운 뷰컨 파일을 만들면, 위와 같은 내용이 이미 들어가있어요.

특히, UIViewController 를 미리 상속받아둔 걸 확인할 수 있어요. 우린 클래스 이름만 적절하게 고친 뒤에 사용하면 됩니다.

 

단순히 뷰컨이 이미 만들어져 있다고 해서, ViewController 라는 디폴트 이름을 그대로 쓰는 경우가 있는데 (저도 그랬습니다. 😅)

나중에 가서 고치지 말고, 시작하자마자 기능에 맞는 적절한 뷰컨 이름을 지어주도록 신경쓰면 좋겠네요!

 

뷰컨의 역할 4가지

뷰컨의 역할은 다음 4가지입니다.

 

- view 의 콘텐츠를 업데이트한다. 보통은 화면 아래(Model)에 있는 데이터의 변화에 따라 반응한다.

- 사용자와 view 의 인터랙션을 가능하게 만든다.

- view 의 크기를 조절하고(resizing) 전반적인 interface 의 layout 을 관리한다.

- 다른 뷰컨을 포함한, 앱 내의 다른 객체와 정보를 주고받는다.

 

여기서 헷갈리는 포인트가 있는데, 바로 view 와 interface, layout 의 차이점입니다.

 

저는 처음에 view"화면"으로 번역했는데, 뒤에 나오는 interface, layout 같은 단어도 화면, 화면의 구조를 의미하기 때문에 헷갈릴 수 있겠다는 생각이 들었어요.

 

애플 공식 문서에서 말하는 view 는 무엇일까요?

UIKit 에 들어있는 UIViewController 클래스의 Definition 을 살펴보러 가보면, view 를 볼 수 있어요.

 

 

view 는 바로, UIViewController 클래스의 인스턴스 프로퍼티입니다!

 

인스턴스 프로퍼티이면서도, UIView 라는 클래스를 상속받고 있어요.

UIView 공식 문서를 확인해봅시다.

 

 

UIView -> An object that manages the content for a rectangular area on the screen.

 

 

UIView 는 화면(screen)의 직사각형 모양의 영역의 콘텐츠를 관리하는 객체입니다.

 

공식 문서에서는 이 UIView 라는 객체는 사용자와 앱이 인터랙션하는 주요한 방법이라는 설명이 있어요.

정말 직관적인 게, 아이폰은 화면(screen)만 있지, 별도의 물리적인 키패드가 없으니까요.

 

2007년에 스티브 잡스가 1세대 아이폰을 발표할 때, 이런 말을 했었죠.

아이폰을 컨트롤 하기 위해서, 우리 모두가 태어날 때부터 10개씩 가지고 있는 세계 최고의 포인팅 기기를 사용할 거라고요.

바로 우리의 손가락이죠.

 

터치 스크린은 이미 존재하는 기술이었지만, 여러 개의 손가락으로 인터랙션하는 멀티 터치(Multi Touch) 기술은 당시 UI 인터랙션의 혁신이었다고 합니다.

 

 

다시 위의 질문, view, interface, layout 의 차이점에 대해 정리해봅시다.

viewUIView 클래스를 상속받은 객체입니다.

직사각형 영역 안에 콘텐츠(Label, Button 등의 UI 요소)를 그려내고(draw), subviews 를 관리하며, 사용자의 터치 제스쳐(gesture)에 대응할 수 있습니다. 쉽게 말하면, view 는 살아있는 객체라고 볼 수 있겠네요.

 

UIView 공식 문서를 보면, 여러 개의 view 가 앱의 사용자 인터페이스를 구성하는 기본적인 블록들이라는 표현이 나오기도 해요.

 

Views are the fundamental building blocks of your app's user interface, and the UIView class defines the behaviors that are common to all views.

 

 

반면, interface(인터페이스)는 객체가 아니라, 추상적인 표현입니다.

사전적 정의는 "키보드나 디스플레이 등처럼 사람과 컴퓨터를 연결하는 장치" 인데요, 아이폰에서의 인터페이스는 사용자가 인터랙션 할 수 있는 screen(화면)으로 이해하면 될 듯 해요.

 

layout(레이아웃) 또한 추상적인 표현입니다.

사전적 정의는 "책이나 신문, 잡지 따위에서 글이나 그림 따위를 효과적으로 정리하고 배치하는 일" 이라고 하는데, 스토리보드Auto Layout 이라는 기능이 있는 거로 미루어보아, view 가 그려내는 콘텐츠가 배치되는 구조로 이해할 수 있겠습니다.

 


원래는 ViewController 의 생명주기에 대한 글을 쓰려고 했다가, 기초 개념인 view, UIView 내용을 먼저 다루게 됐는데, 분명하게 구분해둘 필요는 있을 것 같아서 별도의 글로 분리해두려고 합니다.

 

오늘의 내용을 한 문장으로 정리해봅시다!

인터페이스를 만드는 데에는 여러 개의 view 객체들이 필요하고, view 가 그려내는 콘텐츠(UI 요소들)가 배치되는 구조를 레이아웃이라고 부른다.

 

참고 링크

[애플 공식 문서] UIViewController

[애플 공식 문서] UIView

[유튜브] 스티브 잡스 1세대 아이폰 프레젠테이션 영상

 

Comments