Swift의 동시성(Concurrency) 프로그래밍에 대해 설명해주세요.
객체지향 프로그래밍(OOP)의 주요 개념에 대해 설명해주세요.
클래스와 객체
상속
한 클래스의 속성과 메서드를 다른 클래스가 상속받아 사용할 수 있게 함. 코드의 재사용성을 높이고 중복을 줄임
캡슐화
객체의 내부 구현을 숨기고, 외부에서는 정의된 인터페이스만을 통해 접근할 수 있도록 함. 데이터 보호와 구현의 세부사항을 숨김
다형성
같은 이름의 메서드가 다른 동작을 할 수 있게 함(오버로딩, 오버라이딩). 사용법은 동일하나, 객체에 따라 다른 결과를 나타냄
추상화
복잡한 실제 상황을 단순화하여, 가장 중요한 속성이나 동작만을 강조하는 방법. 불필요한 세부 정보는 숨기고, 필수적 부분에 초첨을 맞춤
캡슐화(Encapsulation)와 정보 은닉(Information Hiding)의 차이점은 무엇인가요?
상속(Inheritance)의 장단점은 무엇인가요?
다형성(Polymorphism)을 활용하는 예시를 들어주세요.
상속을 통한 다형성. 상속받은 메서드는 필요에 따라 오버라이드 할 수 있으며, 이를 통해 다형성을 구현할 수 있음
class Animal {
func makeSound() {
print("동물이 소리를 냅니다.")
}
}
class Dog: Animal {
override func makeSound() {
print("멍멍!")
}
}
class Cat: Animal {
override func makeSound() {
print("야옹~")
}
}
// 다형성을 활용한 함수
func letAnimalMakeSound(animal: Animal) {
animal.makeSound()
}
let dog = Dog()
let cat = Cat()
letAnimalMakeSound(animal: dog) // 출력: 멍멍!
letAnimalMakeSound(animal: cat) // 출력: 야옹~
프로토콜 지향 프로그래밍(POP)이란 무엇이며, 어떤 장점이 있나요?
앱의 기능과 인터페이스를 정의하고 구현하는데 중점을 둠
특징
프로토콜 중심 설계
인터페이스를 정의하는 프로토콜에 중점을 둠. 타입이 수행해야 하는 작업을 명확히 할 수 있고, 다양한 타입이 같은 프로토콜을 준수함으로써 다형성을 구현할 수 있음
재사용성과 유연성 향상
프로토콜을 사용해 공통의 인터페이스를 정의함으로써, 코드의 재사용성과 유연성을 향상시킬 수 있음
타입 안정성
컴파일 타임에 타입 체크를 강화하여 런타임 오류의 가능성을 줄여줌
값타입의 사용 촉진
구조체, 열거형같은 값타입을 활용해 참조 타입의 일부 단점(ex. 참조 카운팅, 불변성 관리)를 보완할 수 있음
장점
높은 재사용성
프로토콜을 통해 정의된 인터페이스는 다양한 타입에서 재사용 될 수 있어, 코드의 중복을 줄이고 유지보수를 용이하게 함
강력한 추상화
프로토콜 타입의 구체적인 구현을 숨기면서도 그 타입이 무엇을 할 수 있는지를 명확하게 정의하여 디자인과 구현의 분리를 촉진
유연한 구조
프로토콜 확장을 통해 기능을 타입에 추가할 수 있으며, 조건부 채택 등의 고급 기능을 사용하여 코드의 유연성을 더욱 향상
향상된 컴파일 타임 성능
탐조타입에 의존하는 oop보다 메모리관리와 성능 측면에서 이점을 가질 수 있음
iOS 앱의 메모리 관리는 어떻게 이루어지나요?
싱글톤 패턴(Singleton Pattern)이란 무엇이며, 어떤 경우에 사용하나요?
Swift의 문자열(String) 다루기와 관련된 주요 기능은 무엇이 있나요?
Codable 프로토콜은 무엇이며, 어떻게 사용하나요?
iOS 앱에서 의존성 주입(Dependency Injection)은 어떤 목적으로 사용되나요?
델리게이션 패턴(Delegation Pattern)과 클로저의 차이점은 무엇인가요?
UIKit에서 테이블 뷰(UITableView)와 컬렉션 뷰(UICollectionView)의 차이점은 무엇인가요?
iOS 앱 아키텍처 패턴 중 MVC, MVVM, VIP, MVI의 차이점은 무엇인가요?
Swift에서 옵셔널(Optional)을 사용할 때 주의할 점은 무엇인가요?
iOS 앱에서 코어 애니메이션(Core Animation)을 사용하는 방법은 무엇인가요?
Swift에서 프로토콜 지향 프로그래밍(Protocol-Oriented Programming)을 활용하는 방법은 무엇인가요?
iOS 앱에서 네트워크 요청 시 응답 캐싱(Response Caching)을 하는 방법은 무엇인가요?
Combine 프레임워크란 무엇이며, 어떤 기능을 제공하나요?
Swift의 제네릭(Generic)에 대해 설명해주세요.
iOS 앱에서 로컬 푸시 알림(Local Push Notification)을 구현하는 방법은 무엇인가요?
iOS 앱에서 SwiftUI와 UIKit을 함께 사용하는 방법은 무엇인가요?
Swift에서 키 경로(Key Path)란 무엇이며, 어떻게 사용하나요?