티스토리 뷰

답 방지를 위해서 하나의 글을 두개로 나누어 작성합니다. 

Part 1. 면접 질문

Part 2. 서면질문에 대한 정답 (현재 보시는 글)

Part 3.  구술질문에 대한 정답

 

(Raywenderlich - Swift Interview Questions and Answers 번역)

 

Answers For Beginner Written Questions (초보자 서면 질문에 대한 정답)

 

질문 #1

 

tutorial1.difficulty 와 tutorial2.difficulty 의 값은 무엇인가 ? 만약 Tutorial 구조체가 클래스라면 어떤 점이 다른가? 그 이유는 무엇인가?

 

정답 #1

tutorial1.difficulty 의 답은 1이고, tutorial2.difficulty 의 답은 2이다.

 

해설)

스위프트의 구조체는 '값 타입'. 우리는 '참조'가 아닌 '값'에 의해 값 타입을 복사했어요.

다음의 코드는 tutorial1 의 사본을 생성하고 tutorial2 에 그것을 할당하고 있어요.  

tutorial2 의 변화는 tutorial1 에 반영되지 않아요.

 

만약 Tutorial 이 클래스 였다면, tutorial1.difficulty  와 tutorial2.difficulty 둘 다 '2'. 스위프트의 클래스는 참조타입이어서 그래요.

tutorial1 의 프로퍼티에 우리가 변화를 줄 때, 우리는 tutorial2 에도 tutorial1 이 반영된 것을 보게 될 것이고 반대로도 그렇죠.

 

--------------------------------------------------------------------------------------------

 

질문 #2

 

view 1을 var 로 선언했고 view 2를 let 으로 선언했다. 차이가 무엇이고 마지막 라인을 컴파일 하면 어떻게 될까?

 

정답 #2

 

가능해요 ! 마지막 라인은 컴파일 될 거에요. view1 은 변수이며 우리는 얘를 새로운 UIview 의 인스턴스에도 할당할 수 있어요.

let 키워드로는 우리는 값을 오직 한번에 한하여 할당할 수 있으며, 따라서 다음의 코드는 컴파일되지 않겠죠.

하지만, UIView 는 reference 로서 의미가 있는 클래스(class with reference semantics)이며, 그래서 우리는 view2 의 프로퍼티들을 변형할 수 있어요. 이것이 마지막 라인을 컴파일 하게 되는 의미가 되죠 : 

 

+ 레퍼런스 시멘틱이란 무엇일까요? 다음의 블로그 링크를 통해 공부하고 옵시다.

(https://oaksong.github.io/2017/12/29/value-semantics-vs-reference-semantics/)

 

--------------------------------------------------------------------------------------------

 

질문 #3

 

아래의 복잡한 코드는 알파벳의 순서에 따라 이름의 배열을 분배한다. 여러분이 할 수 있는 한 아래의 클로저 구문을 단순화하라.

 

대답 #3

 

Type inference system 은 자동으로 클로저 구문 내 파라미터들의 타입과 리턴 타입을 계산해요.

그래서 우리는 타입을 제거할 수 있어요. 아래는 제거 한 부분.

우리는 '$i' 표기법으로 파라미터 이름을 대체할 수 있어요.

단일 클로저 표현에서, 우리는 return 키워드 생략이 가능해요. 

마지막 표현의 값은 곧 클로저의 리턴 값이 되어요.

마지막으로, Swift 는 배열의 요소가 'Equatable' 을 준수하는 것을 알고 있으므로, 우리는 단순하게 작성할 수 있어요.

------------------------------------

 

질문 #4

 

아래의 코드로 두 개의 클래스를 생성하였다. Address & Person 이 그것이다.

그래서 Ray 와 Brian 을 나타내기 위해 두 Person 인스턴스를 생성하였다. 

 

이제, 거리를 가로질러 있는 새로운 빌딩으로 브라이언이 이사한다고 가정해봅시다.

여러분은 그의 기록을 다음과 같이 업데이트하길 원한다.

이것을 컴파일하면 에러 없이 작동하죠.

만약 여러분이 레이의 주소를 이제 체크하고 싶다면(아래처럼), 그 또한 새로운 빌딩으로 옮긴 것을 볼 수 있습니다.

여기서 무슨 일이 일어났던 걸까요? 어떻게 우리가 이 문제를 고칠 수 있을까요?

 

정답 #4

 

'Address' 는 클래스이며 레퍼런스 시멘틱을 가지고 있어요.

그래서 우리가 ray 혹은 brian 을 통해 그것에 접근하든 'headquarters' 는 같은 인스턴스 입니다,

'headquarters' 의 주소를 변경하는 것은 두 곳 모두를 변화시킬 거에요. 

Brian 이 Ray 에게 메일을 혹은 그 역의 경우를 만약 가정한다면 무슨 일이 일어날지 상상할 수 있겠어요?

 

새로운 Address 를 생성하여 Brian 에 할당하는 것, 혹은 Address 를 클래스 대신 구조체로 선언하는 것이 해결책이 될 수 있겠네요 :)

------------------------------------

 

좋아요 ! 다음번에는 구술 질문에 대한 정답을 알아보도록 할게요 ! 

 

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
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 31
글 보관함