Cocoa Touch Framework, UIKit Framework, UIViewController, @IBOutlet & @IBAction(2022-07-05 수업2)

2022. 7. 8. 22:46SeSAC/수업정리

목차

1. Cocoa Touch Framework

  1-1. Cocoa Touch Framework 정의, 설명

  1-2. Cocoa Touch Framework 종류 

2. UIKit Framework

  2-1. UIKit Framework 정의, 설명

  2-2. 뷰컨트롤러(UIViewController)

  2-3. 뷰객체(UIView)

3. @IBOutlet & @IBAction

  3-1. @IBOutlet 

  3-2. @IBAction 

4. References


1. Cocoa Touch Framework

1-1. Cocoa Touch Framework 정의, 설명

-. 코코아 터치 프레임워크는 애플 환경에서 터치 기반의 애플리케이션을 제작하기 위한 도구들의 모음이다.

-. 코코아 터치 프레임워크의 가장 대표적인 인터페이스 도구인 UIKit로 인해 많은 앱들이 서로 다른 내용과 기능에도 불구하고 씬구성에서 유사성을 가질 수 있다.(동일한 유저 인터페이스 도구로 씬을 구현하기 때문)

-. 코코아 터치 프레임워크는 다양한 하위 프레임워크를 가진다.

-. 그 중 Foundation Framework, UIKit Framework 2가지가 핵심 프레임워크이다.

-. 파운데이션 프레임워크는 기본 데이터 형식, 컬랙션 및 앱의 기본 객체와 기반 기술을 제공하는 역할, UIKit 프레임워크는 iOS 앱을 구현할 수 있는 방법을 제공한다고 생각하자.(정확하지는 않지만 편의상 파운데이션 프레임워크는 내부구성, UIKit 프레임워크는 외부구성과 관련된 개념으로 구분할 수 있음)

-. iOS, watchOS, tvOS는 코코아 터치 프레임워크를 사용하고 macOS는 코코아 프레임 워크를 사용한다.(코코아 프레임워크는 데스크톱 용 애플리케이션을 개발하기 위해 사용되던 프레임워크이고, 코코아 터치 프레임워크는 코코아 프레임워크를 바탕으로 만들어졌음)

1-2. Cocoa Touch Framework 종류

  • Foundation Framework : 애플리케이션의 핵심 객체와 네트워크, 문자열 처리 등의 서비스를 제공하는 프레임워크
  • UIKit Framework : 애플리케이션의 유저 인터페이스를 제공하는 프레임워크(ex. UIButton, UILabel ...)
  • GameKit Framework : 게임을 실행할때 게임 센터를 연동하거나 근거리 연결을 제공해주는 프레임워크
  • MapKit Framework : 위치 정보나 지도 관련 서비스를 이용할 수 있도록 해 주는 프레임워크
  • ContactsUI Framework : 번들 애플리케이션으로 제공되는 주소록 앱의 인터페이스와 기능을 커스텀 앱 내에서도 그대로 사용할 수있도록 해주는 프레임 워크
  • EventKit UI Framework : 이벤트 처리에 필요한 유저 인터페이스를 제공하는 프레임 워크(달력 및 미리 알림 정보를 모달로 사용자에게 표시)
  • Message UI Framework : 번들 애플리케이션으로 제공되는 메시지 앱의 인터페이스와 기능을 커스텀 앱 내에서도 그대로 사용할 수 있도록 제공하는 프레임 워크(사용자가 앱을 떠나지 않고도 메시지 전달 기능을 추가할 수 있음)
  • UserNotifications Framework : 사용자 알림을 처리하기 위해 필요한 객체를 제공하는 프레임워크(광고 알림, 특정 세일 알림 등)
  • Webkit Framework : 웹 관련 기능을 구현하기 위해 필요한 객체들을 제공하는 프레임워크

iOS 계층구조

2. UIKit Framework

UIKit 구조

2-1. UIKit Framework 정의, 설명

-. UIKit 프레임워크는 애플리케이션의 유저 인터페이스를 제공하는 프레임워크로서 앱을 빌드하는데 필요한 핵심 오브젝트를 지원한다.(ex. UIButton, UILabel ...)

-. UIKit 프레임워크는 콘텐츠 화면에 띄우기, 콘텐츠 또는 시스템과 상호작용하기 등 앱개발에 필요한 부분을 다양하게 커스터마이징 할 수 있도록 도와준다.(공식문서 참고 : You use these objects to display your content onscreen, to interact with that content, and to manage interactions with the system. Apps rely on UIKit for their basic behavior, and UIKit provides many ways for you to customize that behavior to match your specific needs.)

-. UIKit가 사용된 앱은 앱 아이콘과, Launch Screen Storyboard, 메타데이터를 필수요소로 가진다.

-. 앱 아이콘은 앱을 다운받을 때 보이는 그림을 말한다.(ex. 카카오톡 : 노란색 배경+Talk 영문)

-. Launch Screen Storyboard는 앱을 실행하면 보이는 첫화면을 말한다. 일반적으로 기업 또는 서비스 로고가 표시된다.(ex. 카카오톡 : 노란색 배경+Talk 영문)

-. 메타 데이터는 데이터에 대한 데이터로서 시스템 정보 관련 데이터로 생각하면 된다. "사진첩 접근 허용"처럼 앱이 특정 기능을 사용하기 위해 허락을 구하는 경우 어떤 방식으로 반응하고 안내할 것인지 담당한다.(xcode프로젝트에서 info.plist)

 

2-2. 뷰컨트롤러(UIViewController)

-. 뷰컨트롤러는 뷰 계층을 관리하는 객체이고, 모든 앱은 최소한 하나 이상의 뷰컨트롤러를 가진다.

-. 뷰컨트롤러는 디바이스 스크린 전체를 차지하는 씬이라고 생각하면 된다.(화면 구성요소 중 하나가 아닌 화면 전체라는 의미)
-. 뷰컨트롤러는 씬의 구성 요소를 관리하면서, 씬과 데이터 사이의 상호 작용도 관리한다.(내부적으로 구현된 비즈니스 로직을 실행하고, 그 결과로 얻어진 데이터를 콘텐츠를 만들어 화면에 표현)

-. 뷰컨트롤러는 하위의 모든 뷰에 대한 참조를 가지고 있지 않아도 모든 뷰에 접근 할 수 있다.(체인처럼 참조가 이어지고 있기 때문)
-. 뷰컨트롤러는 여러 종류가 있다.(ViewController, Navigation Controller, TableView Controller, TabBar Controller, Split ViewController, CollectionView Controller 등)
*뷰컨트롤러 종류 상세설명은 추후 업데이트 예정


2-3. 뷰객체(UIView)

-. 뷰컨트롤러에서 씬을 구성하는 요소를 뷰객체라고 하며 여러 종류의 뷰객체가 존재한다.(UILabel, UITextField, UITextView, UIImgaeView 등)

 

뷰객체 상속개념

3. @IBOutlet & @IBAction
3-1. @IBOutlet 

@IBOutlet 예시

-. IBOutlet은 뷰객체가 가진 속성에 접근하기 위한 변수라고 볼 수 있다.(객체와 코드에 정의된 변수를 연결하는 역할)

-. IBOutlet을 통해 객체 선택, 내용 변경 등을 할 수 있다.

-. IBOutlet & IBAction 앞에 붙은 예약어(@)를 통해 컴파일러에게 속성 부여 여부를 전달한다.(ex. @IBAction  : Interface Builder와 연결된 Action)

-. 예시의 첫번째 변수 @IBOutlet var playPause: UIButton! 에서 @IBOutlet는 변수 선언, var playPause는 변수명 선언, : UIButton!는 UI종류선택이라고 보면 된다.(UI종류로 UIButton형식을 사용하겠다는 의미)
-. 아웃렛 변수를 추가할 때, storage는 Strong, weak 두가지로 구분되며 이는 메모리 회수 정책 관련 속성이다.
-. storage 기본값은 strong이며, 일반적으로 아웃렛변수의 storage는 strong이다.
-. storage가 weak이면 변수정의 앞에 weak이 추가되지만 strong을 선택하면 strong은 추가 되지 않고 생략된다.
-. strong으로 선언된 변수는 다른 곳에서 참조하고 있을 경우 메모리에서 제거되지 않지만, weak로 선언된 변수는 다른 곳에서 참조하고 있더라도 시스템이 임의적으로 메모리에서 제거 할 수 있다.(strong으로 선언된 변수들끼리 상호 참조하는 일이 생길 경우에는 앱이 종료되기 전까지는 메모리에서 제거되지 않기 때문에 메모리 누수가 발생)

 

3-2. @IBAction

@IBAction 예시

-. IBAction은 화면에서 이벤트가 발생할 경우 실행할 동작(메소드)를 지정하는 것이다.(ex. 텍스트필드를 누르면 키보드가 팝업됨)

-. 예시의 첫번째 변수 @IBAction func sliderValueControl(_sender: UISlider)에서 @IBAction은 액션함수 선언, func sliderValueControl는 함수명 선언, (_sender: UISlider)는 액션함수 실행 이벤트 객체라고 보면 된다.(즉 여기서는 슬라이더 객체에서 이벤트가 발생했을 때 해당 액션 함수를 실행시킬 것이므로 sender는 UISlider임)

 

4. References

1. sesac 교육자료

2. Cocoa Touch Framework
https://boidevelop.tistory.com/5?category=839928

3. UIKit
https://velog.io/@leoyang
https://developer.apple.com/documentation/uikit/about_app_development_with_uikit#overview
4. UIViewController
https://boidevelop.tistory.com/13

https://developer.apple.com/documentation/uikit/uiviewcontroller

5. @IBOutlet & @IBAction

https://etst.tistory.com/74

https://velog.io/@myeongs07/iOS-IBOutlet-IBAction

https://hiswings.blogspot.com/2012/01/iboutlet-ibaction.html

https://coding-sojin2.tistory.com/98


소감.

글로 정리하니까 확실히 학습효과는 높지만 글 쓰는데 시간을 너무 투입하는 느낌이다. 그리고 아직 모르는 게 많다보니 원개념 뿐만 아니라 파생지식까지 보느라 시간이 오래걸린다. 특별히 글의 퀄리티를 높이려고 하는 것도 아닌데 말이다. 학습효과는 높이되 글쓰는 시간은 최대한 줄이는데 집중해야겠다. 

'SeSAC > 수업정리' 카테고리의 다른 글

032_for-in, foreach 알아보기  (0) 2022.08.17
017_Property  (0) 2022.07.26
Optional, Function(2022-07-07 수업4)  (0) 2022.07.08
AppDelegate & SceneDelegate, Dark Mode(2022-07-06 수업3)  (0) 2022.07.08
Xcode(2022-07-04 수업1)  (0) 2022.07.07