Java to Kotlin

Wonjun Hwang
Wonjun HwangCEO @Kit Works Inc. à Kit Works inc.
Java to Kotlin
20230721
권능
자바 플랫폼에서 돌아가는 새로운 프로그래밍 언어
2010년 젯브레인스에 의해 개발
기존 자바 라이브러리나 프레임워크와 호환
자바와 같은 수준의 성능
자바의 전통을 이어, 섬 이름을 채택
코틀린
JetBrains
Java 대체를 위한 코틀린의 요구사항
• 정적타입 지정 언어
• 기존 자바 코드와 100% 호환성
• 쉬운 도구-지원 개발
• 배우기 쉽고 뜻을 파악하기 쉬운 언어
현재 자바가 사용되고 있는 모든 용도에 적합하면서도
더 간결하고 생산적이며 안전한 대체 언어를 제공하는 것
코틀린의 철학
실용성
• 이미 성공적으로 검증된 해범과 기능에 의존
• 특정 프로그래밍 스타일이나 패러다임을 사용할 것을 강제하지 않음
• 편리한 개발 환경과 도구의 활용을 염두하여 설계
간결성
• 의미가 없는 코드와 요소를 줄이기 위해 많은 노력
안전성
• JVM에 기반한 안전성 보장
• Nullable 타입 추적과 타입추론을 통한 NPE, ClassCastException 외 기타 런타임오류 최소화
상호운용성
• 기존 자바 기반 라이브러리를 그대로 사용가능.
• 기존 프로젝트에서 자바와 코틀린 모두 사용 가능
정적타입 지정 언어란?
컴파일 시 변수의 ‘타입’이 결정되는 언어.
👍 장점
• 높은 타입 안정성
• 타입 관련 런타임 오류 방지가능
• 컴파일 시에 미리 타입이 결정되어 실행 속도가 빠름
• 코드의 가독성이 좋음
• 장기 개발 및 유지보수에 유리함
😒 단점
• 매번 타입을 결정해줘야 하는 번거로움 존재
함수 – Hello World!
함수는 fun키워드로 정의하며 기본적으로 public
void나 타입추론이 가능한 경우 반환타입을 생략 가능
함수 – 블록({})과 식(Expression)
코틀린에서 블록이 본문인 함수와 식이 본문인 함수 두가지 구분
식이 본문인 함수의 반환 타입은 타입 추론을 통해 결정
코틀린의 타입추론
가능? 불가능?
변수
val(=value): 변경 불가능한 참조
var(variable): 변경 가능한 참조
타입추론에 의해 타입을 생략할 수 있지만, 한번 지정된 타입은 고정
가능한 val키워드를 사용하는 것을 권장
타입 – Nullable 타입
Null 문제를 실행 시점 -> 컴파일 시점으로 옮겨 NPE 가능성 최소화
Type? = Type 또는 null
Type = Type
nullable타입과 non-null 두 타입으로 구분
Java와 달리, non-null타입에는 nullable타입을 할당 불가능
타입 – Nullable 타입
가능? 불가능?
타입 – Null관련 연산자
Nullable타입을 사용하기 위해선 꼭 null체크를 해주어야 한다.
코틀린은 편리한 null체크를 위해, 다양한 null관련 연산자를 제공
Safe Call 연산자 ?.
호출하려는 값이 null이 아니면 메서드 호출을 하고, 아니라면 null을 반환
Nullable타입 호출시, Null체크를 강제하면서도 간편하기 때문에 NPE 발생 가능성이 개선
Elvis 연산자 ?:
null 대신 사용할 디폴트 값을 지정할 때 사용할 수 있는 연산자이다.
return 이나 throw등의 연산자를 사용할 수도 있다.
let 함수
Safe Call 연산자와 함께 사용하여 null이 아닐때만 블록을 수행하는 함수
Safe Cast 연산자 as?
as? 연산자는 어떤 값을 지정한 타입으로 캐스트하고 변환할 수 없으면 null을 반환한다.
조건문 – If
Kotlin에서 If는 Expression(식)이므로 값을 반환
따라서 삼항연산자가 따로 존재하지 않음
조건문 – When
When도 Expression이므로 값을 반환
각 분기에 break가 불필요
조건문 – When과 스마트캐스팅
타입 검사에 성공하면, 컴파일러가 자동으로 캐스팅해주는 스마트캐스팅 지원.
when문과 함께 활용하여 안전하면서도 간결하게 타입 캐스팅이 가능
For문 – 수에 대한 이터레이션
코틀린 for문은 for-each루프 형태만 존재
범위는 in으로 지정하고, 내림차순은 downTo로 명시.
수열은 step이나 filter를 통해 직접 조건을 지정 가능
For문 – 컬랙션에 대한 이터레이션
함수 – 디폴트 값
디폴트 값을 지원하여 불필요한 코드가 줄고, 가독성 개선
클래스와 프로퍼티
코틀린의 data class는 생성자부터 getter & setter, 심지어 canonical methods까지
생성
문자열 템플릿
코틀린 문자열 템플릿은 복잡한 식을 {}을 통해 처리할 수 있다.
1 sur 25

Recommandé

자바에서 null을 안전하게 다루는 방법 par
자바에서 null을 안전하게 다루는 방법자바에서 null을 안전하게 다루는 방법
자바에서 null을 안전하게 다루는 방법Sungchul Park
19.7K vues38 diapositives
Kotlin par
KotlinKotlin
Kotlinwanwook choo
101 vues37 diapositives
Use JavaScript more strictly (feat. TypeScript, flow) par
Use JavaScript more strictly (feat. TypeScript, flow)Use JavaScript more strictly (feat. TypeScript, flow)
Use JavaScript more strictly (feat. TypeScript, flow)Mark Lee
1.3K vues95 diapositives
Java null survival guide par
Java null survival guideJava null survival guide
Java null survival guideSungchul Park
4K vues67 diapositives
Design patterns par
Design patternsDesign patterns
Design patternsJoshua Yoon
553 vues123 diapositives
Swift5 vs objective c par
Swift5 vs objective cSwift5 vs objective c
Swift5 vs objective cBill Kim
147 vues52 diapositives

Contenu connexe

Similaire à Java to Kotlin

객체지향 프로그래밍 기본 par
객체지향 프로그래밍 기본객체지향 프로그래밍 기본
객체지향 프로그래밍 기본용호 최
787 vues65 diapositives
Effective java par
Effective javaEffective java
Effective javaHaeil Yi
4.1K vues135 diapositives
[자바카페] 자바 객체지향 프로그래밍 (2017) par
[자바카페] 자바 객체지향 프로그래밍 (2017)[자바카페] 자바 객체지향 프로그래밍 (2017)
[자바카페] 자바 객체지향 프로그래밍 (2017)용호 최
314 vues67 diapositives
[1B1]스위프트프로그래밍언어 par
[1B1]스위프트프로그래밍언어[1B1]스위프트프로그래밍언어
[1B1]스위프트프로그래밍언어NAVER D2
10.3K vues160 diapositives
아꿈사.C++ api 디자인.20140315 a par
아꿈사.C++ api 디자인.20140315 a아꿈사.C++ api 디자인.20140315 a
아꿈사.C++ api 디자인.20140315 aChoonghyun Yang
1.6K vues44 diapositives
Effective c++ chapter 7,8 par
Effective c++ chapter 7,8Effective c++ chapter 7,8
Effective c++ chapter 7,8문익 장
573 vues67 diapositives

Similaire à Java to Kotlin(10)

객체지향 프로그래밍 기본 par 용호 최
객체지향 프로그래밍 기본객체지향 프로그래밍 기본
객체지향 프로그래밍 기본
용호 최787 vues
Effective java par Haeil Yi
Effective javaEffective java
Effective java
Haeil Yi4.1K vues
[자바카페] 자바 객체지향 프로그래밍 (2017) par 용호 최
[자바카페] 자바 객체지향 프로그래밍 (2017)[자바카페] 자바 객체지향 프로그래밍 (2017)
[자바카페] 자바 객체지향 프로그래밍 (2017)
용호 최314 vues
[1B1]스위프트프로그래밍언어 par NAVER D2
[1B1]스위프트프로그래밍언어[1B1]스위프트프로그래밍언어
[1B1]스위프트프로그래밍언어
NAVER D210.3K vues
아꿈사.C++ api 디자인.20140315 a par Choonghyun Yang
아꿈사.C++ api 디자인.20140315 a아꿈사.C++ api 디자인.20140315 a
아꿈사.C++ api 디자인.20140315 a
Choonghyun Yang1.6K vues
Effective c++ chapter 7,8 par 문익 장
Effective c++ chapter 7,8Effective c++ chapter 7,8
Effective c++ chapter 7,8
문익 장573 vues
동시성 프로그래밍 하기 좋은 Clojure par Eunmin Kim
동시성 프로그래밍 하기 좋은 Clojure동시성 프로그래밍 하기 좋은 Clojure
동시성 프로그래밍 하기 좋은 Clojure
Eunmin Kim7.3K vues
[스프링 스터디 1일차] 오브젝트와 의존관계 par AnselmKim
[스프링 스터디 1일차] 오브젝트와 의존관계[스프링 스터디 1일차] 오브젝트와 의존관계
[스프링 스터디 1일차] 오브젝트와 의존관계
AnselmKim310 vues
Effective c++ 정리 1~2 par Injae Lee
Effective c++ 정리 1~2Effective c++ 정리 1~2
Effective c++ 정리 1~2
Injae Lee1.5K vues

Plus de Wonjun Hwang

상속과 구현 par
상속과 구현상속과 구현
상속과 구현Wonjun Hwang
0 vue77 diapositives
오버라이딩 조금 더 알아보기 par
오버라이딩 조금 더 알아보기오버라이딩 조금 더 알아보기
오버라이딩 조금 더 알아보기Wonjun Hwang
0 vue22 diapositives
컴포넌트 설계 par
컴포넌트 설계컴포넌트 설계
컴포넌트 설계Wonjun Hwang
14 vues21 diapositives
성능 테스트 par
성능 테스트성능 테스트
성능 테스트Wonjun Hwang
13 vues13 diapositives
WebRTC par
WebRTCWebRTC
WebRTCWonjun Hwang
22 vues18 diapositives
Flutter & Firebase par
Flutter & FirebaseFlutter & Firebase
Flutter & FirebaseWonjun Hwang
18 vues16 diapositives

Plus de Wonjun Hwang(20)

오버라이딩 조금 더 알아보기 par Wonjun Hwang
오버라이딩 조금 더 알아보기오버라이딩 조금 더 알아보기
오버라이딩 조금 더 알아보기
Wonjun Hwang0 vue
프론트엔드 비동기 프로그래밍 par Wonjun Hwang
프론트엔드 비동기 프로그래밍프론트엔드 비동기 프로그래밍
프론트엔드 비동기 프로그래밍
Wonjun Hwang28 vues
트렌디 앱 - ARC & OBSIDIAN par Wonjun Hwang
트렌디 앱 - ARC & OBSIDIAN트렌디 앱 - ARC & OBSIDIAN
트렌디 앱 - ARC & OBSIDIAN
Wonjun Hwang29 vues
차이나는 개발자 클라스 par Wonjun Hwang
차이나는 개발자 클라스차이나는 개발자 클라스
차이나는 개발자 클라스
Wonjun Hwang6 vues
차이나는 개발자 클라스 par Wonjun Hwang
차이나는 개발자 클라스차이나는 개발자 클라스
차이나는 개발자 클라스
Wonjun Hwang37 vues

Java to Kotlin

  • 2. 자바 플랫폼에서 돌아가는 새로운 프로그래밍 언어 2010년 젯브레인스에 의해 개발 기존 자바 라이브러리나 프레임워크와 호환 자바와 같은 수준의 성능 자바의 전통을 이어, 섬 이름을 채택 코틀린
  • 4. Java 대체를 위한 코틀린의 요구사항 • 정적타입 지정 언어 • 기존 자바 코드와 100% 호환성 • 쉬운 도구-지원 개발 • 배우기 쉽고 뜻을 파악하기 쉬운 언어 현재 자바가 사용되고 있는 모든 용도에 적합하면서도 더 간결하고 생산적이며 안전한 대체 언어를 제공하는 것
  • 5. 코틀린의 철학 실용성 • 이미 성공적으로 검증된 해범과 기능에 의존 • 특정 프로그래밍 스타일이나 패러다임을 사용할 것을 강제하지 않음 • 편리한 개발 환경과 도구의 활용을 염두하여 설계 간결성 • 의미가 없는 코드와 요소를 줄이기 위해 많은 노력 안전성 • JVM에 기반한 안전성 보장 • Nullable 타입 추적과 타입추론을 통한 NPE, ClassCastException 외 기타 런타임오류 최소화 상호운용성 • 기존 자바 기반 라이브러리를 그대로 사용가능. • 기존 프로젝트에서 자바와 코틀린 모두 사용 가능
  • 6. 정적타입 지정 언어란? 컴파일 시 변수의 ‘타입’이 결정되는 언어. 👍 장점 • 높은 타입 안정성 • 타입 관련 런타임 오류 방지가능 • 컴파일 시에 미리 타입이 결정되어 실행 속도가 빠름 • 코드의 가독성이 좋음 • 장기 개발 및 유지보수에 유리함 😒 단점 • 매번 타입을 결정해줘야 하는 번거로움 존재
  • 7. 함수 – Hello World! 함수는 fun키워드로 정의하며 기본적으로 public void나 타입추론이 가능한 경우 반환타입을 생략 가능
  • 8. 함수 – 블록({})과 식(Expression) 코틀린에서 블록이 본문인 함수와 식이 본문인 함수 두가지 구분 식이 본문인 함수의 반환 타입은 타입 추론을 통해 결정
  • 10. 변수 val(=value): 변경 불가능한 참조 var(variable): 변경 가능한 참조 타입추론에 의해 타입을 생략할 수 있지만, 한번 지정된 타입은 고정 가능한 val키워드를 사용하는 것을 권장
  • 11. 타입 – Nullable 타입 Null 문제를 실행 시점 -> 컴파일 시점으로 옮겨 NPE 가능성 최소화 Type? = Type 또는 null Type = Type nullable타입과 non-null 두 타입으로 구분 Java와 달리, non-null타입에는 nullable타입을 할당 불가능
  • 12. 타입 – Nullable 타입 가능? 불가능?
  • 13. 타입 – Null관련 연산자 Nullable타입을 사용하기 위해선 꼭 null체크를 해주어야 한다. 코틀린은 편리한 null체크를 위해, 다양한 null관련 연산자를 제공
  • 14. Safe Call 연산자 ?. 호출하려는 값이 null이 아니면 메서드 호출을 하고, 아니라면 null을 반환 Nullable타입 호출시, Null체크를 강제하면서도 간편하기 때문에 NPE 발생 가능성이 개선
  • 15. Elvis 연산자 ?: null 대신 사용할 디폴트 값을 지정할 때 사용할 수 있는 연산자이다. return 이나 throw등의 연산자를 사용할 수도 있다.
  • 16. let 함수 Safe Call 연산자와 함께 사용하여 null이 아닐때만 블록을 수행하는 함수
  • 17. Safe Cast 연산자 as? as? 연산자는 어떤 값을 지정한 타입으로 캐스트하고 변환할 수 없으면 null을 반환한다.
  • 18. 조건문 – If Kotlin에서 If는 Expression(식)이므로 값을 반환 따라서 삼항연산자가 따로 존재하지 않음
  • 19. 조건문 – When When도 Expression이므로 값을 반환 각 분기에 break가 불필요
  • 20. 조건문 – When과 스마트캐스팅 타입 검사에 성공하면, 컴파일러가 자동으로 캐스팅해주는 스마트캐스팅 지원. when문과 함께 활용하여 안전하면서도 간결하게 타입 캐스팅이 가능
  • 21. For문 – 수에 대한 이터레이션 코틀린 for문은 for-each루프 형태만 존재 범위는 in으로 지정하고, 내림차순은 downTo로 명시. 수열은 step이나 filter를 통해 직접 조건을 지정 가능
  • 22. For문 – 컬랙션에 대한 이터레이션
  • 23. 함수 – 디폴트 값 디폴트 값을 지원하여 불필요한 코드가 줄고, 가독성 개선
  • 24. 클래스와 프로퍼티 코틀린의 data class는 생성자부터 getter & setter, 심지어 canonical methods까지 생성
  • 25. 문자열 템플릿 코틀린 문자열 템플릿은 복잡한 식을 {}을 통해 처리할 수 있다.

Notes de l'éditeur

  1. 코틀린 개발 팀이 대부분 살고 있는 러시아의 상트페테르부르크 근처 섬 이름
  2. 우리가 자바를 대신할 언어에 대해 어떤 요구 사항을 갖고 있었을까? 정적 타입 지정 외에 수백만 줄이나 되는 코드 베이스를 미치지 않고 개발할 수 있는 다른 방법은 없다. 둘째로 기존 자바 코드와 완전히 호환되는 언어가 필요했다. 기존 코드베이스는 젯브레인스의 엄청나게 귀중한 자산이며, 상호운용성이 부족해서 그런 자산을 잃어버리거나 자산의 가치가 줄어 드는 일을 용납할 수는 없었다. 셋째로 그 언어를 위한 도구 개발이 쉬워야만 했다. 우리는 도구 제공 가능성을 타협하고 싶지 않았다. 회사로서 젯브레인스에 가장 중요한 가치는 개발 생산성이며, 높은 생산성을 얻기 위해서는 훌륭한 도구가 필수다. 마지막으 로 배우기 쉽고 뜻을 파악하기 쉬운 언어가 필요했다. 자바의 개념과 기법 위에 만들어진 코틀린의 주목적은 현재 자바가 사용되고 있는 모든 용도에 적합하면서도 더 간결하고 생산적이며 안전한 대체 언어를 제공하는 것이다.
  3. 실용성 코틀린은 실제 문제를 해결하기 위해 만들어진 실용적인 언어다. 코틀린은 실험적인 기능을 추가하지 않고, 다른 프로그래밍 언어가 채택한 이미 성공적으로 검증된 해범과 기능에 의존하다. 코드가 더 간결할수록 내용을 파악하기가 더 쉽다. 기존 자바의 번거로운 준비 코드를 묵시적으로 제공하여 지저분해지는 일을 줄였다. 코틀린을 JVM에서 실행한다는 사실은 이미 상당한 안전성을 보장할 수 있다는 뜻이다. 메모리 안전성을 보장하고, 버퍼 오버플로를 방지하며, 동적으로 할당한 메모리를 잘못 사용함으로 인해 발생할 수 있는 다양한 문제를 예방하고 타입 안전성을 보장한다. 코틀린을 만들면서 자바보다 더 높은 수준의 안전성을 달성하되 전체 비용은 더 적게 지불하고 싶었다. 대부분의 경우 코틀린 컴파일러가 타입을 자동으로 추론해준다. 보다 간편한 방법으로 실행시점에 오류를 더 많이 방지해준다. 코틀린의 타입 시스템은 오직 ? 한글자만 추가하는 것으로 null이 될 수 없는 값을 추적하며 NPE가 발생할 수 있는 연산을 사용하는 코드를 금지한다. val s: String?= null -> 널이 될 수 있음. val s2: String = "" -> 널이 될 수 없음 코틀린에서는 타입 검사와 캐스트가 한 연산자 is 에 의해 이뤄진다. 타입 검사를 생략할 이유가 없고, 그로인해 ClassCastException 오류가 발생할 일도 없다. 상호운용성 기존 자바 지반 라이브러리를 그대로 사용할 수 있다. 코틀린은 기존 자바 라이브러리를 가능하면 최대한 활용한다. 예를 들어 코틀린 자체 컬렉션 라이브러리를 제공하지 않고 자바 표준 라이브러리 클래스에 의존한다. 다만 코틀린에서 컬렉션을 더 쉽게 활용할 수 있는 몇 가지 기능을 더할 뿐이다. 코틀린이 제공하는 도구도 다운 언저 프로젝트를 완전히 지원한다. 코틀린은 자바와 코틀린 소스 파일이 임의로 섞여 있어도 제대로 프로그램을 컴파일할 수 있다.
  4. 정적타입 언어는 컴파일 시 변수의 ‘타입’이 결정, 동적타입 언어는 런타임 시 변수의 ‘타입’이 결정됩니다. 👍 정적타입 언어의 장점 타입 에러로 인한 문제점을 초기에 발견할 수 있어 타입 관련한 런타임 오류를 방지할 수 있고 타입의 안정성이 높음. 특히, 사용자에게 배포되는 앱의 경우 타입 관련한 검증을 컴파일 시에 하지 않고 런타임에 하게 되면 앱 사용 시 타입 불일치로 인한 크래시의 발생 위험이 높아짐. 컴파일 시에 미리 타입을 결정하기 때문에 실행 속도가 빠름 코드의 가독성이 좋음. 다수의 협업이나 프로젝트의 장기 개발 및 유지보수에 유리함. 😒 정적타입 언어의 단점 매번 코드 작성시 변수형을 결정해줘야 하는 번거로움이 있음. 👍 동적타입 언어의 장점 런타임까지 타입에 대한 결정을 끌고 갈 수 있기 때문에 유연성이 높음 타입 관련하여 지켜야 할 규칙이 적기 때문에 상대적으로 코드가 짧고 Learning-Curve가 낮다. 😒 동적타입 언어의 단점 실행 도중에 변수에 예상치 못한 자료형이 들어와 TypeError를 발생할 수 있음. 타입 관련 Error는 런타임 시 확인할 수 밖에 없기 때문에, 코드가 길고 복잡해질 경우 타입 에러를 찾기가 어려워짐. 이러한 불편함을 해소하기 위해 TypeScript나 Flow 등을 사용할 수 있음.
  5. 식이 본문인 함수와 블록이 본문인 함수로 나뉜다. *코틀린의 if는 문장(statement)이 아니고 식(expression)이다.
  6. 식이 본문인 함수와 블록이 본문인 함수로 나뉜다. *코틀린의 if는 문장(statement)이 아니고 식(expression)이다.
  7. 코틀린은 null 문제를 실행 시점에서 컴파일 시점으로 옮겼다. null여부를 컴파일 시 미리 감지해서 실행 시점에 발생 할 수 있는 예외의 가능성을 줄일 수 있다. 타입 이름 뒤에 ?를 붙이면 null참조를 붙일 수 있다. Nullable 타입은 널체크를 하지 않으면 변수.메소드()처럼 메소드를 직접 호출할 수는 없다. 2. non-nullable 타입 변수에 대입할 수 없다.
  8. 코틀린은 null 문제를 실행 시점에서 컴파일 시점으로 옮겼다. null여부를 컴파일 시 미리 감지해서 실행 시점에 발생 할 수 있는 예외의 가능성을 줄일 수 있다. 타입 이름 뒤에 ?를 붙이면 null참조를 붙일 수 있다. Nullable 타입은 널체크를 하지 않으면 변수.메소드()처럼 메소드를 직접 호출할 수는 없다. 2. non-nullable 타입 변수에 대입할 수 없다.
  9. 코틀린은 null 문제를 실행 시점에서 컴파일 시점으로 옮겼다. null여부를 컴파일 시 미리 감지해서 실행 시점에 발생 할 수 있는 예외의 가능성을 줄일 수 있다. 타입 이름 뒤에 ?를 붙이면 null참조를 붙일 수 있다. Nullable 타입은 널체크를 하지 않으면 변수.메소드()처럼 메소드를 직접 호출할 수는 없다. 2. non-nullable 타입 변수에 대입할 수 없다.
  10. 코틀린은 null 문제를 실행 시점에서 컴파일 시점으로 옮겼다. null여부를 컴파일 시 미리 감지해서 실행 시점에 발생 할 수 있는 예외의 가능성을 줄일 수 있다. Nullable 타입은 널체크를 하지 않으면 변수.메소드()처럼 메소드를 직접 호출할 수는 없다. 2. non-nullable 타입 변수에 대입할 수 없다.
  11. 코틀린은 null 문제를 실행 시점에서 컴파일 시점으로 옮겼다. null여부를 컴파일 시 미리 감지해서 실행 시점에 발생 할 수 있는 예외의 가능성을 줄일 수 있다. Nullable 타입은 널체크를 하지 않으면 변수.메소드()처럼 메소드를 직접 호출할 수는 없다. 2. non-nullable 타입 변수에 대입할 수 없다.
  12. 자바에서 타입 캐스팅을 할 때, instanceof 연산자를 종종 생략하곤 한다. Instanceof 연산자로 타입체크를 하지 않으면 ClassCastException이 발생할 가능성이 있다. 코틀린에서는 as? 연산자를 통해서 null-safe하면서 쉽게 타입 캐스팅을 할 수 있어 예외 발생 가능성이 낮아졌다.
  13. 자바에서는 타입 검사 수행 후, 명시적으로 타입 캐스팅을 해주어야 했지만
  14. 자바는 메서드 인자에 디폴트 값을 지원하지 않아서 다음와 같이 여러 메서드를 오버로딩하여 정의해야만 했습니다. 코틀린은 디폴트 값을 지원하기 때문에 불필요한 코드가 줄고, 가독성이 확실히 많이 개선되었습니다.
  15. 식이 본문인 함수와 블록이 본문인 함수로 나뉜다. *코틀린의 if는 문장(statement)이 아니고 식(expression)이다.
  16. 식이 본문인 함수와 블록이 본문인 함수로 나뉜다. *코틀린의 if는 문장(statement)이 아니고 식(expression)이다.