UIKit?

주방·2022년 7월 5일
1

Swift

목록 보기
1/17

#1. 학습주제

  • UIKit
  • UIView
  • UIViewController
  • @IBAction
  • @IBOutlet

1) UIKit

  1. UIKit이란?

    • UIKit은 프레임워크이며, iOS와 tvOS에 들어가는 앱을 빌드하는데 필요한 핵심 오브젝트(objects)를 제공한다.

    • 프레임워크? / 나무위키 참조

      • 정의
        • 어떤 목적을 달성하기 위해 복잡하게 얽혀 있는 문제를 해결하기 위한 구조이며, 하나의 뼈대(순서)로 이해하면 된다.
        • 라이브러리와의 차이점
          • 보통 프레임워크라고 하면 여러 기능을 가진 클래스와 라이브러리가 특정 결과물을 구현하고자 합쳐진 형태이다.
          • 메소드 및 클래스화, 즉 모듈화를 하는 이유는 재사용성인데, 프레임워크는 이 재사용성을 높이기 위해 큰 그룹단위로 묶어 주었다.
          • 예) 웹 프레임워크는 '웹서버'를 구현하기 위한 목적으로 만들어진 프레임워크이다. 웹 서버를 구현하기 위해 페이지 구현, DB관리, 유저인증, API서버, 라우팅, 사이트 맵, 세션 관리 등 여러 기능이 있어야 한다. 각 기능을 보유한 라이브러리의 묶음을 프레임워크로 볼 수 있다.

그렇다고 한다면 UIKit은 모듈화된 라이브러리의 묶음으로 볼 수 있다. 어떤 것들이 모듈화 되어 있을까?

  1. UIKit 앱의 리소스 요구사항 / 참조

    • 앱 아이콘(App icons)

      • 시스템이 앱의 아이콘을 홈스크린, 설정 및 다른 앱과 구별하기 위해 해당 위치에 앱 아이콘을 표시해준다. 애플 생태계의 여러 기기가 존재하기 때문에 다양한 기기에서 사용가능함에 따라 구분을 위한 여러 아이콘이 요구된다.
    • 런치 스크린 스토리보드(Launch Screen Storyboard)

      • 앱의 실행 준비동안 표시하는 화면이며, 이를 통해 앱이 동작함을 알려줄 수 있다.
      • 완료 후 시작화면을 숨기고 앱의 실제 인터페이스를 표시한다.

앱을 빌드하기 위해 최소 조건으로 필요한 것에 대해 생각할 수 있음.


2) UIView

  1. UIView란?
    • 화면상의 직사각형 영역에 대한 컨텐츠 관리하는 개체이다.
    • 앱 사용자 인터페이스의 기본 구성요소이며, UIView 클래스는 모든 뷰에 공통 동작을 정의한다. 뷰 객체는 사각형 경계 내에 컨텐츠를 렌더링하고, 해당 컨텐츠와의 상호작용을 처리한다.
    • UIView 클래스는 초기화하여 고정된 배경색을 표시하는데, 사용될 수 있는 구상 클래스이다.
    • 보다 정교한 컨텐츠를 그리기 위해 서브클래스화 할 수 있다.
      • 서브클래싱(Subclassing): 상속, 다시 말해 서브클래싱하면 부모로부터 성격을 상속받고 자기 자신 고유의 특성을 추가할 수 있다.
      • 오버라이딩(Overriding): 서브클래스에는 부모클래스에서 상속 받은 것을 재정의 할 수 있다. 이것을 'overriding'이라 부르는데, 오버라이딩은 인스턴스 메소드, 타입 메소드, 인스턴스 프로퍼티, 타입 프로퍼티, 서브스크립트 모두에 대해 가능하다. swift에서 'override'키워드를 보면 부모에 그 정의가 있는 확인한다.
  2. UIView의 특징
    • 뷰 컨틀롤러 위에 뷰객체가 쌓이는 형태로 씬이 구성된다.
    • 여러 종류의 뷰객체가 존재한다.(UILable, UITextField, UITextView, UIImageVIew 등)

3) UIViewController

  1. ViewController란?
    • 먼저, View Controller는 UIKit 앱의 인터페이스를 관리한다. View Controller는 단일 루트 뷰를 관리하고, 단일 뷰에는 여러 개의 하위 뷰가 포함될 수 있다. 이러한 뷰의 계층구조와 유저와의 상호작용은 View Controller에 의해 처리된다.
    • UIKit은 특정 유형의 콘텐츠를 탐색하고 관리하기 위한 몇개의 표준 View Controller를 제공한다. 앱의 커스텀 콘텐츠를 포함하는 뷰 컨트롤러와 커스텀 컨테이너 뷰 컨트롤러를 정의하여 새 네비게이션 체계를 구현할 수 있다.
    • 이러한 커스텀 뷰 컨트롤러는 관리를 위해 View Controller를 상속한다.
    • 그 중 UIViewController(UIKit 앱의 View의 계층구조를 관리하는 객체) 존재한다.
  2. 역할
    • 자신이 관리하는 View에 단단히 바인딩 되어 있고, View 계층에서 이벤트를 처리하는데 참여한다.
    • 데이터 변화에 따라 View 컨텐츠 업데이트
    • View 와 사용자 상호작용에 응답
    • View를 리사이징하고 전체적인 인터페이스의 레이아웃 관리
    • 앱 내 다른 객체와의 조정

4) @IBOutlet & @IBAction

  1. 정의
    • IB: Interface Builder의 약자이다.
    • 즉, Interface Builder를 통해 받아온 정보를 받거나, 정보를 바탕으로 수행(Action)하겠다
    • @의 의미: 컴파일러에게 어떤 속성을 가지고 있다고 전하는 역할을 한다. 컴파일러에게 @가 붙은 명령에 대해 특정 attribute가 부여됨을 알려준다. 예를 들어 @IBAction은 Interface Builder와 연결된 Action임을 컴파일러에게 알려주고, @UIApplicationMain은 App의 Main이 여기 위치한다고 말하는 것이다.
  2. 역할
    • @IBOutlet
      • 스토리보드에 만든 View 객체를 코드에서 사용하기 위해 연결해주는 역할
      • View 객체를 가르키는 변수
    • @IBAction
      • View 객체가 특정 이벤트를 발생시켰을 때 함수를 호출하는 역할


#2. Assignment / GitHub

Assignment 1. Netflix Project

  • 적용사항
    • 뷰객체 @IBOutlet 선언 뒤 UI 코드 수정
    • 재생버튼 클릭 후 4개 이미지뷰(랜덤) 변경

Assignment 2. Baemin Project

  • 적용사항
    • UIView를 통해 이미지 반영


#3. 회고

  • Assignment 1. Netflix Project
    • IBAction을 통해서 이미지를 변환해주는 작업을 하였음.
    • 그러나 1...20까지의 랜덤 숫자를 발생시키는데, 동일한 숫자가 나오는 경우가 발생하여 같은 영화 이미지를 보여주게 되었다. 이부분에 대한 것은 예상하지 못하여서 처리해야 함을 알게 됨.
    • 각 이미지 마다 IBOutlet으로 변수를 선언한 상태에서 viewDidLoad에서 작업을 일괄적으로 하니 보는데 복잡하게 느껴졌음.
    • 하나의 메소드로 묶어 입력하는 것이 보다 좋지 않을까 생각했음. + 랜덤숫자 발생도 마찬가지로 겹치지 않고 고유 랜덤숫자를 만들던지 아니면 하나의 배열에 담아서 순차적으로 이미지마다 뿌리는 것도 가능하지 않을까? 이에 대한 적용을 해봐야겠다.
    • 콜렉션뷰를 사용하면 일괄적으로 적용할 수 있을 것 같아 도전했지만, 어디가 문제인지도 몰랐음. 막연하게 구글링해 코드를 가져다 쓰는 것이 문제였다.
  • Assignment 2. Baedal Project
    • 16개의 이미지 하나씩 IBOutlet으로 처리해봤다. 무척 비효율적으로 느껴졌음.
    • 하나로 묶어서 처리할 수 있지 않을까? 이미지 삽입도 번호로 넣을 수 있을 것 같은데,,,이건 위의 과제 해결을 통해 연속적으로 해결할 수 있지 않을까?
    • 이미지 갯수가 많아지는 콜렉션 뷰, 테이블 뷰 등의 다양한 UIView를 활용방식의 필요성을 느꼈다.
  • 과제를 수행하는데 있어 어떻게 정리하고 학습할 것인지에 대한 고민이 컸다. 코드구현 + 개인 학습 정리가 구체적으로 정리되도록 해야하는데 그부분을 어떻게 손대야할지 감이 잡히지 않았다. 그러나 동료들의 작업 수행한 것을 보면서 방법을 구체화하고 있다.

0개의 댓글