본문 바로가기
주저리/> 리뷰

핵심 문법과 예제로 배우는 코틀린

by 니키ᕕ( ᐛ )ᕗ 2018. 2. 22.


 

 

 

 

 

“책 소개

 

코틀린다운 개발을 위한 문법 설명과 예제!


이 책은 코틀린 기본 문법에 충실한 설명과 예제로 구성되었으며, 이를 통해 코틀린 언어의 핵심을 일목요연하고 깊이 있게 파악할 수 있다. 따라서 코틀린을 제대로 배우고자 하는 사람들, 특히 자바를 비롯해 다른 프로그래밍 언어 개발 경험이 있는 사람들이 빠른 시간 내에 코틀린을 파악하는 데 큰 도움이 될 것이다.


“출판사 서평

 

코틀린다운 개발을 위한 문법 설명과 예제!

핵심을 짚어주는 설명과 이해하기 쉬운 코드로 배우는 코틀린 학습서!


코틀린(Kotlin)은 오픈 소스 소프트웨어로 젯브레인(JetBrains)에서 개발한 프로그래밍 언어다. 2011년부터 개발이 시작되어 2016년에 1.0 정식 버전이 발표된 후 현재도 계속 진화 중이며, 구글 I/O 2017에서 안드로이드 애플리케이션의 공식 개발 언어로 발표되었다.


코틀린으로 작성된 소스 코드는 코틀린 컴파일러에 의해 JVM에서 실행되는 바이트 코드로 생성되므로 자바와 100% 호환된다. 또한, 컴퓨터 운영체제의 JVM에서 독자적으로 실행되는 네이티브 애플리케이션, 웹브라우저에서 실행되는 자바스크립트, 서버에서 실행되는 Http 서블릿, 구글 안드로이드 애플리케이션을 코틀린으로 개발할 수 있다. 이와 더불어 코틀린은 새로운 언어답게 여러 장점을 갖고 있는데, 특히 객체지향 프로그래밍과 함수형 프로그래밍의 장점을 절묘하게 조화시켜 간결하면서도 강력한 코드를 쉽게 작성할 수 있다.


이 책은 코틀린 기본 문법에 충실한 설명과 예제로 구성되었으며, 이를 통해 코틀린 언어의 핵심을 일목요연하고 깊이 있게 파악할 수 있다. 따라서 코틀린을 제대로 배우고자 하는 사람들, 특히 자바를 비롯해 다른 프로그래밍 언어 개발 경험이 있는 사람들이 빠른 시간 내에 코틀린을 파악하는 데 큰 도움이 될 것이다.


“이 책으로 배우는 코틀린 핵심 사항

 

? 개요와 특징 그리고 아키텍처 

? 기본 구성 요소와 문법 

? 각종 함수의 이해와 사용법 

? 람다식의 개념과 사용법 

? 컬렉션 인터페이스와 구현 클래스 사용법

? 애플리케이션 개발에 필요한 소프트웨어 설치와 사용법

? null 처리 메커니즘

? 객체지향 프로그래밍의 핵심 사항과 구현 및 사용법

? 예외와 예외 처리

? 제네릭의 핵심 개념과 사용법



“책 속으로

 

책속으로

이번 장에서는 코틀린 언어의 개요와 특징 및 아키텍처를 알아보았다. 코틀린의 새로운 언어 구성 요소와 문법이 다양하다는 것을 알 수 있는데, 앞으로 이 책을 계속 읽으면서 직접 코드를 작성해 보면 차차 알게 될 것이다. 다음 장에서는 코틀린으로 네이티브 애플리케이션을 개발하는 데 필요한 코틀린 컴파일러와 IDE를 설치하고 구성하는 방법을 살펴본다.

_4쪽


왼쪽 패널에는 코틀린의 명령어와 기능들이 요약되어 있으며, 각 항목 왼쪽의 작은 삼각형을 클릭하면 상세 항목을 확장하거나 축소하여 볼 수 있다. 그리고 그중 하나를 클릭하면 샘플 소스 코드를 오른쪽의 편집기 패널에 보여준다. 여기에 나타난 코드는 우리가 원하는 대로 수정하고 실행할 수 있다. 또한, 오른쪽 위의 Run 버튼을 클릭하면 곧바로 현재 코드가 컴파일되어 실행되며, 출력된 결과는 아래쪽 패널에 나타난다. 그리고 위쪽에 사각형으로 표시된 필드에는 main( ) 함수가 실행될 때 인자로 받을 수 있는 값을 입력할 수 있으며, 각 패널의 경계선을 마우스로 끌면 패널 크기를 조정할 수 있다.

_43쪽


엘비스 연산자의 오른쪽 피연산자는 왼쪽 피연산자와 마찬가지로 변수, 표현식, 함수 호출 모두 가능하며, 예외를 발생시키는 throw 문이 될 수도 있다. 그리고 엘비스 연산자가 함수 내부에서 사용될 때는 오른쪽 피연산자에 return 문을 사용할 수 있으며, 이때는 해당 값을 반환하면서 함수 실행이 종료된다. 함수 실행을 시작하면서 사전에 만족해야 하는 조건을 확인할 때 사용하면 유용하다.

_95쪽


객체 선언에서는 클래스로부터 상속받거나 인터페이스도 구현할 수 있다. 따라서 기존 클래스의 싱글톤 객체를 생성하여 사용하거나, 또는 시스템 프레임워크의 인터페이스를 구현해야 할 필요가 있을 때 유용하다. 이때는 다음과 같이 콜론(:) 다음에 슈퍼 타입(클래스나 인터페이스)을 지정하고 슈퍼 타입의 함수를 오버라이딩하면 된다. 인터페이스를 구현하는 예는 다음과 같다.

_159쪽


코틀린은 함수형 프로그래밍 언어의 기능을 제공하지만, 근본적으로는 객체지향 프로그래밍 언어다. 프로그램의 모든 데이터는 객체의 형태로 생성되고 저장되어 사용된다. 따라서 프로그램이 실행되는 동안 객체를 저장할 수 있는 방법이 있어야 한다. 이런 방법을 제공하는 것을 컬렉션(collection)이라고 한다. 넓은 의미로는 배열(array)도 컬렉션이라고 할 수 있으며, 가장 기본적인 객체 저장 방법을 제공한다.

_223쪽

 

“저자 소개

 

심재철

현재 프리랜서로, 데이터베이스/모바일 시스템 컨설팅과 강의를 한고 있다. 또한, 20년 넘게 데이터베이스 및 객체지향 시스템 설계 및 개발 프로젝트, 건설/금융 분야 애플리케이션 개발 등에 참여했다. 새로운 테크놀로지와 다양한 프로그래밍 언어를 사용해서 실무에 활용하고 가르치는 것을 좋아한다. 대표 번역서로는 《핵심만 골라 배우는 안드로이드 스튜디오 3 & 프로그래밍》, 《실무에 적용하는 안드로이드 프로그래밍(제2판)》, 《Learn Android Studio》, 《SQLite 마스터북(제2판)》, 《프로 오브젝티브-C 디자인 패턴》, 《세븐 데이터베이스: 만들면서 파악하는 NoSQL》, 《UML 사용자 지침서》, 《Thinking in JAVA 4/e》, 《이펙티브 자바》 등이 있다.


“차례

 

차례

1장 코틀린 개요_1

1.1 코틀린 언어 개요 1

1.2 코틀린의 특징 2

1.3 코틀린 아키텍처 3

1.4 요약 4


2장 코틀린 개발 환경 구축하기_5

2.1 JDK 설치하기 5

2.1.1 윈도우에서 설치하기 5

2.1.2 맥 OS에서 설치하기 7

2.2 코틀린 컴파일러 설치하기 8

2.3 코틀린 애플리케이션 개발 IDE 설치하기 9

2.3.1 이클립스 설치와 구성하기 10

2.3.2 IntelliJ IDEA 설치와 구성하기 14

2.3.3 Visual Studio Code 설치와 구성하기 20

2.4 사용할 IDE 선택하기 29

2.5 요약 30


3장 “안녕하세요?” 코틀린_31

3.1 명령행에서 애플리케이션 작성과 실행하기 31

3.1.1 처음 만나는 코틀린 31

3.1.2 코틀린 애플리케이션 빌드 절차 33

3.1.3 코틀린 REPL 사용하기 34

3.2 이클립스로 애플리케이션 작성과 실행하기 35

3.3 IntelliJ IDEA로 애플리케이션 작성과 실행하기 38

3.4 Visual Studio Code로 애플리케이션 작성과 실행하기 40

3.5 코틀린 공식 사이트의 TRY ONLINE 사용하기 42

3.6 요약 43


4장 기본 구성 요소와 문법_44

4.1 코틀린 프로그램 구조 44

4.2 패키지 47

4.2.1 패키지 지정하기 47

4.2.2 다른 패키지의 코드 사용하기 48

4.2.3 import 별칭 사용하기 48

4.3 코틀린 변수 49

4.4 코틀린의 타입 50

4.4.1 기본 타입 50

4.4.2 문자열 타입 52

4.4.3 기본 타입의 리터럴 54

4.4.4 문자열 리터럴 54

4.4.5 배열 56

4.4.6 다차원 배열 59

4.4.7 타입 추론 62

4.5 연산자와 연산자 오버로딩 64

4.5.1 산술 연산자 64

4.5.2 단항 연산자 67

4.5.3 복합 대입 연산자 68

4.5.4 비트 연산자 69

4.5.5 논리 연산자 70

4.5.6 동등 비교 연산자 71

4.5.7 그 밖의 비교 연산자 72

4.5.8 in 연산자 74

4.5.9 범위 연산자 75

4.5.10 인덱스 연산자 76

4.5.11 Invoke 연산자 77

4.5.12 타입 확인 연산자: is, !is 78

4.6 코드 실행 제어 79

4.6.1 if 표현식 79

4.6.2 when 표현식 81

4.6.3 for 루프 84

4.6.4 while과 do-while 루프 86

4.6.5 break와 continue 86

4.7 요약 88


5장 Null 처리 메커니즘_90

5.1 Null 가능 타입 90

5.2 Null 처리 연산자 93

5.2.1 “ ?.” 93

5.2.2 “ ?:” 94

5.2.3 “ !!” 95

5.2.4 as, as? 96

5.3 let 함수 97

5.4 스마트 캐스트 100

5.5 플랫폼 타입 102

5.6 요약 105


6장 함수_106

6.1 함수 선언과 호출 106

6.2 가변 인자 109

6.3 최상위 수준 함수와 속성 111

6.4 멤버 함수 114

6.5 지역 함수 115

6.6 제네릭 함수 116

6.7 확장 함수 118

6.8 중위 함수 119

6.9 꼬리형 재귀 함수 121

6.10 요약 123


7장 클래스와 객체_124

7.1 클래스 선언과 생성자 124

7.1.1 기본 생성자 125

7.1.2 보조 생성자 127

7.2 속성과 게터/세터 129

7.2.1 속성과 필드의 차이점 129

7.2.2 게터와 세터 130

7.2.3 우리의 게터와 세터를 정의하고 사용하기 134

7.2.4 후원 필드 136

7.2.5 지연 초기화 속성 141

7.3 멤버 함수 142

7.4 가시성 제한자와 접근 제한자 143

7.5 클래스 상속과 멤버 오버라이딩 146

7.5.1 기본 생성자를 사용한 상속 정의 147

7.5.2 보조 생성자를 사용한 상속 정의 149

7.5.3 멤버 함수 오버라이딩 151

7.6 인터페이스 구현과 오버라이딩 153

7.7 추상 클래스와 오버라이딩 156

7.8 object 키워드 157

7.8.1 객체 선언 158

7.8.2 동반 객체 160

7.8.3 객체 표현식 162

7.9 중첩 클래스와 내부 클래스 163

7.10 데이터 클래스 165

7.11 클래스 위임 168

7.12 enum 클래스 172

7.13 sealed 클래스 175

7.14 요약 176


8장 람다식_177

8.1 람다식 코드 살펴보기 178

8.2 함수 타입 184

8.3 람다식 이해하기 188

8.3.1 람다식 형식 188

8.3.2 람다식 작성 시 유의 사항 190

8.3.3 람다식과 return 191

8.3.4 람다식에서 it 키워드 사용하기 194

8.3.5 람다식과 클로저 195

8.3.6 람다식 활용 사례 197

8.3.7 클래스 멤버와 최상위 함수 참조 199

8.4 익명 함수 202

8.5 고차 함수 203

8.6 인라인 함수 205

8.7 요약 207


9장 예외_208

9.1 예외 클래스와 생성자 209

9.2 예외 클래스의 상속 구조 209

9.3 예외 처리하기 212

9.4 try~catch와 throw는 표현식이다 215

9.5 사용자 예외를 정의하고 사용하기 216

9.6 Checked와 Unchecked 예외 221

9.7 요약 222


10장 컬렉션_223

10.1 컬렉션 개요 224

10.2 코틀린의 컬렉션 인터페이스와 클래스 224

10.3 컬렉션 생성하기 231

10.4 실제 사용되는 컬렉션 클래스 알아보기 238

10.5 읽기 전용 컬렉션 사용 시 주의사항 241

10.6 Iterable 인터페이스 244

10.7 List와 MutableList 248

10.7.1 개요 248

10.7.2 List와 MutableList 사용하기 249

10.7.3 IndexedValue 클래스 258

10.7.4 연속 범위값을 컬렉션처럼 처리하기 262

10.8 Set과 MutableSet 264

10.8.1 개요 264

10.8.2 Set과 MutableSet 사용하기 265

10.9 Map과 MutableMap 267

10.9.1 개요 267

10.9.2 Map과 MutableMap 사용하기 268

10.10 컬렉션 선택하기 273

10.11 시퀀스와 스트림 275

10.11.1 시퀀스와 스트림 개요 275

10.11.2 시퀀스/스트림과 컬렉션 276

10.11.3 시퀀스 생성하기 281

10.12 요약 283


11장 제네릭_285

11.1 객체의 타입 285

11.1.1 슈퍼 타입과 서브 타입 285

11.1.2 원시 타입과 제네릭 타입 287

11.2 타입 매개변수와 타입 인자 289

11.2.1 함수에 타입 매개변수 사용하기 289

11.2.2 클래스와 인터페이스에 타입 매개변수 사용하기 290

11.2.3 타입 매개변수의 표준 명칭 291

11.3 타입 매개변수 제한하기 292

11.4 타입 소거 294

11.5 타입 매개변수 실체화 296

11.6 제네릭 타입의 변형 297

11.6.1 개요 297

11.6.2 불변형 300

11.6.3 공변형과 반공변형 301

11.6.4 사용 지점 변형과 선언 지점 변형 303

11.6.5 스타 프로젝션 304

11.7 요약 306


댓글