머리말
100문 100답 List
100문 100답 List 1~10
100문 100답 List 11~20
100문 100답 List 21~30
100문 100답 List 31~40
100문 100답 List 51~60
100문 100답 List 61~70
100문 100답 List 71~80
100문 100답 List 81~90
100문 100답 List 完
시작.
41. KVO(Key-Value Observing)에 대해 설명하세요.
Key-Value Observing 또는 KVO는 macOS 및 iOS 개발에서 사용되는 Cocoa 프레임워크의 기능 중 하나입니다.
KVO는 객체 간의 데이터 변경을 감지하고, 이 변경에 대한 통지를 제공하는 메커니즘입니다.
기본적으로 KVO는 객체의 특정 속성에 대하 변화를 다른 객체가 감지할 수 있게 해줍니다.
이를 통해 하나의 객체에서 속성이 변경될 때 다른 객체들이 이 변경을 관찰하고
적절한 조치를 취할 수 있습니다.
구성 요소와 동작 방식
- Observable Property(관찰 대상 속성)
- KVO를 사용하려면 객체가 관찰 대상 속성을 가져야합니다.
- 일반적을 클래스의 속성 중에서 다른 객체가 관찰해야 하는 속성을 의미합니다.
- Observer(관찰자)
- 속성의 변경을 감지하고자 하는 객체
- 관찰자는 KVO를 사용하여 특정 객체의 특정 속성에 대한 변경을 수신할 수 있습니다.
- Registratioin(등록)
- 관찰자는 관찰 대상 객체에 KVO를 등록해야 합니다.
- 이를 통해 관찰자는 특성 속성에 대한 변경을 감지할 수 있개 됩니다.
- Notification(통지)
- 관찰 대상 객체의 속성이 변경되면 시스템은 자동으로 등록한 관찰자에게 변경 사항을 통지합니다.
- 이때 관찰자는 특성 메서드를 호출하여 변경된 내용을 처리할 수 있습니다.
예문
imnport Foundation
// Person 클래스가 관찰 대상이 되고, 다른 객체가 이를 관찰합니다.
class Person: NSObject {
@objc dynamic var name: String
init(name: String){
self.name = name
super.init()
}
}
//Observer
class PersonObserver: NSObject {
@objc var person: Person
init(person: Person) {
self.person = person
super.init()
//KVO 등록
person.addObserver(self, forKeyPath: #keyPath(Person.name), options: .new, context: nil)
}
//KVO의 변경 감지 시 호출되는 메서드
override func observerValue(forKeypath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?){
if keyPath == #keyPath(Person.name){
if let newName = change?[.newKey] as? String {
print("Person's name changed to \(newName)")
}
}
}
}
//사용 예시
let person = Person(name: "choi")
let observer = PersonObserver(person: person)
//속성 변경
person.name="Kim"
이 코드는 Objective-C와의 상호 운영성을 활성화하고, KVO를 사용하여 Person
클래스의 name
속성을 관찰하는 PersonObserver
클래스를 정의합니다.
마지막으로 Person
객체를 생성하고 변경하여 KVO 이벤트가 발생하도록 합니다.
42. Grand Central Dispatch(GCD)가 무엇이고, 어떻게 사용되나요?
Grand Central Dispatch(GCD)는 Apple에서 개발한 작업 병렬 처리 프레임워크 입니다.
GCD는 스레드 풀 패턴을 기반으로 하며, 개발자가 코드의 실행을 병렬화할 수 있도록 도와줍니다.
GCD를 사용하면 다음과 같은 작업을 병렬화 할 수 있습니다.
- 네트워킹 요청
- 이미지 처리
- 데이터베이스 작업
- 파일 작업
- 기타 시간이 오래 걸리는 작업
장점
- 간결한 API
- GCD는 사용하기 쉬운 API를 제공합니다.
- 효율성
- GCD는 스레드 풀 패턴을 사용하여 작업을 효율적으로 실행합니다.
- 제어
- GCD는 개발자가 작업의 실행 순서와 우선순위를 제어할 수 있습니다.
사용
- 작업에 실행할 큐를 생성합니다.
- 작업에 큐를 추가합니다.
예를 들어, 다음과 같은 코드는 myTask()
함수를 병렬로 실행합니다.
let queue = DispatchQueue(label: "com.exmaple.myapp.myqueue")
queue.async {
myTask()
}
제공하는 큐
- 메인 큐
- UI 업데이트를 수행하는 데 사용되는 큐
- 전역 큐
- 모든 애플리에키션에서 공유되는 큐
- 작업 큐
- 특정 작업을 수행하는 데 사용되는 큐
43. Swift에서 Error Handling에 대해 설명하세요.
Swift에서의 에러처리(Error Handilng)는 프로그램이 실행 중에 예외적인 상황 또는 오류를 다루는 메커니즘 입니다.
에러 처리를 통해 개발자는 프로그램이 예외 상황에 대응하고 안정적으로 실행할 수 있또록 조치를 취할 수 있습니다.
오류 표현(Error Representation)
- Swift에서는
Error
프로토콜을 준수하는타입을 사용하여 에러를 표현합니다. - 보통
enum
을 사용하여 에러 케이스를 정의하고 해당 케이스에 대한 추가 정보를 제공할 수 있습니다.enum CustomError: Error { case invalidInput case networkError(description: String) }
do-catch문(Do-Catch Statement)
do-catch
문을 사용하여 에러가 발생할 수 있는 코드 블록을 감싸고, 발생한 에러에 대한 처리를 제공합니다.do { try someThrowingFunction() // 정상적인 코드 } catch CustomError.invalidInput { // 유효하지 않는 입력에 대한 처리 } catch CustomError.networkError(let description) { // 네트워크 에러에 대한 처리 } catch { // 기타 에러에 대한 처리 }
try
키워드를 사용하여 에러가 발생할 수 있는 함수나 메서드를 호출합니다.catch
블록에서는 발생한 에러에 대한 처리를 제공합니다.
각catch
블록은 특정 에러 케이스에 대응하거나, 마지막에 일반적인catch
블록을 사용하여 모든 에러에 대응할 수 있습니다.
옵셔널 값 (Optional Values)
- 옵셔널은 특정 값이 존재하지 않을 수 있는 경우는 나타내는 Swift의 기능입니다.
함수나 메서드의 리턴 타입이 옵셔널일 경우, 호출하는 쪽에서는 옵셔널 바인딩이나 옵셔널 체이닝 등을 사용하여 에러 처리를 수행할 수 있습니다.
if let result = try? someThrowingFunction() {
// 에러가 발생하지 않았을 때의 처리
} else {
// 에러가 발생했을 떄의 처리
}
try?
를 사용하여 에러가 발생하면nil
을 리턴하고, 에러가 발생하지 않으면 결과값을 옵셔널로 받습니다.
장점
- 코드의 가독성을 향상시킵니다.
- 에러 처리를 함수나 메서드의 책임으로 분리함으로써 코드의 가독성을 향상시킬 수 있습니다.
- 프로그램의 안전성을 향상시킵니다.
- 에러를 적절하게 처리함으로써 프로그램의 안전성을 향상시킬 수 있습니다.
- 에러 처리를 표준화합니다.
- Swift의 Error Handling은 표준화된 방식으로 에러를 처리할 수 있도록 도와줍니다.
44. AVFoundation 프레임워크를 사용한 경험이 있나요?
AVFoundation 프레임워크의 일반적인 사용 사례 및 기능
- 비디오 및 오디오 캡쳐
- AVFoundation은 카메라 및 마이크와 같은 미디어 장치를 사용하여 비디오 및 오디오를 캡쳐하는 기능을 제공합니다.
- 미디어 파일 재생
- AVFoundation을 사용하여 다양한 미디어 파일(비디오 및 오디오)를 재생할 수 있습니다.
AVPlayer
및AVPlayerViewController
등의 클래스를 사용하여 미디어 재생 기능을 구현할 수 있습니다.
- 비디오 편집 및 처리
- 비디오 및 오디오의 편집, 합성, 변환 등의 작업을 수행할 수 있습니다.
- QR 코드 및 바코드 스캐닝
- 카메라를 사용하여 QR 코드 및 바코스 스캔하는 기능을 구현할 수 있습니다.
- 리얼타임 오디오 및 비디오 처리
- 실시간으로 오디오 및 비디오를 처리하여 응용 프로그램에 실시간 오디오 및 비디오 효과를 적용할 수 있습니다.
- 미디어 메타데이터 처리
- 미디어 파일의 메타 데이터를 검색하고 처리할 수 있습니다.
- 예) 제목, 아티스트, 앨범 정보 등
45. Core Animation과 Core Graphics의 차이는 무엇인가요?
Core Animation
- 애니메이션 중심
- Core Animation은 주로 애니메이션을 만들고 관리하는데 중점을 둔 프레임 워크 입니다.
- 레이어 기반의 애니메이션의 지원하며, 특히 UI 요소의 부드러운 이동, 회전, 크기 조정 등을 처리하는 데 특화되어 있습니다.
- 레이어 기반
- Core Animtaion은 레이어(UIView,CAlayer)를 기반으로 합니다.
- 레이어는 화면에 표시되는 뷰의 기본 구성 요소로, 레이어 단위의 애니메이션을 수행합니다.
- 하드웨어 가속 지원
- Core Animation은 GPU(그래픽 처리 장치)를 활용하여 애니메이션을 렌더링하므로 성능이 우수합니다.
- 하드웨어 가속 지원으로 인해 부드럽고 효율적인 애니메이션을 구현할 수 있습니다.
Core Graphics
- 그래픽 컨텍스트 기반
- Core Graphics는 그래픽 컨텍스트를 기반으로 하는 2D 그래픽 처리를 위한 프레임워크 입니다.
- 직접 그림을 그리고 이미지를 생성하는데 사용됩니다.
- 비트맵 및 벡터 그래픽스 지원
- Core Graphics는 비트맵 그래픽스(이미지 기반) 및 벡터 그래픽스(경로 및 선 등)를 모두 지원합니다.
- 이미지 생성, 그림 그리기, 텍스트 랜더링 등 다양한 그래픽 작업을 수행할 수 있습니다.
- 그림 그리기 및 컨텍스트 변환
- Core Graphics를 사용하면 주어진 컨텍스트에 대한 직접 그림을 그릴 수 있으며, 변환을 적용하여 객체를 회전, 이동 또는 크기 조정할 수 있습니다.
결론
- 용도의 차이
- Core Animation은 주로 UI 애니메이션 및 레이어 기반의 인터페이스에 사용되며, 주로 사용자 경험 향상을 위해 설계되었습니다.
- Core Graphics는 그래픽 처리에 중점을 둔 프레임워크로, 이미지 및 커스텀 그래픽을 그리는 데 사용 됩니다.
- 레어어 VS 컨텍스트
- Core Animtaion은 레이어를 사용하여 애니메이션을 처리합니다.
- Core Graphics는 그래픽 컨텍스트를 사용하여 그림을 그립니다.
기능 | Core Animation | Core Graphics |
---|---|---|
목적 | 애니메이션, 변환 및 모양 생성 | 이미지, 텍스트 및 기타 그래픽 요소 그리기 |
표현 방식 | 레이어 구조 | 객체 구조 |
제공하는 기능 | 애니메이션 효과, 변환, 모양 | 이미지 그리기, 텍스트 그리기, 기본 도형 그리기, 복잡한 도형 그리기 |
적합한 용도 | 애니메이션, 게임, 특수 효과 | 이미지 편집, 웹 디자인, UI 디자인 |
46. 팀 내에서의 업무 협업 방식에 대해 설명하세요.
효과적인 업무 협업을 위한 몇 가지 일반적인 방식
- 의사소통 강화
- 채팅, 이메일, 회의를 통한 정보 공유와 업데이트
- 프로젝트 관리 도구 활용
- 프로젝트 관리 도구를 활용하여 얼무 일정, 할 일 목록, 이슈 트래킹을 관리
- 버전 관리 시스템 활용
- Git을 활용하여 코드 변경 이력 관리
- 일정 및 업무 분담
- 주기적인 미팅과 업무 분담으로 일정 관리
- 정기적인 회의 및 데일리 스탠드 업
- 정기 회의와 데일리 스탠드업으로 의견 공유
- 공유 문화 강조
- 지식 공유와 피드백 문화 강조
- 비상 상황 대응 계획
- 예기치 못한 문제 대비 비상 대응 계획 수립
- 원격 협업 도구 활용
- 비대면 협업을 위한 비디오 회의, 협업 도구 활용
47. 기술적인 문제를 해결할 때 다른 개발자와 어떻게 소통하나요?
다른 개발자와의 원활한 소통을 위한 방법
- 문제 정의 및 예제 코드 제공
- 명확한 문제 정의와 재현 가능한 예재 코드를 공유
- 에러 메시지와 환경 정보 제공
- 발생한 에러 메시지와 사용 중인 환경 정보 제공
- 로그 및 출력물 첨부
- 문제 발생 시 로그 파일이나 출력물을 첨부
- 코드 리뷰 요청
- 관련 코드를 공유하고 코드 리뷰 요청
- 피드백 수용 및 협력적 태도
- 피드백을 수용하고 협력적으로 문제 해결에 참여
48. 코드 리뷰에 대한 경험이 있나요?
코드 리뷰의 이점
- 코드의 품질을 향상 시킬 수 있다.
- 코드 리뷰는 코드의 버그, 오류, 보안 취약점 등을 발견하고 수정하는 데 도움이 됩니다.
- 코드의 가독성, 유지보수성을 향상시킬 수 있다.
- 코드 리뷰는 코드의 구조와 스타일을 개선하는 데 도움이 됩니다.
- 코드 작성자의 기술을 향상시킬 수 있다.
- 코드 리뷰는 코드 작성자가 자신의 코드를 다른 사람의 관점에서 볼 수 있는 기회를 제공합니다.
코드 리뷰 시 고려 사항
- 리뷰의 목적을 명확히 합니다.
- 코드 리뷰의 목적은 버그를 찾는 것인지, 가독성을 개선하는 것인지, 아니면 다른 것인지 명확히 해야합니다.
- 리뷰 대상 코드를 충분히 이해합니다.
- 리뷰 대상 코드를 충분히 이해하지 않으면 적절한 피드백을 제공하기 어렵습니다.
- 객관적인 피드백을 제공합니다.
- 개인적인 의견이나 선호도에 따라 피드백을 제공해서는 안됩니다.
- 건설적인 피드백을 제공합니다.
- 단순히 문제점을 지적하는 것이 아니라, 해결 방법을 함께 제시하는 것이 좋습니다.
49. 새로운 기술이나 도구를 도입하는 경험이 있나요?
자신의 경험을 이야기 하시면 됩니다.
50. 팀에서 발생한 갈등을 해결한 경험이 있나요?
자신의 경험을 이야기 하시면 됩니다.
다음에 계속
100문 100답 List에서 41~50번까지의 질문에 대한 답변입니다.
틀린 답변이 있거나 더 좋은 답변이 있다면 댓글 남겨주시면 적극 반영하겠습니다.
다들 화이팅 입니다.
100문 100답 List 1~10
100문 100답 List 11~20
100문 100답 List 21~30
100문 100답 List 31~40
100문 100답 List 51~60
100문 100답 List 61~70
100문 100답 List 71~80
100문 100답 List 81~90
100문 100답 List 完
이상.