티스토리 뷰
Swift - (3/3)초보자를 위한 구술면접 정답(Answers of Beginner Verbal Questions)
INSWAG 2019. 4. 28. 12:41답 방지를 위해서 하나의 글을 세 개로 나누어 작성합니다.
Part 1. 면접 질문 (https://atelier-chez-moi.tistory.com/45)
Part 2. 서면질문에 대한 정답 (https://atelier-chez-moi.tistory.com/46)
Part 3. 구술질문에 대한 정답 (현재 보시는 글)
(Raywenderlich - Swift Interview Questions and Answers 번역)
Beginner Verbal Questions(초보자를 위한 구두 질문)
질문 #1
옵셔널이란 무엇이며, 옵셔널로 어떤 문제를 해결할 수 있을까?
정답 #1
옵셔널은 어떤 유형의 변수가 값의 결핍(lack of value) 을 나타낼 수 있게 합니다. (보충+ 옵셔널 변수는 값이 있을 수도 없을 수도 있으니까) Objective-C 에서, 값의 부재(absence of value) 는 특이한 값인 nil 을 사용하여 레퍼런스 타입에 한해서만(only in reference types) 오직 사용가능 했었습니다. 값 타입인 int 혹은 float 은 이러한 능력을 가질 수 없었습니다. (보충+ 기본 타입들은 대부분 구조체로 구현되어 있다)
Swift 는 값의 결핍(lack of value) 개념을 (옵젝씨에서 레퍼런스만이었던 것을) 옵셔널의 개념과 함께 레퍼런스와 값 타입 둘 다로 확장합니다. 옵셔널 변수는 값이든, 값의 결핍을 나타내는 nil 이든 둘 중 하나를 가질 수 있습니다.
--------------------------------------------------------------
질문 #2
구조체와 클래스의 주요 차이점에 대해 요약하시오.
정답 #2
차이점은 다음과 같이 요약해볼 수 있겠습니다:
- 클래스는 상속을 지원하지만, 구조체는 그렇지 못합니다.
- 클래스는 참조 타입이지만(=레퍼런스 타입), 구조체는 값 타입입니다.
--------------------------------------------------------------
질문 #3
제네릭은 무엇인가? 제네릭으로 어떤 문제를 해결할 수 있을까?
정답 #3
스위프트에서 우리는 함수와 데이터 타입(예를 들면 클래스, 구조체, 열거형) 둘 다에서 제네릭을 사용할 수 있습니다.
제네릭은 코드 중복(code duplication) 의 문제를 해결할 수 있습니다. 우리가 하나의 파라미터 타입을 가지는 메소드를 가질 때,
다른 타입의 파라미터를 수용하기 위해서는 이 메소드를 복제하는 것이 일반적입니다.
예를 들어 다음의 코드에서 두 번째 함수는 첫 함수의 "클론(복제품)" 입니다. 정수 대신에 문자열을 받는다는 점만 제외하구요.
제네릭을 적용함으로서, 우리는 두 함수를 하나로 결합할 수 있고 타입을 동시에 안전하게 유지할 수 있습니다.
저는 제네릭 구현을 다음과 같이 해보았습니다.
우리는 이 경우에 동등성(equality)을 테스트하고 있기 때문에, 우리는 파라미터를 Equatable 프로토콜을 구현하는 타입으로 제한합니다.
이 코드는 의도된 결과를 얻게 되고 다른 타입의 파라미터가 전달되는 것을 방지합니다.
--------------------------------------------------------------
질문 #4
일부의 경우에, 우리는 암시적으로 언래핑된 옵셔널을 사용하는 것을 피할 수 없다. 언제 그럴까? 왜 그럴까?
정답 #4
암시적으로 언래핑된 옵셔널을 사용하는 가장 일반적인 이유는 다음의 두 가지 입니다 :
1. 우리가 인스턴스화 할 때에 원래 nil 이 아닌 프로퍼티를 초기화 할 수 없는 경우입니다(+ 어찌보면 당연한 것 같습니다. Xcode 상에서 오류를 일으키겠죠). 전형적인 예시로 Interface Builder outlet(IB outlet)가 있으며, 이 아울렛은 항상 아울렛의 주인을 찾은 후(+ 프로퍼티와 연결되어)에 이니셜라이즈 됩니다. 인터페이스 빌더에서 이것이 제대로 설정되었다고 가정하면, Outlet 이 nil 이 아니라는 것을 사용 전에 보장할 수 있는 것이죠.
2. 두 인스턴스가 서로를 참조하며 다른 인스턴스에 대해 nil 이 아닌 참조(non-nil reference)를 필요로 하는 경우에 발생하는, 강한 순환 참조 문제를 해결하기 위함입니다. 그러한 경우에, 우리는 레퍼런스의 한 쪽에 unowned(미소유 참조) 를 표시하며, 다른 쪽은 암시적으로 언래핑된 옵셔널(implicitly unwrapped optional)을 사용합니다.
--------------------------------------------------------------
질문 #5
옵셔널을 언래핑하기 위한 다양한 방법은 무엇이 있는가? 안전성을 고려할 때, 이 방법들을 어떻게 순위매길 수 있을까?
ex. var x : String? = "Test"
힌트 : 7가지의 방법이 있다.
정답 #5
1. 강제 언래핑 (안전하지 않아요)
2. 암시적 언래핑된 변수의 선언 (얘도 많은 경우에서 안전하지 않아요)
3. 옵셔널 바인딩 (안전해요)
4. 옵셔널 체이닝 (안전해요)
5. '??' 연산자를 활용 (안전해요) ex. (let a = x ?? "")
6. 'guard' 구문 활용 (안전해요)
7. 옵셔널 패턴 (안전해요) (+ 아래는 예시인데 이건 저도 처음보는거라 좀 생소하네요..!)
--------------------------------------------------------------
반응이 괜찮다면 중급 질문도 한번 번역해보도록 하겠습니다..
'Programming > Swift' 카테고리의 다른 글
1. Swift : ARC(Auto Reference Counting) (5) (0) | 2019.05.02 |
---|---|
1. Swift : ARC(Auto Reference Counting) (4) (0) | 2019.05.01 |
Swift - (2/3)초보자를 위한 서면면접 정답(Answers of Beginner Written Questions) (0) | 2019.04.27 |
Swift - (1/3)초보자를 위한 면접 질문(Interview Questions for Beginner) (0) | 2019.04.25 |
1. Swift : ARC(Auto Reference Counting) (3) (0) | 2018.09.22 |
- Total
- Today
- Yesterday
- 스위프트
- 패스트캠퍼스
- 프로그래밍
- 패캠
- 타입
- 컨버전
- array
- 딕셔너리
- fastcampus
- 튜플
- GCD
- OOP
- 열거형
- swiftUI
- 리터럴
- commit
- 깃허브
- Dictionary
- ios
- 개발스쿨
- Operator
- tca
- iOS개발스쿨
- function
- var
- lifecycle
- fallthrough
- Swift
- ARC
- inswag
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |