핵심 코틀린 프로그래밍

기초를 단단히 다져주는 코틀린 입문서
$51.03
SKU
9791161757476
+ Wish
[Free shipping over $100]

Standard Shipping estimated by Fri 04/18 - Thu 04/24 (주문일로부 10-14 영업일)

Express Shipping estimated by Tue 04/15 - Thu 04/17 (주문일로부 7-9 영업일)

* 안내되는 배송 완료 예상일은 유통사/배송사의 상황에 따라 예고 없이 변동될 수 있습니다.
Publication Date 2023/04/28
Pages/Weight/Size 188*235*31mm
ISBN 9791161757476
Categories IT 모바일 > 프로그래밍 언어
Description
1부에서는 코틀린 프로그램에 필요한 필수적인 기본 요소를 설명하며, 이를 통해 너무 복잡한 개념을 이해하기 위해 고생하지 않고 기본적인 코틀린 언어를 배울 수 있다. 2부에서는 코틀린이 제공하는 다양한 문법 설탕이나 고급 기능을 설명하면서 각 기능이 어떤 역할을 하는지 보여준다. 그 과정에서 객체지향, 함수형 프로그래밍, 제네릭스, 컬렉션을 더 잘 이해하고, 코드 작성시 코틀린의 다양한 기능을 적재적소에 활용할 수 있게 해준다. 또한 코틀린 언어의 여러 요소를 언어 명세 수준으로 설명하고 있어 책을 다 읽은 후에도 참고서로 활용할 수 있을 것이다.
Contents
1장. 코틀린 시작하기
__1.1 간략한 역사
__1.2 코틀린 언어의 특징
__1.3 코틀린 개발 환경과 설치 및 사용 방법
____1.3.1 웹 도구
____1.3.2 IDE: 인텔리J 아이디어
____1.3.3 명령줄 도구: kotlinc와 kotlin

제1부 코틀린 퀵스타트

2장. 프로그램을 이루는 기본 단위: 변수와 식, 문
__2.1 가장 간단한 코틀린 프로그램
__2.2 주석
__2.3 값과 이름, 리터럴과 변수
__2.4 타입과 타입 지정, 타입 추론, 타입 변환
__2.5 if, when
__2.6 범위와 for
__2.7 while과 do while
__2.8 break와 continue
__2.9 식과 연산자
__2.10 배열
____2.10.1 배열 선언하기
____2.10.2 배열을 생성하는 다른 방법
____2.10.3 원시 타입 배열과 참조 타입 배열
____2.10.4 배열 기본 연산
__2.11 연습문제

3장. 함수
__3.1 함수
____3.1.1 Unit 타입
__3.2 지역 변수와 지역 함수, 정적 영역 규칙
____3.2.1 정적 영역 규칙
__3.3 익명 함수와 람다
____3.3.1 익명 함수나 람다와 관련된 편의 구문
__3.4 클로저와 값 포획
__3.5 다양한 파라미터 정의 방법
____3.5.1 디폴트 파라미터
____3.5.2 이름 붙은 인자
____3.5.3 가변 길이 인자와 스프레드 연산자
__3.6 연습문제

4장. 클래스와 객체
__4.1 클래스
____4.1.1 생성자에서 클래스 프로퍼티 정의하기
____4.1.2 객체와 참조
____4.1.3 객체의 동일성과 동등성
____4.1.4 초기화 블록
__4.2 상속
____4.2.1 멤버의 상속 관계 제어: override, open, final
____4.2.2 상속의 활용: 오버라이드를 통한 세분화와 동적 디스패치
____4.2.3 Any와 equals(), hashCode(), toString()
____4.2.4 is와 as, 스마트 캐스트
__4.3 추상 클래스
__4.4 인터페이스
____4.4.1 인스턴스 정의와 상속하기
____4.4.2 인터페이스 오버라이드 규칙
__4.5 프로퍼티 정의하기: 게터, 세터, 뒷받침하는 필드
____4.5.1 뒷받침하는 필드
____4.5.2 뒷받침하는 필드가 없는 경우
____4.5.3 지연 초기화 프로퍼티
____4.5.4 프로퍼티 게터와 인자가 없는 함수 중 어느 것을 사용해야 할까?
__4.6 연습문제

5장. 예외 처리
__5.1 예외 던지기
____5.1.1 예외 타입 선언하기
____5.1.2 다양한 예외 타입
__5.2 예외 받기: catch
____5.2.1 예외 다시 던지기와 예외 변환해 던지기
____5.2.2 try/catch 식
____5.2.3 Nothing 타입
__5.3 정리 작업: finally
____5.3.1 자원 자동 해제를 처리하는 더 나은 방법
__5.4 연습문제

6장. 제네릭스
__6.1 제네릭스의 필요성
__6.2 코틀린 제네릭스 문법
__6.3 타입 바운드
____6.3.1 재귀적 타입 바운드
____6.3.2 다중 바운드: where
__6.4 선언 지점 변성: in, out
____6.4.1 공변성
____6.4.2 반공변성
____6.4.3 무공변
____6.4.4 반공변성과 공변성은 어디서 오는가?
____6.4.5 둘 이상의 타입 파라미터가 있는 제네릭 타입의 변성 판정
____6.4.6 선언 지점 변성과 사용 지점 변성, 타입 프로젝션
__6.5 연습문제

7장. 널 가능성
__7.1 널 도입과 널 가능성의 필요성
____7.1.1 제네릭 타입 파라미터에서의 널 가능성
__7.2 널이 될 수 있는 타입과 그렇지 않은 타입
__7.3 널 여부 검사와 스마트 캐스트
____7.3.1 널 가능성에 대한 스마트 캐스트와 Nothing 타입
____7.3.2 널이 될 수 있는 타입의 값과 is, as 연산
__7.4 엘비스 연산자와 안전한 호출 연산자
__7.5 널 아님 단언 연산자
__7.6 연습문제

8장. 패키지와 임포트
__8.1 패키지와 임포트
____8.1.1 패키지 선언
____8.1.2 전체 이름과 짧은 이름, 임포트
__8.2 임포트 이름 충돌과 임포트 별명
__8.3 디폴트 임포트
__8.4 연습문제

9장. 코틀린 컬렉션 기초
__9.1 컬렉션 소개
____9.1.1 컬렉션이 제공하는 연산의 분류
__9.2 Iterable〈〉과 Collection〈〉
____9.2.1 Iterable〈〉
____9.2.2 Collection〈〉
____9.2.3 MutableIterable〈〉과 MutableCollection〈〉
____9.2.4 forEach(), forEachIndexed()
__9.3 컬렉션 종류에 따른 생성, 원소 접근, 삽입, 삭제 방법
____9.3.1 리스트
____9.3.2 집합
____9.3.3 맵
__9.4 컬렉션 검색과 걸러내기 연산
____9.4.1 filter(), filterNot()
____9.4.2 filterIndexed()
____9.4.3 filterNotNull()
____9.4.4 indexOf(), lastIndexOf(), indexOfFirst(), indexOfLast()
__9.5 컬렉션 변환 연산
____9.5.1 map(), mapNotNull()
____9.5.2 flatten()
____9.5.3 flatMap()
____9.5.4 mapIndexed()와 flatMapIndexed()
__9.6 컬렉션 종합 연산
____9.6.1 합계 연산: sum(), sumOf()
____9.6.2 축약 연산: reduce(), reduceIndexed(), reduceIndexedNull()
____9.6.3 오른쪽 축약 연산: reduceRight()와 reduceRightIndexed()
____9.6.4 접기 연산: fold(), foldIndexed(), foldRight(), foldRightIndexed()
____9.6.5 문자열 변환 연산
__9.7 컬렉션 전체 변환 연산
____9.7.1 리스트 변환: toList(), toMutableList()
____9.7.2 배열 변환: toTypedArray()
____9.7.3 집합 변환: toSet()
____9.7.4 맵 변환: toMap(), toMutableMap()
__9.8 기타 연산
____9.8.1 정렬
__9.9 연습문제

제2부

10장. 변수 선언과 기본 타입 자세히 살펴보기
__10.1 기본 데이터 타입
____10.1.1 정수형 기본 타입
____10.1.2 실수형 기본 타입
____10.1.3 Boolean 타입
____10.1.4 Char 타입
__10.2 변수 이름
____10.2.1 이름 규칙과 이름 충돌
____10.2.2 lateinit 변수
____10.2.3 const val
__10.3 연산자와 연산자 우선순위
____10.3.1 산술 연산자
____10.3.2 수 타입 간의 타입 변환
____10.3.3 복합 대입 연산
____10.3.4 증가/감소 연산
____10.3.5 비교 연산과 불린 연산
____10.3.6 비트 연산과 시프트 연산
____10.3.7 비트 연산과 부호 없는 타입
____10.3.8 수학 연산
____10.3.9 연산자 우선순위
__10.4 (JVM) 문자열
____10.4.1 로우 문자열
____10.4.2 문자열 템플릿
____10.4.3 문자열 조작
__10.5 연습문제

11장. 제어 구조 자세히 살펴보기
__11.1 if 식과 Nothing 타입
__11.2 for 루프와 이터레이터의 관계: 관습에 기반한 언어 기능 제공
__11.3 범위와 순열
____11.3.1 범위
____11.3.2 순열
__11.4 break, continue와 레이블
__11.5 연습문제

12장. 함수 자세히 살펴보기
__12.1 operator 키워드와 연산자 오버로드
____12.1.1 단항 연산자 오버로드
____12.1.2 단항 증가/감소 연산자 오버로드
____12.1.3 이항 산술 연산자 오버로드
____12.1.4 이항 멤버십 연산자 오버로드
____12.1.5 인덱스 연산자 오버로드
____12.1.6 동등성 연산자 오버로드
____12.1.7 비교 연산자 오버로드
____12.1.8 복합 연산자 오버로드
____12.1.9 호출 연산자 오버로드
____12.1.10 멤버 함수를 중위 형식으로 쓸 수 있는 경우
____12.1.11 구조 분해와 componentN() 연산자 함수
__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.3.1 어떤 요소를 호출할 수 있을까?
____12.3.2 오버로드 후보 집합
____12.3.3 가장 구체적인 함수를 정하기
__12.4 영역 규칙 다시 보기: 디폴트 파라미터, 재귀
____12.4.1 디폴트 파라미터에서 다른 파라미터 이름 사용하기
____12.4.2 재귀 호출과 꼬리 재귀
__12.5 인라인 함수
____12.5.1 고차 함수 파라미터로 전달된 람다의 인라이닝
____12.5.2 지역 return과 비지역 return
____12.5.3 inline에서 인라인된 람다의 전달
____12.5.4 noline과 crossinline
____12.5.5 인라인 프로퍼티와 인라인 확장
____12.5.6 reified
____12.5.7 공개된 인라인 함수의 제약 사항
__12.6 연습문제

13장. 객체지향 자세히 살펴보기
__13.1 내포 클래스와 내부 클래스
____13.1.1 내포 클래스
____13.1.2 내부 클래스
____13.1.3 클래스 안에 내포시킬 수 있는 대상
____13.1.4 인터페이스 안에 내포시킬 수 있는 대상
__13.2 object로 싱글턴 객체 선언하기
____13.2.1 익명 객체
____13.2.2 객체가 다른 클래스나 인터페이스 상속하기
____13.2.3 fun interface 선언과 람다를 사용한 익명 객체 선언
____13.2.4 동반 객체
__13.3 데이터 클래스
____13.3.1 데이터 타입 정의 제약 사항
____13.3.2 copy()를 통한 객체 복사
____13.3.3 데이터 클래스 본문에 정의된 프로퍼티
____13.3.4 데이터 클래스의 상속
____13.3.5 조언: 데이터 클래스는 불변 객체로만 사용하라
__13.4 이넘 클래스로 여러 상수값 정의하기
____13.4.1 이넘 클래스에 정의된 멤버 함수나 프로퍼티
____13.4.2 이넘 상수: 싱글턴 객체
__13.5 값 클래스를 통해 타입 안전성과 성능 동시에 얻기
__13.6 봉인된 클래스나 봉인된 인터페이스를 통해 클래스 계층 제한하기
__13.7 부생성자
____13.7.1 주생성자가 없는 경우 부생성자
__13.8 가시성 변경자
____13.8.1 클래스나 객체에 선언된 이름의 가시성
____13.8.2 패키지 최상위에 선언되는 이름의 가시성
__13.9 위임을 통해 구현을 다른 객체에 미루기
____13.9.1 인터페이스 구현 위임
____13.9.2 프로퍼티 위임
____13.9.3 코틀린이 기본 제공하는 위임
____13.9.4 getValue()와 setValue() 규칙
____13.9.5 위임 프로퍼티 컴파일 방법
____13.9.6 operator fun provideDelegate()
__13.10 타입 별명
__13.11 연습문제

14장. 제네릭스 2
__14.1 스타 프로젝션
__14.2 타입 소거(JVM)와 reified
____14.2.1 타입 소거
____14.2.2 reified: 실체화한 타입
__14.3 영역 함수
____14.3.1 let
____14.3.2 run 일반 함수와 run 확장 함수
____14.3.3 with()
____14.3.4 also()
____14.3.5 apply()
____14.3.6 takeIf()와 takeUnless()
____14.3.7 코틀린 공식 문서의 영역 함수 공식 가이드
__14.4 연습문제

15장. 컬렉션 2
__15.1 두 컬렉션을 쌍으로 연결하기, 연결을 풀어 두 컬렉션 만들기: zip(), unzip(), zipWithNext()
__15.2 컬렉션을 조건에 따라 둘로 나누기: partition()
__15.3 fold()나 reduce()의 진행 단계를 리스트로 돌려받기: runningFold(), runningFoldIndexed(), runningReduce(), runningReduceIndexed()
____15.3.1 runningFold(), runningFoldIndexed()의 별명: scan()과 scanIndexed()
__15.4 원소 선택과 제외: take(), drop(), takeLast(), dropLast(), takeWhile(), dropWhile(), takeLastWhile(), dropLastWhile()
____15.4.1 개수로 선택하거나 제외하기: take(), drop(), takeLast(), dropLast()
____15.4.2 앞에서부터 조건에 맞는 원소를 찾거나 제거하기: takeWhile(), dropWhile(), takeLastWhile(), dropLastWhile()
__15.5 슬라이딩 윈도우와 덩어리로 나누기: windowed(), chunked()
__15.6 값 연관시키기: associate(), associateBy(), associateByTo(), associateTo(), associateWith(), associateWithTo()
____15.6.1 associate()와 associateTo()
____15.6.2 associateBy()와 associateByTo()
____15.6.3 associateWith()와 associateWithTo()
__15.7 키에 따라 그룹으로 나누기: groupBy(), groupByTo()
__15.8 그룹을 처리하기 위한 Grouping 객체 얻기: groupingBy()
____15.8.1 키 셀렉터로 그루핑 만들기: groupingBy()
____15.8.2 그룹별 멤버 개수 세기: eachCount()
____15.8.3 그룹별로 reduce()한 결과를 키와 연관시키기: reduce()
____15.8.4 그룹별로 fold()한 결과를 키에 연관시키기: aggregate()
____15.8.5 그룹별로 누적 연산을 적용한 결과를 키에 연관시키기: aggregate()
__15.9 조건을 만족하는 원소 검사: none(), any(), all()
__15.10 컬렉션에 대한 집합 연산: intersect(), union(), minus()
____15.10.1 컬렉션에 원소를 덧붙이거나 컬렉션에서 원소를 제거하는 연산: plusElement(), minusElement()
__15.11 뒤섞기 연산: shuffled()
__15.12 배열 연산
____15.12.1 배열 비교: contentEquals(), contentDeepEauals()
____15.12.2 배열의 내용 복사: copyOf(), copyOfRange(), copyInto()
____15.12.3 배열에 값 채워 넣기: fill()
____15.12.4 뒤섞기 연산: shuffle()
__15.13 시퀀스
____15.13.1 시퀀스 만들기: asSequence(), generateSequence(), sequence()
__15.14 연습문제

마무리: 다음에 공부할 내용과 전체 돌아보기
Author
오현석
모빌리티42 이사로 일하면서 매일 고객의 요청에 따라 코드를 만드는 현업 개발자다. 어릴 때 처음 컴퓨터를 접하고 매혹된 후 경기과학고, KAIST 전산학과(프로그래밍 언어 전공 석사)를 거치면서 계속 컴퓨터를 사용해왔다.

직장에서는 주로 코틀린이나 자바를 사용한 서버 프로그래밍을 하고, 주말이나 빈 시간에는 번역을 하거나 공부를 하면서 즐거움을 찾는다. 시간이 아주 많이 남을 때는 시뮬레이션 게임을 하면서 머리를 식히고 놀고, 어떻게 하면 막내자식을 프로그래밍의 세계로 끌어들일 수 있을까 고민 중인 아빠이기도 하다.

『코어 파이썬 애플리케이션 프로그래밍 Core Python Applications Programming Third Edition』(에이콘출판, 2014)을 시작으로 『Kotlin in Action』(에이콘출판, 2017), 『한 권으로 읽는 컴퓨터 구조와 프로그래밍』(책만, 2021), 『파이썬으로 살펴보는 아키텍처 패턴』(한빛미디어, 2021), 『Programming in Scala 4/e』(에이콘출판, 2021) 등 30여 권의 책을 번역했다.
모빌리티42 이사로 일하면서 매일 고객의 요청에 따라 코드를 만드는 현업 개발자다. 어릴 때 처음 컴퓨터를 접하고 매혹된 후 경기과학고, KAIST 전산학과(프로그래밍 언어 전공 석사)를 거치면서 계속 컴퓨터를 사용해왔다.

직장에서는 주로 코틀린이나 자바를 사용한 서버 프로그래밍을 하고, 주말이나 빈 시간에는 번역을 하거나 공부를 하면서 즐거움을 찾는다. 시간이 아주 많이 남을 때는 시뮬레이션 게임을 하면서 머리를 식히고 놀고, 어떻게 하면 막내자식을 프로그래밍의 세계로 끌어들일 수 있을까 고민 중인 아빠이기도 하다.

『코어 파이썬 애플리케이션 프로그래밍 Core Python Applications Programming Third Edition』(에이콘출판, 2014)을 시작으로 『Kotlin in Action』(에이콘출판, 2017), 『한 권으로 읽는 컴퓨터 구조와 프로그래밍』(책만, 2021), 『파이썬으로 살펴보는 아키텍처 패턴』(한빛미디어, 2021), 『Programming in Scala 4/e』(에이콘출판, 2021) 등 30여 권의 책을 번역했다.