본문 바로가기

Dev.iOS/About

[iOS_Intro] 1. iOS Application의 구조



Chapter 1. iOS Application Structure
iOS Application은 기본적으로 Objective-C ( 오브젝티브 C )라는 언어로 이루어져 있다. 오브젝티브 C는 스몰톡에서 파생된 객체 지향 언이이다. C를 기반으로 하는 언어이므로, 루프, 형식, 포인터 등의 모든 문법이 C와 같다. 넥스트스탭, 오픈 스텝 코코아터치에 이르는 애플의 역사와 유산을 물려받은 언어이다. iOS 5 버전부터 ARC라는 자동 메모리 관리 도구가 적용되었다. 더 이상 메모리 누수를 막으려고 카운트 레퍼런스를 사용할 필요가 없다.

오브젝티브 C 클래스는 보통 헤더파일과 구현 파일을 포함한다.
헤더 파일은 클래스의 공개 인터페이스 즉, API를 정의한다.
구현 파일은 말 그대로 클래스의 실체를 구현하는, 즉 API 세부 구현을 담당하는 파일이다.
앱에서 보여주는 데이터는 클래스의 API와는 관련이 없다.
이 두 가지 파일은 빌드 과정에서 컴파일 되어 바이너리가 된다.

iOS Application에서는 UI ( User Interface )가 바이너리 형식으로 변환되어 처리된다.
Xcode 는 포함된 이미지, 아이콘 등을 최적화하면서 UI를 바이너리 형식으로 컴파일 한다.

iOS Application을 만들려면 UI 그리기 코드(UIKit), 매핑 지원(MapKit), 저수준 그리기(CoreGraphics) 등 많은 공유 라이브러리를 사용한다. 애플에서는 이러한 공유 라이브러리들을 프레임워크라고 부른다. CoreGraphics 같은 프레임워크는 애플리케이션 제작에 있어서 필수적인 코드를 포함하고 있으므로 항상 추가해야 한다.



기본적인 iOS 패턴 - MVC***
iOS 기기는 항상 전체 화면에서 Application이 실행된다.
즉 사용자는 앱이 화면에 보여주는 특정 뷰를 통해서만 앱과 상호작용을 한다.

Model
앱에 필요한 데이터를 포함한다.

View
버튼처럼 사용자가 상호작용을 할 GUI요소를 가리키는 컴포넌트이다,
보통 GUI Editor를 통해서 구성한다. 코드로도 물론 구성할 수 있다.

Controller ( ViewController ) 
델리게이트라고도 하며, 정보 흐름을 제어하는 로직을 포함한 컨트롤러이다.
정보를 저장하고 표시하며 어떤 뷰가 언제 보이게 될지 결정한다.


컨트롤에서 발생하는 이벤트를 액션과 연결하면
사용자 인터페이스의 사용자 동작이 애플리케이션의 코드와 연결된다.
컨트롤 ( Control )
버튼, 텍스트 상자 등을 말한다. 즉, 컨트롤은 뷰이다. 컨트롤은 시각적 정보, 폰트, 텍스트 색, 이미지를 눌렀는지 아닌지, 배경색 등의 정보를 포함한다. 컨트롤은 사용자에게 어떤 정보를 표현하고 입력을 수집하는 역할을 한다. 컨트롤에는 애플리케이션 관련 코드를 넣지 말고 이벤트 발생 정도의 단순한 동작을 수행하게 구현하는 것이 좋다.

애플리케이션 로직은 뷰 컨트롤러의 애플리케이션 코드에 포함되어 있다. 구조상 사용자는 로직을 볼 수 없다. 사용자가 어떤 기능을 사용하려 할 때 애플리케이션이 무엇을 해야하는가, 어떻게 행동해야 하는가에 집중하면 된다.

이벤트 ( Event )
컨트롤마다 다른 이벤트를 발생시킨다. 이 이벤트의 목적은 사용자가 무엇을 했다는 사실을 시스템에 알리는 것이다. 가장 대표적인 이벤트로 Touch Up Inside라는 이벤트가 있다. 사용자가 화면의 버튼에서 손을 떼었음을 애플리케이션이 이벤트를 통해 알게 되는 것이다.

액션( IBAction ) 
액션이란 이벤트가 발생했을 때 실행되는 메소드(Objective-C code) 이다. 물론 이벤트가 발생하는 View 와 connect 되어 있어야 한다. ( IBOutlet 의 역할 ) 이벤트를 액션에 연결할 때 어떤 컨트롤이 이벤트를 보냈는지 정보를 함께 넘겨주게 된다. ( 마치 자바스크립트에서 event를 add 할 때, event 객체를 넘겨주는 것과 같다. ) 자바스크립트의 delegation과 마찬가지로 넘어오는 정보를 사용하면 하나의 액션을 서로 다른 컨트롤의 이벤트에 대응하게 만들 수 있다. 하지만 이렇게 하면 복잡하기 때문에 일반적으로 반응하려는 각 이벤트마다 그에 대응하는 액션을 만든다.

스토리보드 ( StoryBoard )
처음 프로젝트를 생성하면 Main.storyboard와 LanchScreen.storyboard 두 개의 파일이 포함되어 있다.
Main.storyboard는 말 그대로 앱을 실행시켰을 때의 화면을 나타낸다. 액션에 따른 흐름을 그릴 수 있는 파일이다.
LaunchScreen.storyboard은 앱을 실행시켰을 때, Main 파일이 로딩되면서 등장하게 되는 View 화면 하나를 그릴 수 있는 파일이다.
이 LaunchScreen.storyboard 파일에서 IBOutlet을 추가하려고 컨트롤 + 드래그를 하게 되면 되지 않는다. 즉, 액션을 추가할 수 없는 View인 것이다.
.storyboard 파일의 정체는 xml 파일이다.

iOS 개발에서는 클래스로 코드를 구현한다. 인터페이스와 구현이 합쳐져서 클래스가 되는 것이다.
인터페이스는 .h 파일인 헤더 파일에 존재하고 구현은 .m 파일인 구현 파일에 존재한다.
자바에서의 인터페이스와는 다르다. 자바의 인터페이스는 Objective-C의 프로토콜과 비슷하다.


Tip > @는 무엇인가?
Objective-C에서는 NSString이라는 문자열 클래스를 사용한다.
이 NSString 클래스가 너무 자주 사용되어 @를 이용하여 NSString을 사용할 수 있게 한 것이다.



Chapter 1. End


'Dev.iOS > About' 카테고리의 다른 글

[iOS_Intro] 4. 데이터 ( 코어 데이터 )  (0) 2016.09.18
[iOS_Intro] 3. 테이블, 뷰  (0) 2016.09.17
[iOS_Intro] 2. Objectice - C의 기본 문법  (0) 2016.09.15
[iOS] Swift란?  (0) 2016.09.08
[iOS] iOS Application Development Intro  (0) 2016.09.07