Notice
Recent Posts
Recent Comments
Link
«   2024/10   »
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
Archives
Today
Total
관리 메뉴

디지안의 개발일지

[TIL] 코틀린 완벽 가이드 3장 정리 문제 본문

카테고리 없음

[TIL] 코틀린 완벽 가이드 3장 정리 문제

안덕기 2022. 3. 16. 23:58
이 글은 [코틀린 완벽가이드](https://www.aladin.co.kr/shop/wproduct.aspx?ItemId=289792512)을 읽고 페이스 북 스터디를 한 이후에 3장의 정리 문제에 대한 답을 정리하였습니다.

### 식이 본문인 함수란 무엇인가? 블록이 본문인 함수 대신 식이 본문인 함수를 쓰면 어떤 경우 더 좋을까?

간단하게 식으로 표현할 수 있는 경우에는 식을 사용하는 것이 가독성 측면에서 더 좋아보인다.

### 디폴트 파라미터와 함수 오버로딩 중 어느 쪽을 써야 할지 어떻게 결정할 수 있을까?

파라미터의 형이 같고 갯수가 다른 경우에는 디폴트 파라미터를 사용할 수 있지만 갯수가 같은데 다른 형을 넣어야하는 경우에는 절대 디폴트 파라미터를 사용할 수 없다.

### 이름 붙은 인자를 사용할 경우의 장단점은 무엇인가?

장점은 다음과 같다.

- 파리미터가 너무 많고 디폴트 값을 지니고 있으면 이름 붙은 인자가 일부분만 넣을 수 있기 때문에 편하다.
- vararg 뒤에 오는 인자가 디폴트 값을 가지고 있는 경우는 반드시 이름 붙은 인자를 사용해야한다.

단점은 다음과 같다.

- 파라미터 이름을 직접

### 인자 개수가 가변적인 함수를 정의하는 방법은 무엇인가? 코틀린과 자바에서 vararg 함수는 어떻게 다른가?

파라미터를 vararg로 선언하면 된다.

vararg가 코틀린과 자바에서 다른 점은 잘모르겠다.

### Unit과 Nothing 타입을 어디에 사용하는가? 이들을 자바의 void와 비교해 설명하라. Nothing이나 Unit이 타입인 함수를 정의해 사용할 수 있는가?

Unit은 함수에서 리턴할 값이 없는 경우 사용하는 타입이다. Nothing은 값이 유효하지 않는 값을 의미하기 때문에 throw를 내포하고 있다. 그렇기 때문에 자바의 void와 유사한 것이 Unit이다.

Unit과 Nothing 둘 다 함수의 파라미터나 리턴 타입으로 선언하고 사용할 수 있다. 하지만 Nothing은 직접 생성할 수는 없지만 예외 타입들을 받을 수는 있다.

### return 문을 사용하지 않은 함수를 선언할 수 있는가?

선언할 수 있다. 식이 본문인 경우에는 return 문을 사용하지 않는다. `return Unit` 이 생략된 것으로 보면 된다.

### 지역 함수란 무엇인가? 이런 함수를 자바에서는 어떻게 흉내 낼 수 있을까?

지역 함수란 함수 함수 내부에 선언한 함수를 의미한다. 자바에서는 SAM을 통해서 흉내낼 수 있을 것으로 본다.

지역 함수는 람다를 쓸 수 없는 경우에 쓰면 된다. 레이블 자체를 쓸 수 없는 경우에는 지역 함수를 쓰면 된다.

### 공개와 비공개 최상위 함수는 어떤 차이가 있는가?

코틀린에서는 파일 가시성을 쓰려고 한다. 비공개 최상위 함수는 이 파일 안에서만 보여준다는 의미를 갖고 있다.

### 패키지를 사용해 코드를 어떻게 여러 그룹으로 나눌 수 있는가? 자바와 코틀린 패키지의 가장 핵심적인 차이는 무엇인지 설명하라.

c언어 - 모듈에 대한 참조가 물리적인 파일의 위치로 결정했다.

자바 - 어떤 물리적인 위치에 있어서 컴파일 시작 포인트로부터 계산되는 폴더의 경로만 일치하면 참조 가능하다.

ex) c://project/src/a/b/c/a.java와 d://project/src/a/b/c/b.java

코틀린 - 파일의 물리적인 위치는 중요하지 않고 파일 위에 선언하는 패키지 선언에 있는 문자열로 패키지를 인식한다.

### 임포트 별명이란 무엇인가? 자바의 정적 임포트와 비슷한 임포트를 코틀린에서는 어떻게 처리하는가?

import시에 이름이 같은 경우 다르게 쓸 수 있다. 풀 패키지명을 쓸 필요가 없어서 편리하다.

### when 문을 처리하는 알고리즘을 설명하라. 자바 switch와 코틀린 when은 어떤 차이가 있는가?

switch는 특정 값에 대해서하면 조건을 맞춰야하지만 when은 특정 값이 아니라 다양한 조건을 넣어서 사용할 수 있다. 그리고 switch는 풀스루를 하지만 when은 반드시 하나의 조건에 대해서만 실행한다.

### while문과 do..while의 차이는 무엇인가? 코틀린 for 루프를 사용해야 하는 이유는 무엇인가?

일반적으로 반복문을 조건보다 먼저 하는 경우 do..while 아닌 경우 while문을 사용한다. 반복문을 얼마나 수행할지 계획을 잘 명시할 수 있으면 for문을 사용하고 동적으로 결정되는 경우에는 while 문을 사용하면 된다.