Skip to main content

3월 22일 분량

About 3 minSwiftInterviewinterviewobjcswift

3월 22일 분량 관련

3월 22일 분량

Back to Home
3월 22일 분량

3월 22일 분량

레벨 0

q1

컴퓨터 구조와 관련하여 CPU, RAM, 저장장치의 역할과 상호 작용에 대해 설명해주세요.

컴퓨터 구조: CPU, RAM, 저장장치의 역할과 상호 작용

1. CPU (Central Processing Unit)

컴퓨터의 중앙 처리 장치로, 프로그램의 명령어를 실행하고 계산을 수행하는 핵심 부품입니다.

2. RAM (Random Access Memory)

컴퓨터가 현재 사용하는 데이터를 임시적으로 저장하는 메모리입니다. 빠른 속도로 데이터를 읽고 쓰기가 가능하지만, 전원이 꺼지면 저장된 데이터가 손실됩니다.

3. 저장장치 (Storage Device)

프로그램, 데이터, 운영 체제 등을 영구적으로 저장하는 장치입니다. HDD, SSD 등 다양한 유형이 있으며, RAM보다 느리지만 데이터를 영구적으로 유지할 수 있습니다.

상호 작용

1. CPU와 RAM

  • CPU는 프로그램 실행 중 필요한 데이터를 RAM에서 읽어와 처리합니다.
  • CPU는 계산 결과를 RAM에 다시 저장합니다.
  • CPU와 RAM은 데이터 버스를 통해 연결되어 빠르게 데이터를 주고받습니다.

2. CPU와 저장장치

  • CPU는 프로그램 실행을 위해 필요한 프로그램 코드를 저장장치에서 읽어 RAM으로 가져옵니다.
  • CPU는 계산 결과를 저장장치에 저장합니다.
  • CPU와 저장장치는 주소 버스, 데이터 버스, 제어 버스를 통해 연결됩니다.

3. RAM과 저장장치

  • RAM 용량이 부족할 경우, 사용하지 않는 데이터를 저장장치로 임시 이동하여 RAM 공간을 확보합니다.
  • 저장장치에 저장된 데이터는 RAM에 복사된 후 CPU에서 처리됩니다.

레벨 1

Swift에서 옵셔널이란 무엇이며, 언제 사용해야 하나요?

Swift에서 옵셔널(Optional)은 값이 존재하지 않을 수 있는 상황을 다루는 방법입니다. 즉, 변수 또는 상수가 nil(값이 없음)일 수 있는지 여부를 나타내는 타입입니다. 옵셔널은 Swift의 중요한 특징 중 하나이며, 안전성을 높이고 프로그램의 안정성을 보장하는 데 사용됩니다.

옵셔널을 사용해야 하는 경우는 다음과 같습니다:

1. 값이 존재하지 않을 수 있는 경우

변수 또는 상수가 값이 없을 수 있는 상황에 옵셔널을 사용합니다. 예를 들어, 사용자가 선택적으로 입력한 데이터나 API 호출 결과가 nil일 수 있습니다.

2. 기본값이 없는 초기화 상황

초기화되지 않은 변수나 상수에 기본값이 없는 경우 옵셔널을 사용하여 초기화할 수 있습니다.

3. 옵셔널 체이닝

옵셔널이 연속적으로 연결된 속성이나 메서드를 사용할 때, 옵셔널 체이닝을 사용하여 값이 있는지 확인하고 안전하게 접근할 수 있습니다.

4. 널 가능성을 나타내는 API와의 상호 작용

Objective-C와 같은 다른 언어와 상호 작용할 때, API에서 널 가능성을 나타내는 경우 옵셔널을 사용하여 올바르게 처리할 수 있습니다.

5. 옵셔널 바인딩

옵셔널에 값이 있는지 확인하고 안전하게 추출하기 위해 옵셔널 바인딩을 사용합니다. 이를 통해 옵셔널에 값이 있을 때만 코드 블록을 실행할 수 있습니다.

옵셔널을 사용함으로써 값이 없을 때 발생할 수 있는 예기치 않은 오류를 방지하고, 안전하게 처리할 수 있습니다. 따라서 Swift에서는 값의 존재 여부가 불확실한 경우에는 항상 옵셔널을 사용하는 것이 좋습니다.

q1

옵셔널 바인딩과 강제 언래핑의 차이점은 무엇인가요?

1. 개념

  • 옵셔널 바인딩: 옵셔널 변수에 값이 있는 경우 임시 변수에 바인딩하여 안전하게 값을 사용할 수 있는 방법입니다.
  • 강제 언래핑: 옵셔널 변수에서 값을 강제로 꺼내는 방법입니다. 값이 없는 경우 런타임 에러가 발생합니다.

2. 차이점

구분옵셔널 바인딩강제 언래핑
안전성안전합니다. 값이 없는 경우 에러가 발생하지 않습니다.위험합니다. 값이 없는 경우 런타임 에러가 발생합니다.
코드 형식if let 또는 guard let 사용! 사용
옵셔널 체이닝가능합니다.불가능합니다.
에러 처리옵셔널 값이 없는 경우 별도의 에러 처리 코드 필요런타임 에러 발생

3. 옵셔널 바인딩 사용 예시

// 옵셔널 바인딩 사용
if let name = user?.name {
  // user?.name 값이 존재하는 경우
  print("Hello, \(name)!")
} else {
  // user?.name 값이 존재하지 않는 경우
  print("User not found")
}

4. 강제 언래핑 사용 예시

// 강제 언래핑 사용
let name = user!.name // 런타임 에러 발생 가능성이 높음
print("Hello, \(name)!")

5. 사용 권장 사항

  • 옵셔널 바인딩: 안전하고 명확한 코드를 작성하기 위해 옵셔널 바인딩을 사용하는 것이 좋습니다.
  • 강제 언래핑: 값이 있다는 것을 확신하는 경우에만 강제 언래핑을 사용해야 합니다.

iOS 앱의 생명주기(App Life Cycle)에 대해 설명해주세요.

q1

앱의 각 상태(Not Running, Inactive, Active, Background, Suspended)에서 할 수 있는 작업은 무엇인가요?

각 상태에서 앱이 수행 가능한 작업

  • Not Running: 앱 실행 불가능
  • Inactive: 제한된 작업 가능 (예: 백그라운드 음악 재생)
  • Active: 모든 작업 가능
  • Background: 제한된 작업 가능 (예: 위치 정보 업데이트)
  • Suspended: 작업 불가능
  • Termination: 앱 종료

레벨 2

Swift의 동시성(Concurrency) 프로그래밍에 대해 설명해주세요.

Swift의 동시성 프로그래밍 주요 개념

  • GCD (Grand Central Dispatch): 멀티스레딩 프레임워크
  • Operation: 작업 단위
  • DispatchQueue: 작업 실행 큐
  • Thread: 작업 실행을 위한 시스템 리소스
  • Async/Await: 비동기 작업 처리

GCD

  • 작업 생성, 실행, 관리
  • 여러 스레드에서 작업 실행
  • 작업 간 우선순위 설정

Operation

  • 작업 단위를 표현하는 객체
  • 작업 실행에 필요한 정보 포함
  • GCD와 함께 사용

DispatchQueue

  • 작업 실행 큐
  • 작업 순서 제어
  • 여러 DispatchQueue를 사용하여 작업 병렬 실행

Thread

  • 작업 실행을 위한 시스템 리소스
  • CPU 코어에서 실행
  • GCD가 Thread 관리

Async/Await

  • 비동기 작업 처리
  • 코드 간결하게 작성
  • 작업 완료 후 코드 실행

비동기 프로그래밍

  • Swift에서는 비동기적으로 작업을 수행할 수 있는 여러 방법을 제공합니다.
  • 클로저(Closures), Completion Handlers, Delegation, NotificationCenter 등의 메커니즘을 활용하여 비동기적 작업을 처리할 수 있습니다.
  • 비동기 프로그래밍을 통해 UI의 응답성을 유지하고 네트워크 호출이나 파일 I/O 등의 작업을 블로킹하지 않고 처리할 수 있습니다.

동시성 문제 해결

  • 동시성 프로그래밍에서는 경쟁 조건(Race Condition), 교착상태(Deadlock), 교착상태(Starvation) 등의 문제가 발생할 수 있습니다.
  • Swift에서는 Locking Mechanisms, Dispatch Semaphores, Dispatch Group 등을 사용하여 이러한 문제를 해결하고 안전한 동시성 코드를 작성할 수 있습니다.
q1

Grand Central Dispatch(GCD)의 주요 개념과 사용 방법을 설명해주세요.


레벨 3


레벨 4


레벨 5


이찬희 (MarkiiimarK)
Never Stop Learning.