과제 공부

이유진·2024년 3월 29일
1

Swift 문법

목록 보기
9/9

기술 질문 1
모든 View Controller 객체의 상위 클래스는 무엇이고 그 역할은 무엇인지 아는대로 작성해보세요.


모든 ViewController객체의 상위 클래스는 'UIViewController'이다.
UIViewController는 어플리케이션의 사용자 인터페이스를 관리하고, 화면 간의 전환을 처리하는 역할을 담당한다.

  1. 어플리케이션의 화면을 관리한다.
  2. 뷰의 생성, 표시, 소멸 과정을 제어하고 관리한다.
  3. 뷰를 표시한다. (스토리보드 파일에서 뷰 생성 or 코드 사용하여 뷰 생성)
  4. 뷰를 관리한다. (내용 업데이트 및 다시 그리는 작업)
  5. 데이터 모델과의 상호작용을 담당한다. (데이터 표시 및 업데이트, 사용자 입력 데이터 처리 등)


기술 질문2

옵셔널과 옵셔널 해제에 대해 아는대로 작성해보세요.


옵셔널(Optional)은 값이 있을 수도 있고 없을 수도 있는 값을 나타낸다.
오류가 발생할 가능성이 있다면, 즉 값이 있을 수도 있고 없을 수도 있는 상황이라면 반환 타입을 반드시 옵셔널 타입으로 설정해주어야 한다.

  • 옵셔널 사용 상황

    1. 값이 없는 경우: nil(값이 없음)로 처리한다.
    2. 값이 있는 경우: 값이 존재하는 경우, 해당 값을 옵셔널로 감싸서 처리합니다.
  • 옵셔널의 선언

    ?’ 기호를 사용해서 선언된다.

    ex) var optionalString: String? = "Hello"

    여기서 변수 optionalStrin은 Stirng에 ?붙여, 옵셔널 String으로 선언되었다.
    (”Hello”의 타입은 옵셔널 String이다.)
    이 경우에는 값이 존재하면, 그 값은 그냥 String이 아닌 ‘옵셔널 String’이 된다.
    값이 존재하지 않으면 ‘nil’이 된다.

  • 옵셔널 해제(Optional Unwarpping)

    옵셔널 해제는, 말 그대로 옵셔널 값을 해제해서 안전한 값으로 만들어주는 것이다. 옵셔널 값을 해제하면 원래의 타입으로 값을 사용할 수 있다.

    옵셔널을 해제할 때는 값이 있을 수도 있고, 없을 수도 있기 때문에 이를 고려해서 안전하게 처리해야 하는데(그렇지 않으면 에러 발생!), 이 때 안전한 해제를 위해 제공되는 몇 가지 방법이 있다.

    1. 강제 해제 (Forced UnWrapping)
      옵셔널 타입 값 뒤에 ‘!’ 붙여주면 된다.
      하지만 말 그대로 강제로 해제하는 것이기 때문에,
      만약 nil 상태, 즉 값이 없는 상태라면 런타임 에러가 발생한다.
      따라서 값이 있는 것이 확실한 경우에 사용해야 한다.
    1. 옵셔널 바인딩 (Optional Binding)
      if let’ 또는 ‘guard let’ 구문을 사용한다.
      값의 존재 여부를 확인하고, 이 값을 상수나 변수에 할당해 사용하도록 한다.
      값이 없는 경우에는 동작하지 않는다.
  • 옵셔널 체이닝 (Optional Chaining)

    옵셔널 값이 중첩된 속성이나 메서드에 속해 있을 때, 옵셔널 값에 안전하게 접근할 수 있도록 한다.

    즉 옵셔널 값이 있는 체인(=중첩된 속성이나 메서드의 호출)을 따라가면서 nil이 있으면 결과값이 nil이 되게, 그렇지 않으면 옵셔널 값이 나오도록 하는 것!

    두 개의 옵셔널이 호출되는 상황에서 둘 중 하나라도 nil을 가지면 그 체인 전체 결과를 nil로 만들어 에러를 방지한다.



기술 질문3

UIKit에서 스토리보드로 UI 구현하기와 코드로 UI 구현 시의 각각의 장단점을 설명하시오.


먼저 UIKit은 사용자 인터페이스(UI) 구현에 주로 사용되는 프레임 워크이다.
여기서 UI 구현하기 위한 방식은 두 가지가 있다.

1.스토리보드로 구현

장점

  • 시각적으로 UI 설계하고 구성하는 것이 가능하다.
  • Segue를 통해 화면 전환을 간단하게 구현할 수 있다.

단점

  • 협업 시에 여러 명의 개발자가 동시에 수정하면 충돌이 발생할 수 있다.
  • 재사용성이 줄어든다. 스토리 보드의 UI 요소들을 이동하려면 복사해서 붙여 넣어야 한다.

2.코드로 구현

장점

  • 각각의 화면이 각각의 코드로 구현되기 때문에 협업 시에 여러 명의 개발자가 동시에 수정해도 충돌이 적게 발생한다.
  • 재사용성이 늘어난다. 동일한 UI 요소를 여러 화면에서 재사용하기 쉽다. 클래스나 함수로 래핑해 재사용성을 높일 수 있다.
  • 유연한 UI 조작이 가능하다. 조건에 따라 UI 변경이 가능하다.

단점

  • 시각적 디자인 구현이 어렵다. 모든 UI 요소의 위치, 크기 등을 코드로 명시적으로 지정 하는 것이 필요하다.
  • 시각적으로 보면서 구성하는 것이 아니고 코드로 작성해야 하기 때문에 초기 설정 시간이 더 오래 걸린다.


이번 챕터에서 학습을 하며 알게된 기술, 지식 1
Delegate 프로토콜, DataSource 프로토콜


1. Delegate 프로토콜

  • UITableViewDelegate 프로토콜은 UITableView에서 발생하는 이벤트를 처리한다.
  • 사용자가 특정 행을 선택했을 때, 행의 높이를 지정하거나, 특정 행을 수정하거나 삭제하는 등의 동작을 정의할 수 있다.
  • UITableViewDelegate는 선택, 높이 조절, 편집, 스크롤, 드래그 앤 드롭 등의 다양한 작업을 처리한다.
  • 주로 UITableView의 모양과 동작을 사용자 정의하고 제어하는 데 사용된다.

2. DataSource 프로토콜

  • UITableView의 데이터를 제공한다.
  • UITableView는 데이터를 표시하기 위해 DataSource에게 필요한 데이터를 요청하며, 데이터의 개수, 각 섹션의 행 수, 셀에 표시할 내용 등을 DataSource에서 제공받는다.
  • UITableView를 데이터와 연결하여 테이블 뷰를 구성한다.
  • 주로 UITableView에 표시할 데이터를 제공하고 셀의 내용을 설정하는 데 사용된다.


    간단하게 말하면
    DataSource는 데이터를 제공해 UI 요소가 표시되는 방법을 제어하는 패턴 (그리기)
    Delegate는 객체 간의 상호 작용을 위임하는 패턴 (동작)
    이라고 생각하면 된다.


이번 챕터에서 학습을 하며 알게된 기술, 지식 2
extension


확장
기존의 클래스, 구조체, 열거형 또는 프로토콜에 새로운 기능을 추가할 때 사용한다.
즉, 특정 형식을 확장해 외부에서 추가적인 기능을 제공하는 것!!

  1. 새로운 기능 추가: 기존의 클래스, 구조체, 열거형 또는 프로토콜에 새로운 메서드, 프로퍼티, 이니셜라이저 또는 서브스크립트를 추가할 수 있다.
  2. 프로토콜 준수 추가: 프로토콜을 채택하는 기존 타입에 프로토콜의 요구사항을 추가할 수 있다.
  3. 계산형 프로퍼티 추가: 기존 타입에 계산형 프로퍼티를 추가하여 새로운 속성을 제공할 수 있다.

1개의 댓글

comment-user-thumbnail
2024년 3월 29일

와.. 오늘 틸 작성하신분이 계셨다니 역시.. 준비성 좋습니다!

답글 달기