책소개
코틀린 현업 개발자인 저자와 역자의 노하우가 듬뿍 들어간, 최신 코틀린 종합 가이드!
코틀린의 기초, 심화, 활용을 한 권에 담았다. 코틀린 언어의 기초 개념과 핵심 문법, 기능을 소개하고(기초), 더 나아가 객체지향, 함수형, 코루틴, 리플렉션, 도메인 특화 언어 형태와 관련된 고급 기능까지 설명한다(심화). 마지막으로 테스트, 안드로이드, 웹 등에서 코틀린을 사용하는 방법을 알려준다(활용). 코틀린으로 프로그래밍하려면 꼭 필요한 지식 & 사용하는 방법 & 사용함으로써 얻을 수 있는 이점을 모두 알 수 있다.
코틀린을 종합적으로 소개한다는 장점과 함께 코틀린이라는 언어의 특징, 핵심 문법, 동작 원리를 전달하고자 했다는 점, 자바와 비교해 설명하면서 이해를 높이고 원리를 쉽게 설명하려 노력한 점도 주목할 만하다. 또한, 번역하면서 코틀린의 최신 내용을 반영하고, 소스 코드와 예제를 모두 검증했다.
목차
1장 강력하고 실용적인 코틀린
1.1 코틀린이란 무엇인가?
__1.1.1 안전성
__1.1.2 다중 패러다임
__1.1.3 간결성과 표현력
__1.1.4 상호 운용성
__1.1.5 다중 플랫폼
1.2 코틀린 생태계
__1.2.1 코루틴
__1.2.2 테스트
__1.2.3 안드로이드 개발
__1.2.4 웹 개발
__1.2.5 데스크톱 애플리케이션
1.3 코틀린 시작하기
__1.3.1 인텔리J 프로젝트 설정하기
__1.3.2 REPL 사용하기
__1.3.3 코틀린 놀이터
1.4 이클립스 프로젝트 설정하기
1.5 결론
2장 코틀린 언어 기초
2.1 기본 문법
__2.1.1 주석
__2.1.2 변수 정의하기
__2.1.3 식별자
__2.1.4 가변 변수
__2.1.5 식과 연산자
2.2 기본 타입
__2.2.1 정수 타입
__2.2.2 부동소수점 수
__2.2.3 산술 연산
__2.2.4 비트 연산
__2.2.5 문자 타입 Char
__2.2.6 수 변환
__2.2.7 불 타입과 논리 연산
__2.2.8 비교와 동등성
2.3 문자열
__2.3.1 문자열 템플릿
__2.3.2 기본 문자열 연산
2.4 배열
__2.4.1 배열 정의하기
__2.4.2 배열 사용하기
2.5 결론
3장 함수 정의하기
3.1 함수
__3.1.1 코틀린 함수의 구조
__3.1.2 위치 기반 인자와 이름 붙은 인자
__3.1.3 오버로딩과 디폴트 값
__3.1.4 vararg
__3.1.5 함수의 영역과 가시성
3.2 패키지와 임포트
__3.2.1 패키지와 디렉터리 구조
__3.2.2 임포트 디렉티브 사용하기
3.3 조건문
__3.3.1 if 문으로 선택하기
__3.3.2 범위, 진행, 연산
__3.3.3 when 문과 여럿 중에 하나 선택하기
3.4 루프
__3.4.1 while과 do-while 루프
__3.4.2 for 루프와 이터러블
__3.4.3 루프 제어 흐름 변경하기: break와 continue
__3.4.4 내포된 루프와 레이블
__3.4.5 꼬리 재귀 함수
3.5 예외 처리
__3.5.1 예외 던지기
__3.5.2 try 문으로 예외 처리하기
3.6 결론
3.7 정리 문제
4장 클래스와 객체 다루기
4.1 클래스 정의하기
__4.1.1 클래스 내부 구조
__4.1.2 생성자
__4.1.3 멤버 가시성
__4.1.4 내포된 클래스
__4.1.5 지역 클래스
4.2 널 가능성
__4.2.1 널이 될 수 있는 타입
__4.2.2 널 가능성과 스마트 캐스트
__4.2.3 널 아님 단언 연산자
__4.2.4 안전한 호출 연산자
__4.2.5 엘비스 연산자
4.3 단순한 변수 이상인 프로퍼티
__4.3.1 최상위 프로퍼티
__4.3.2 늦은 초기화
__4.3.3 커스텀 접근자 사용하기
__4.3.4 지연 계산 프로퍼티와 위임
4.4 객체
__4.4.1 객체 선언
__4.4.2 동반 객체
__4.4.3 객체 식
4.5 결론
4.6 정리 문제
5장 고급 함수와 함수형 프로그래밍 활용하기
5.1 코틀린을 활용한 함수형 프로그래밍
__5.1.1 고차 함수
__5.1.2 함수 타입
__5.1.3 람다와 익명 함수
__5.1.4 호출 가능 참조
__5.1.5 인라인 함수와 프로퍼티
__5.1.6 비지역적 제어 흐름
5.2 확장
__5.2.1 확장 함수
5.3 확장 프로퍼티
5.4 동반 확장
__5.4.1 람다와 수신 객체 지정 함수 타입
5.5 수신 객체가 있는 호출 가능 참조
__5.5.1 영역 함수
__5.5.2 클래스 멤버인 확장
5.6 결론
5.7 정리 문제
6장 특별한 클래스 사용하기
6.1 이넘 클래스
__6.1.1 빠뜨린 부분이 없는 when 식
__6.1.2 커스텀 멤버가 있는 이넘 정의하기
__6.1.3 이넘 클래스의 공통 멤버 사용하기
6.2 데이터 클래스
__6.2.1 데이터 클래스와 데이터 클래스에 대한 연산
__6.2.2 구조 분해 선언
6.3 인라인 클래스(값 클래스)
__6.3.1 인라인 클래스 정의하기
__6.3.2 부호 없는 정수
6.4 결론
6.5 정리 문제
7장 컬렉션과 I/O 자세히 알아보기
7.1 컬렉션
__7.1.1 컬렉션 타입
__7.1.2 Comparable과 Comparator
__7.1.3 컬렉션 생성하기
__7.1.4 기본 컬렉션 연산
__7.1.5 컬렉션 원소에 접근하기
__7.1.6 컬렉션에 대한 조건 검사
__7.1.7 집계
__7.1.8 걸러내기
__7.1.9 변환
__7.1.10 하위 컬렉션 추출
__7.1.11 순서
7.2 파일과 I/O 스트림
__7.2.1 스트림 유틸리티
__7.2.2 스트림 생성
__7.2.3 URL 유틸리티
__7.2.4 파일 콘텐츠 접근하기
__7.2.5 파일 시스템 유틸리티
7.3 결론
7.4 정리 문제
8장 클래스 계층 이해하기
8.1 상속
__8.1.1 하위 클래스 선언
__8.1.2 하위 클래스 초기화
__8.1.3 타입 검사와 캐스팅
__8.1.4 공통 메서드
8.2 추상 클래스와 인터페이스
__8.2.1 추상 클래스와 추상 멤버
__8.2.2 인터페이스
__8.2.3 봉인된 클래스와 인터페이스
__8.2.4 위임
8.3 결론
8.4 정리 문제
9장 제네릭스
9.1 타입 파라미터
__9.1.1 제네릭 선언
__9.1.2 바운드와 제약
__9.1.3 타입 소거와 구체화
9.2 변성
__9.2.1 변성: 생산자와 소비자 구분
__9.2.2 선언 지점 변성
__9.2.3 프로젝션을 사용한 사용 지점 변성
__9.2.4 스타 프로젝션
9.3 타입 별명
9.4 결론
9.5 정리 문제
10장 애너테이션과 리플렉션
10.1 애너테이션
__10.1.1 애너테이션 클래스 정의하고 사용하기
__10.1.2 내장 애너테이션
10.2 리플렉션
__10.2.1 리플렉션 API 개요
__10.2.2 지정자와 타입
__10.2.3 호출 가능
10.3 결론
10.4 정리 문제
11장 도메인 특화 언어
11.1 연산자 오버로딩
__11.1.1 단항 연산
__11.1.2 증가와 감소
__11.1.3 이항 연산
__11.1.4 중위 연산
__11.1.5 대입
__11.1.6 호출과 인덱스로 원소 찾기
__11.1.7 구조 분해
__11.1.8 이터레이션
11.2 위임 프로퍼티
__11.2.1 표준 위임들
__11.2.2 커스텀 위임 만들기
__11.2.3 위임 표현
11.3 고차 함수와 DSL
__11.3.1 중위 함수를 사용해 플루언트 DSL 만들기
__11.3.2 타입 안전한 빌더 사용하기
__11.3.3 @DslMarker
11.4 결론
11.5 정리 문제
12장 자바 상호 운용성
12.1 자바 코드를 코틀린에서 사용하기
__12.1.1 자바 메서드와 필드
__12.1.2 Unit과 void
__12.1.3 합성 프로퍼티
__12.1.4 플랫폼 타입
__12.1.5 널 가능성 애너테이션
__12.1.6 자바/코틀린 타입 매핑
__12.1.7 단일 추상 메서드 인터페이스
__12.1.8 자바를 코틀린으로 변환하는 변환기 사용하기
12.2 코틀린 코드를 자바에서 사용하기
__12.2.1 프로퍼티 접근
__12.2.2 파일 퍼사드와 최상위 선언
__12.2.3 객체와 정적 멤버
__12.2.4 노출된 선언 이름 변경하기
__12.2.5 오버로딩한 메서드 생성하기
__12.2.6 예외 선언하기
__12.2.7 인라인 함수
__12.2.8 타입 별명
12.3 결론
12.4 정리 문제
13장 동시성
13.1 코루틴
__13.1.1 코루틴과 일시 중단 함수
__13.1.2 코루틴 빌더
__13.1.3 코루틴 영역과 구조적 동시성
__13.1.4 코루틴 문맥
13.2 코루틴 흐름 제어와 잡 생명 주기
__13.2.1 취소
__13.2.2 타임아웃
__13.2.3 코루틴 디스패치하기
__13.2.4 예외 처리
13.3 동시성 통신
__13.3.1 채널
__13.3.2 생산자
__13.3.3 티커
__13.3.4 액터
13.4 자바 동시성 사용하기
__13.4.1 스레드 시작하기
__13.4.2 동기화와 락
13.5 결론
13.6 정리 질문
14장 코틀린 테스팅
14.1 코테스트 명세
__14.1.1 코테스트 시작하기
__14.1.2 명세 스타일
14.2 단언문
__14.2.1 매처
__14.2.2 인스펙터
__14.2.3 예외 처리
__14.2.4 비결정적 코드 테스트하기
__14.2.5 속성 기반 테스트
14.3 픽스처와 설정
__14.3.1 픽스처 제공하기
__14.3.2 테스트 설정
14.4 결론
14.5 정리 질문
15장 안드로이드 애플리케이션
15.1 안드로이드 개발 시작하기
__15.1.1 안드로이드 스튜디오 프로젝트 설정하기
__15.1.2 그레이들 빌드 스크립트
__15.1.3 액티비티
__15.1.4 에뮬레이터 사용하기
15.2 액티비티
__15.2.1 애플리케이션 UI 설계하기
__15.2.2 액티비티 클래스 정의하기
__15.2.3 젯팩 뷰 바인딩
__15.2.4 액티비티 상태 유지하기
__15.2.5 젯팩 콤포즈 레이아웃 DSL
15.3 결론
15.4 정리 문제
16장 Ktor를 활용한 웹 개발
16.1 Ktor 소개
16.2 서버 관련 기능
__16.2.1 라우팅
__16.2.2 HTTP 요청 처리
__16.2.3 HTML DSL
__16.2.4 세션 지원
16.3 클라이언트 기능
__16.3.1 요청과 응답
__16.3.2 쿠키
16.4 결론
16.5 정리 문제
17장 마이크로서비스 구축
17.1 마이크로서비스 아키텍처
17.2 스프링 부트 소개
__17.2.1 프로젝트 설정
17.3 서비스 API 결정하기
__17.3.1 난수 생성기 서비스 구현하기
__17.3.2 암호 생성 서비스 구현하기
17.4 Ktor를 사용한 마이크로서비스
__17.4.1 JSON 직렬화 사용하기
__17.4.2 암호 생성기 서비스 구현하기
17.5 결론
17.6 정리 문제