[내일배움캠프 10주차 (03/12)]

yeseul jang·2026년 3월 12일

내일배움캠프

목록 보기
20/32

📌 Swift Optional & iOS App Life Cycle

🔎 1. 서버 API가 사용자 이름을 때로는 보내고 때로는 보내지 않을 때, 이를 어떻게 처리해야 할까?

서버 API가 항상 동일한 데이터를 보내는 것은 아니기 때문에, 사용자 이름이 항상 존재한다고 가정하면 안 됩니다. 이 경우 모델에서 해당 값을 Optional 타입으로 선언하여 값이 없을 가능성을 표현해야 합니다.

예를 들어 이름이 없는 경우에는 UI에서 기본 문구(예: "사용자")를 표시하거나, 해당 UI 영역을 숨기는 방식으로 처리할 수 있습니다. 이렇게 하면 서버 응답 구조가 유동적이어도 앱이 안정적으로 동작할 수 있습니다.


🔎 2. Swift의 Optional 타입을 사용하여 이 상황을 모델링하는 방법

Swift에서는 값이 있을 수도 있고 없을 수도 있는 경우를 Optional 타입으로 표현합니다.

예를 들어 User 모델에서 사용자 이름을 다음과 같이 선언할 수 있습니다.

struct User {
    let name: String?
}

이렇게 선언하면 name 값은 문자열이 있을 수도 있고 nil일 수도 있습니다.
Swift는 Optional을 통해 nil 가능성을 타입 시스템에서 강제하기 때문에, 개발자가 값을 사용할 때 반드시 nil 여부를 확인하도록 만들어 안정성을 높여줍니다.


🔎 3. 강제 언래핑(!) 사용 시 앱이 크래시되는 상황과 방지 방법

Optional 값에 대해 !를 사용하면 강제 언래핑(Force Unwrapping) 이 이루어집니다.

예를 들어 다음과 같은 코드가 있다고 가정해보겠습니다.

let name = user.name!

만약 서버가 이름을 보내지 않아 user.namenil이라면, nil을 강제로 꺼내려고 하기 때문에 앱이 즉시 크래시하게 됩니다.

이러한 문제를 방지하기 위해서는 다음과 같은 안전한 언래핑 방식을 사용해야 합니다.

  • if let
  • guard let
  • nil-coalescing operator (??)

예시:

let name = user.name ?? "사용자"

이렇게 하면 이름이 없을 경우 기본 값을 사용할 수 있어 앱의 안정성을 높일 수 있습니다.


🔎 4. Optional Chaining을 사용한 중첩 JSON 데이터 파싱

API 응답 데이터는 종종 여러 단계로 중첩된 구조를 가지고 있습니다. 이 경우 Optional Chaining을 사용하면 안전하게 값을 접근할 수 있습니다.

예시:

let name = response.user?.profile?.name

이 코드는 다음과 같은 특징을 가집니다.

  • user가 nil이면 결과는 nil
  • profile이 nil이면 결과는 nil
  • name이 존재하면 해당 값을 반환

즉, 중간 단계 중 하나라도 nil이면 전체 결과가 nil이 되며 크래시가 발생하지 않습니다.

이 방법은 특히 JSON 파싱 과정에서 안전성을 높이는 데 매우 유용합니다.


🔎 5. iOS App Life Cycle이란 무엇인가?

iOS 앱의 생명주기(App Life Cycle)는 앱이 실행되고 종료될 때까지 거치는 상태 변화 과정을 의미합니다.

앱은 실행 중에 여러 상태를 오가며, 각 상태에서 시스템은 특정 메서드를 호출합니다.
개발자는 이러한 상태 변화에 맞춰 다음과 같은 작업을 수행합니다.

  • 리소스 정리
  • 데이터 저장
  • 네트워크 작업 중단
  • UI 업데이트

iOS 13 이후에는 AppDelegate와 함께 SceneDelegate 기반의 생명주기 관리도 함께 사용됩니다.


🔎 6. 앱의 각 상태에서 가능한 작업

📘 Not Running

앱이 실행되지 않은 상태입니다.
사용자가 앱을 실행하거나 시스템이 앱을 실행하기 전까지 메모리에 존재하지 않습니다.


📘 Inactive

앱이 실행 중이지만 사용자 입력을 받지 않는 상태입니다.

예시

  • 전화 수신
  • 앱 전환 애니메이션 중

이 상태는 보통 Active ↔ Background 전환 과정에서 잠깐 나타나는 상태입니다.


📘 Active

앱이 포그라운드에서 정상적으로 실행되는 상태입니다.

가능한 작업

  • 사용자 입력 처리
  • UI 업데이트
  • 네트워크 요청
  • 애니메이션 실행

일반적인 앱 사용 상태입니다.


📘 Background

앱이 화면에는 보이지 않지만 코드를 실행할 수 있는 상태입니다.

가능한 작업

  • 데이터 저장
  • 네트워크 요청 마무리
  • 백그라운드 작업 수행

하지만 실행 시간에는 제한이 있으며, 필요할 경우 Background Task를 요청해야 합니다.


📘 Suspended

앱이 메모리에 유지되지만 코드 실행이 중단된 상태입니다.

이 상태에서는

  • 코드 실행 불가
  • CPU 사용 불가
  • 메모리에는 존재함

시스템이 필요하면 언제든지 앱을 종료할 수 있습니다.

요약

  • Optional은 값이 없을 가능성을 안전하게 표현하기 위한 Swift의 핵심 기능
  • 강제 언래핑은 크래시 위험이 있기 때문에 안전한 언래핑 방식 사용이 중요
  • Optional Chaining은 중첩된 데이터 접근을 안전하게 만들어 줌
  • iOS 앱은 Active, Background 등 여러 상태를 오가며 생명주기를 관리함
profile
iOS 개발

0개의 댓글