-
Swift에서 옵셔널이란 무엇이며, 언제 사용해야 하나요?
- 값이 있을 수도 있고 ,없을 수도 있는 변수나 상수를 다루기 위한 방법
- 옵셔널은 Swift의 type safety를 강화하는데 중요한 역할을 함
- 변수나 상수에 실제 값이 할당되지 않은 상태 nil을 가질 수 있는 경우 사용
- 값의 부재표현, 안전한코드 작성
-
옵셔널 바인딩과 강제 언래핑의 차이점은 무엇인가요?
- 옵셔널 바인딩: if let, guard let을 사용하여 옵셔널에 값이 있는지 확인하고 값이 있을 경우 임시 상수에 할당하여 사용
- 옵셔널 값 뒤에 !를 붙여 해당 값이 nil이 아님을 확신할 때 사용. nil일 경우 런타임 에러가 발생
-
옵셔널 체이닝의 동작 원리를 설명해주세요.
- 옵셔널 값을 포함하는 프로퍼티, 메서드, 서브스크립션 등에 접근할 때 사용되는 방법으로 과정 중 어느 한 곳에서라도 nil을 만나면 전체 표현식이 즉시 nil로 판단되어 코드 실행을 중단함
- 첫번째 옵셔널 값에 ?를 붙여 해당 값이 nil인지 확인하고, nil이 아니면, 이어지는 프로퍼티, 메서드, 서브스크립션 호출은 언래핑된 값에 대해 실행.
-
암시적 언래핑 옵셔널을 사용하는 경우는 언제인가요?
- 인터페이스 빌더 아웃렛, 초기화 이후 nil이 아닌 것이 보장되는 경우
-
nil 병합 연산자(??)의 사용 예시를 들어주세요.
var userName: String? = nil
let displayName = userName ?? "Guest" // guest 출력
var userName: String? = "John Doe"
let displayName: userName ?? "Guest" // john doe 출력
-
iOS 앱의 생명주기(App Life Cycle)에 대해 설명해주세요.
- 앱이 시작되는 순간부터 종료될 때까지의 과정을 의미
- 앱의 각 상태(Not Running, Inactive, Active, Background, Suspended)에서 할 수 있는 작업은 무엇인가요?
- Not Running: 앱이 시작되지 않았거나 시스템에 의해 종료된 상태
- Inactive: 앱이 포그라운드에 있지만, 현재 이벤트를 받지 않는 상태(전화가 오는 등의 인터럽트 발생시)
- Active: 앱이 포그라운드에 있고 이벤트를 받고있음.
- Background: 앱이 백그라운드에 있고 코드를 실행할 수 있음. 사용자에게는 보이지않지만, 작업을 계속 할수 있음.(데이터 저장, 네트워크 요청 마무리)
- Suspended: 앱이 백그라운드에 있지만 코드를 실행할 수 없는 상태. 시스템은 메모리가 부족할 경우 중지 상태 앱을 종료시킴
- 앱 상태 변화에 따라 호출되는 AppDelegate 메서드들을 나열해주세요.
- application(_:didFinishLaunchingWithOptions:): 앱이 시작 할 때
- applicationDidBecomeActive(_:): 앱이 활성화 될 때
- applicationDidEnterBackground(_:): 백그라운드로 전환될 때
- applicationWillTerminate(_:): 앱이 종료될 때
- 백그라운드에서 작업을 완료하기 위한 방법들은 무엇이 있나요?
- Background Fetch: 앱이 백그라운드에서 주기적으로 데이터를 업데이트 할 수 있도록 함
- Background App Refresh: 최신 콘텐츠를 사용자에게 제공하기 위해 앱이 백그라운드에서 콘텐츠를 주기적으로 갱신함
- 실시간 위치 업데이트: 위치 기반 서비스를 제공하는 앱이 사용자의 위치 변경을 백그라운드에서 계혹 추적함
- Background Tasks API: iOS13이상에서 단기간의 백그라운드 작업(DB정리, 파일 업로드)을 위한 API
- 백그라운드 VoIP: 앱이 백그라운드에서 VoIP푸시를 받음
-
Storyboard와 XIB의 차이점은 무엇인가요?
- 포함 범위
- storyboard: 앱 내의 여러 뷰 컨트롤러와 그 사이 전환을 포함할 수 있음
- xib: 주로 단일 뷰 또는 뷰 컨트롤러의 인터페이스를 정의하는데 사용
- 앱 흐름 시각화
- storyboard: 앱의 전체적 흐름과 화면간 전환을 시각적으로 표현할 수 있음
- xib: 앱 전체의 흐름을 한눈에 보기 어려움. 각 파일은 독립적으로 작동
- 재사용과 협업
- storyboard: 대규모 프로젝트에서 여러 개발자가 동시에 작업할 때 충돌이 발생하기 쉬움
- xib: 컴포넌트 레벨에서 UI를 재사용하기 쉽고, 파일이 분리되어 있어 대규모 프로젝트에서 협업하기 적합
- 관리 및 빌드시간
- storyboard: 복잡한 프로젝트에서 파일이 크고 복잡해질수록 빌드 시간이 길어질 수 있음
- xib: 화면이 많아질수록 관리해야할 파일의 수가 증가하지만, 각 파일은 상대적으로 작고 단순하여 빌드 시간에 미치는 영향이 적을 수 있음
- Storyboard에서 세그(Segue)를 사용하는 이유는 무엇인가요?
-
시각적 흐름 구성:
storyboard 내 뷰 컨트롤러 간의 전환 경로를 직접 볼 수 있어 앱의 전체적 네비게이션 흐름으 쉽게 파악하고 설계할 수 있음
-
선언적 전환 정의:
버튼 탭과 같은 이벤트가 발생했을 때 어떤 화면으로 전환될 지 storyboard에서 직접 설정할 수 있어 코드 양을 줄이고 네비게이션 로직을 더 명확하게 할 수 있음
-
다양한 전환 스타일과 애니메이션 지원:
코드를 추가하지 않고도 모달, 푸시, 팝오버 등 다양한 방식으로 화면전환 구현 가능
-
전환 전 데이터 전달
prepare(for:sender:) 메서드를 통해 뷰 컨트롤러 간 데이터를 쉽게 전달 가능
-
개발 편의성 및 생산성 향상
- Storyboard 참조(Storyboard Reference)의 장점은 무엇인가요?
-
모듈성과 재사용성 향상
앱의 다양한 기능을 별도 storyboard로 나눔으로써 모듈성이 향상. 이는 특정 기능이나 화면을 다른 프로젝트에서 재사용하기 쉽게 만들어줌
-
협업 용이
여러 개발자가 동시에 작업할 때 서로 다른 storyboard 파일에서 독립적으로 작업할 수 있어 협업이 용이
-
개선된 성능과 더 빠른 빌드 시간
파일을 나누었기에 인터페이스 빌더를 로딩하고 렌더링하는 데 필요한 시간이 줄어듬
-
앱의 구조 파악 용이
앱의 다양한 기능을 별도의 storyboard로 구분함으로 앱의 전체 구조를 이해하기 쉬워짐
-
유지보수성 향상
특정 기능에 문제가 발생했을 때 해당 기능만을 포함하는 storyboard를 집중적으로 검토하고 수정할 수 있으므로 유지보수 과정을 간소화하고, 문제를 빠르게 해결할 수 있음
-
뷰를 구현할때 Storyboard와 Code로 구현하는 각각의 장단점은 무엇인가요?
- Storyboard
- 장점
- 시각적으로 UI를 구성하고 관계를 쉽게 파악할 수 있음
- 화면 전환과 데이터 전달을 시각적으로 설정할 수 있음
- 프로토타이핑과 Auto Layout사용이 용이
- 단점
- 대규모 프로젝트에서 협업시 충돌 발생 가능성
- 복잡함 프로젝트 관리와 빌드 시간 증가
- 세밀한 UI커스터마이징에 한계
- 코드
- 장점
- UI컴포넌트의 재사용성과 모듈화 용이
- 버전관리 시스템을 통한 협업과 변경사항 추적이 용이
- UI의 모든 세부사항을 세밀하게 제어 가능
- 단점
- 선호하는 방식이 있다면 무엇이고 왜 더 선호하나요?
-
Auto Layout을 사용하는 이유와 장점은 무엇인가요?
-
Swift에서 클로저(Closure)란 무엇이며, 어떻게 사용하나요?
-
iOS에서 델리게이트 패턴(Delegate Pattern)은 어떤 목적으로 사용되나요?
-
Swift의 기본 데이터 타입에는 어떤 것들이 있나요?
-
Xcode에서 디버깅 시 자주 사용하는 기능들은 무엇이 있나요?
-
iOS 앱에서 데이터를 저장하는 방법에는 어떤 것들이 있나요?
-
Swift에서 프로토콜(Protocol)이란 무엇이며, 어떻게 사용하나요?
-
Swift의 접근 제어자(Access Control)에 대해 설명해주세요.
-
iOS 앱에서 네트워크 통신을 하는 방법에는 어떤 것들이 있나요?
-
Swift의 옵셔널과 관련된 함수에는 어떤 것들이 있나요?
-
Git에서 브랜치(Branch)를 사용하는 이유와 장점은 무엇인가요?
-
iOS 앱에서 코어 데이터(Core Data)를 사용하는 이유는 무엇인가요?
-
Swift의 high-order functions에 대해 설명해주세요.
-
Xcode에서 유용한 단축키와 생산성을 높이는 팁에 대해 설명해주세요.
-
iOS 개발을 위한 라이브러리 관리 도구(CocoaPods, Carthage, Swift Package Manager)의 차이점과 사용법을 설명해주세요.
-
iOS 앱에서 URL Scheme을 사용하여 다른 앱과 통신하는 방법과 주의 사항을 설명해주세요.