본문 바로가기

추천 검색어

실시간 인기 검색어

핵심 코틀린 프로그래밍

기초를 단단히 다져주는 코틀린 입문서
오현석 지음
에이콘출판

2024년 10월 08일 출간

국내도서 : 2023년 04월 28일 출간

(개의 리뷰)
( 0% 의 구매자)
eBook 상품 정보
파일 정보 pdf (4.98MB)
ISBN 9791161758787
지원기기 교보eBook App, PC e서재, 리더기, 웹뷰어
교보eBook App 듣기(TTS) 불가능
TTS 란?
텍스트를 음성으로 읽어주는 기술입니다.
  • 전자책의 편집 상태에 따라 본문의 흐름과 다르게 텍스트를​ 읽을 수 있습니다.
  • 이미지 형태로 제작된 전자책 (예 : ZIP 파일)은 TTS 기능을 지원하지 않습니다.

PDF 필기가능 (Android, iOS)
소득공제
소장
정가 : 36,000원

쿠폰적용가 32,400

10% 할인 | 5%P 적립

이 상품은 배송되지 않는 디지털 상품이며,
교보eBook앱이나 웹뷰어에서 바로 이용가능합니다.

카드&결제 혜택

  • 5만원 이상 구매 시 추가 2,000P
  • 3만원 이상 구매 시, 등급별 2~4% 추가 최대 416P
  • 리뷰 작성 시, e교환권 추가 최대 200원

작품소개

이 상품이 속한 분야

1부에서는 코틀린 프로그램에 필요한 필수적인 기본 요소를 설명하며, 이를 통해 너무 복잡한 개념을 이해하기 위해 고생하지 않고 기본적인 코틀린 언어를 배울 수 있다. 2부에서는 코틀린이 제공하는 다양한 문법 설탕이나 고급 기능을 설명하면서 각 기능이 어떤 역할을 하는지 보여준다. 그 과정에서 객체지향, 함수형 프로그래밍, 제네릭스, 컬렉션을 더 잘 이해하고, 코드 작성시 코틀린의 다양한 기능을 적재적소에 활용할 수 있게 해준다. 또한 코틀린 언어의 여러 요소를 언어 명세 수준으로 설명하고 있어 책을 다 읽은 후에도 참고서로 활용할 수 있을 것이다.
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 연습문제

마무리: 다음에 공부할 내용과 전체 돌아보기

◈ 이 책에서 다루는 내용 ◈
◆ 코틀린 언어를 꼭 필요한 기초적인 내용과 기초 위에 쌓아 올려야 하는 지식으로 나눠 설명
◆ 함수 오버로드 처리규칙 등 코틀린 언어의 미묘한 세부 사항을 언어 명세를 참조해 자세히 설명
◆ 형식화 문자열 등 실무에서 필요한 내용을 설명
◆ 자세한 컬렉션 라이브러리 함수 설명과 예제
◆ 2023년 코틀린 최신 버전(1.8) 대응

◈ 이 책의 대상 독자 ◈
◆ 코틀린을 자세히 알고 싶은 프로그래머
◆ 코틀린을 배웠지만 기초를 더 다지고 싶은 코틀린 프로그래머
◆ 코틀린 언어 자체가 궁금할 때 찾아볼 수 있는 참고서가 필요한 개발자

◈ 이 책의 구성 ◈
1장, ‘코틀린 시작하기’에서는 우선 코틀린 언어의 개요를 소개하고 개발 환경을 설정하는 방법을 설명한다. 이어지는 1부, ‘코틀린 퀵스타트’에서는 코틀린 언어 요소 중 프로그램을 작성할 때 꼭 필요한 필수 개념을 다룬다. 1부를 잘 읽고 언어 기본 요소를 이해해야만 코틀린 코드를 작성할 수 있고 2부 내용을 학습하기 위한 준비를 마칠 수 있다. 1부의 각 장은 다음과 같다.
2장, ‘프로그램을 이루는 기본 단위: 변수와 식, 문’에서는 코틀린 프로그램의 기본 요소를 이루는 식, 값, 타입, 변수와 기본 제어 구조인 if, when, for, while, do ... while, break, continue를 다룬다.
3장, ‘함수’에서는 함수, 지역 변수 및 지역 함수, 영역 규칙, 익명 함수, 람다, 클로저를 다루고, 다양한 파라미터 지정 방법을 설명한다.
4장, ‘클래스와 객체’에서는 객체지향의 기초를 다룬다. 클래스, 상속, 추상 클래스, 인터페이스, 프로퍼티를 설명한다.
5장, ‘예외 처리’에서는 예외 처리를 다룬다. 프로그램에서 실패를 처리하는 방법을 설명하고, 코틀린의 예외 처리 방법인 try, catch, finally를 설명한다. 또한 use() 멤버 함수를 사용해 자동 해제가 가능한 타입을 활용하는 방법도 다룬다.
6장, ‘제네릭스’에서는 타입을 파라미터로 받아 새로운 타입(클래스/인터페이스)이나 함수를 만들어내는 방법인 제네릭스를 살펴본다. 제네릭스의 개념, 코틀린에서 타입 파라미터가 포함된 클래스, 인터페이스, 함수를 선언하는 방법, 타입 바운드, 선언 지점 변성, 사용 지점 변성을 설명한다.
7장, ‘널 가능성’에서는 널 가능성을 코틀린에서 처리하는 방법을 다룬다. 널 가능성이 왜 필요한지 살펴보고, 널이 될 수 있는 타입, 스마트 캐스트, is 및 as 연산, 엘비스 연산자(?:), 안전한 호출 연산자(?.), 널 아님 단언 연산자(!!)를 설명한다.
8장, ‘패키지와 임포트’에서는 패키지를 선언하는 방법과 패키지 멤버를 임포트해 사용하는 방법, 임포트 시 새로운 이름을 지정해 이름 충돌을 막는 방법을 소개한다. 코틀린이 기본적으로 임포트해줘서 별도로 임포트하지 않아도 되는 패키지들도 설명한다.
9장, ‘코틀린 컬렉션 기초’에서는 코틀린으로 개발을 진행할 때 가장 자주 접하게 될 기초 라이브러리인 코틀린 컬렉션을 설명한다.
10장, ‘변수 선언과 기본 타입 자세히 살펴보기’에서는 기본 타입을 자세히 살펴보고, 문자열 이스케이프, 유니코드, 변수 이름 충돌을 설명한다. 그 후 lateinit var와 constval, 연산자 우선순위와 함께 모든 코틀린 연산자를 상세히 다룬다. 마지막으로는 로우(raw) 문자열과 문자열 조작 함수를 설명한다.
11장, ‘제어 구조 자세히 살펴보기’에서는 제어 구조를 더 자세히 다루고, 범위와 순열을 설명한 후 break와 continue에서 레이블을 사용하는 방법을 살펴본다.
12장, ‘함수 자세히 살펴보기’에서는 함수와 관련된 더 자세한 내용을 살펴본다. 코틀린 연산자가 어떤 연산자 함수와 연결되는지 자세히 설명하고, 확장 함수와 프로퍼티를 살펴본다. 이어서 함수 오버로드 해소 규칙을 설명하고(다소 어려운 내용이다), 파라미터에서 코틀린 영역 규칙이 적용되는 방식과 재귀 함수 및 꼬리 재귀 함수를 정의하는 방법을 다룬다. 마지막으로는 인라인 함수를 설명한다.
13장, ‘객체지향 자세히 살펴보기’에서는 객체지향과 관련해 코틀린이 제공하는 여러 가지 기능을 살펴본다. object를 사용해 싱글턴 객체를 선언하는 방법, 동반 객체, 데이터 클래스, 이넘 클래스, 값 클래스(또는 인라인 클래스), 봉인된 클래스, 부생성자, 가시성 지정자, 인터페이스 구현 위임과 프로퍼티 위임, 타입 별명을 설명한다.
14장, ‘제네릭스 2’에서는 스타 프로젝션, 타입 소거, reified 타입 파라미터를 설명하고, 영역 함수를 다룬다.
15장, ‘컬렉션 2’에서는 9장에서 배운 여러 컬렉션이 공통으로 제공하는 다양한 함수를 유형별로 설명한다. 9장에서 다룬 함수들 외에 zip(), partition(), take(), drop(), windowed(), chunked(), associate(), groupBy() 등을 설명하고 groupBy()와 관련 있는 Grouping 클래스를 살펴본 다음, fold(), groupBy() 등을 한꺼번에 처리할 수 있는 더 일반적인 함수인 aggregate()와 그 외 여러 가지 함수를 설명한다. 마지막으로는 컬렉션을 지연 처리할 수 있는 시퀀스를 살펴본다.
각 장에서 개념을 설명하고 난 후에는 직전에 배운 내용을 간단하게 스스로 검토해보도록 익힘문제를 제시하며, 각 장의 끝에는 해당 장의 내용을 정리하는 데 도움이 되는 연습문제가 있다. 이 문제들을 풀면서 배운 내용을 정리하고 내재화하길 바란다.

작가정보

저자(글) 오현석

모빌리티42 이사로 일하면서 매일 고객의 요청에 따라 코드를 만드는 현업 개발자다. 어릴 때 처음 컴퓨터를 접하고 매혹된 후 경기과학고, KAIST 전산학과(프로그래밍 언어 전공 석사)를 거치면서 계속 컴퓨터를 사용해왔다.
직장에서는 주로 코틀린이나 자바를 사용한 서버 프로그래밍을 하고, 주말이나 여가시간에는 번역을 하거나 공부를 하면서 즐거움을 찾는다. 시간이 아주 많이 남을 때는 시뮬레이션 게임을 즐기면서 머리를 식히고, 어떻게 하면 막내 자식을 프로그래밍의 세계로 끌어들일 수 있을지를 고민하는 아빠이기도 하다.
『코어 파이썬 애플리케이션 프로그래밍』(에이콘, 2014)을 시작으로 『Kotlin in Action』(에이콘, 2017), 『아토믹 코틀린』(길벗, 2023), 『코딩 좀 아는 사람』(윌북, 2023) 등 30여 권의 책을 번역했다.

작가의 말

번역서 『Kotlin in Action』(에이콘, 2017)을 출간하기 전부터 초중급 개발자를 대상으로 코틀린(Kotlin)을 더 깊이 다루는 책을 써왔다. 하지만 업무와 다른 번역 작업이 겹쳐지며 저술 속도는 더디기만 했다. 게다가 중간중간 코틀린이 업데이트되면서 사용자들의 관심사가 달라짐에 따라 책의 내용을 여러 번 다시 써야만 했다. 그 과정을 겪으면서 당장 사람들이 관심을 갖는 내용을 담은 책이 아니라 언어 자체를 깊이 이해할 수 있도록 돕는 책을 쓰기로 결심했다. 그리고 마침내 코틀린 언어 자체에 대해 이야기하는 책을 낼 수 있게 됐다.
좋은 개발자가 되려면 무엇보다 개발 전반에 필요한 지식을 갖춰야 한다. 특히 프로그래밍 언어에 대한 지식은 모든 개발의 바탕이 되는 중요한 지식이다. 언어를 배울 때는 언어가 제공하는 여러 키워드와 구성 요소를 제대로 이해하고, 이런 요소를 프로그래밍에 어떻게 써먹어야 할지도 알아야 한다. 하지만 더 일반적인 언어론이나 프로그래밍 측면에서 각 요소가 왜 그런 식으로 설계됐는지도 알아야 자신이 사용하는 언어의 발전을 더 잘 이해하고 향후 그 언어가 변하더라도 좀 더 쉽게 변화를 받아들이고 활용할 수 있다. 또 언어론적인 관점을 잘 이해하고 있으면 새 언어를 배울 때도 도움이 된다.
이 책에서는 코틀린 언어를 설명하는 과정에서 프로그래밍 언어에 대한 지식을 쉬운 설명과 예제를 곁들여 함께 전달하고자 노력했다. 이런 설명을 통해 코틀린의 설계를 여러분이 좀 더 쉽고 명확하게 이해하고 충분히 활용하게 되길 바란다.
- 브리즈번에서
오현석

이 상품의 총서

Klover리뷰 (0)

Klover리뷰 안내
Klover(Kyobo-lover)는 교보를 애용해 주시는 고객님들이 남겨주신 평점과 감상을 바탕으로, 다양한 정보를 전달하는 교보문고의 리뷰 서비스입니다.
1. 리워드 안내
구매 후 90일 이내에 평점 작성 시 e교환권 100원을 적립해 드립니다.
  • - e교환권은 적립일로부터 180일 동안 사용 가능합니다.
  • - 리워드는 1,000원 이상 eBook, 오디오북, 동영상에 한해 다운로드 완료 후 리뷰 작성 시 익일 제공됩니다. (5,000원 이상 상품으로 변경 예정, 2024년 9월 30일부터 적용)
  • - 리워드는 한 상품에 최초 1회만 제공됩니다.
  • - sam 이용권 구매 상품 / 선물받은 eBook은 리워드 대상에서 제외됩니다.
2. 운영 원칙 안내
Klover리뷰를 통한 리뷰를 작성해 주셔서 감사합니다. 자유로운 의사 표현의 공간인 만큼 타인에 대한 배려를 부탁합니다. 일부 타인의 권리를 침해하거나 불편을 끼치는 것을 방지하기 위해 아래에 해당하는 Klover 리뷰는 별도의 통보 없이 삭제될 수 있습니다.
  • 도서나 타인에 대해 근거 없이 비방을 하거나 타인의 명예를 훼손할 수 있는 리뷰
  • 도서와 무관한 내용의 리뷰
  • 인신공격이나 욕설, 비속어, 혐오 발언이 개재된 리뷰
  • 의성어나 의태어 등 내용의 의미가 없는 리뷰

구매 후 리뷰 작성 시, e교환권 100원 적립

문장수집

문장수집 안내
문장수집은 고객님들이 직접 선정한 책의 좋은 문장을 보여 주는 교보문고의 새로운 서비스 입니다. 교보eBook 앱에서 도서 열람 후 문장 하이라이트 하시면 직접 타이핑 하실 필요 없이 보다 편하게 남길 수 있습니다. 마음을 두드린 문장들을 기록하고 좋은 글귀들은 ‘좋아요’ 하여 모아보세요. 도서 문장과 무관한 내용 등록 시 별도 통보없이 삭제될 수 있습니다.
리워드 안내
  • 구매 후 90일 이내에 문장 수집 등록 시 e교환권 100원을 적립해 드립니다.
  • e교환권은 적립일로부터 180일 동안 사용 가능합니다.
  • 리워드는 1,000원 이상 eBook에 한해 다운로드 완료 후 문장수집 등록 시 제공됩니다. (5,000원 이상 eBook으로 변경 예정, 2024년 9월 30일부터 적용)
  • 리워드는 한 상품에 최초 1회만 제공됩니다.
  • sam 이용권 구매 상품 / 선물받은 eBook / 오디오북·동영상 상품/주문취소/환불 시 리워드 대상에서 제외됩니다.

구매 후 문장수집 작성 시, e교환권 100원 적립

    교보eBook 첫 방문을 환영 합니다!

    신규가입 혜택 지급이 완료 되었습니다.

    바로 사용 가능한 교보e캐시 1,000원 (유효기간 7일)
    지금 바로 교보eBook의 다양한 콘텐츠를 이용해 보세요!

    교보e캐시 1,000원
    TOP
    신간 알림 안내
    핵심 코틀린 프로그래밍 웹툰 신간 알림이 신청되었습니다.
    신간 알림 안내
    핵심 코틀린 프로그래밍 웹툰 신간 알림이 취소되었습니다.
    리뷰작성
    • 구매 후 90일 이내 작성 시, e교환권 100원 (최초1회)
    • 리워드 제외 상품 : 마이 > 라이브러리 > Klover리뷰 > 리워드 안내 참고
    • 콘텐츠 다운로드 또는 바로보기 완료 후 리뷰 작성 시 익일 제공
    감성 태그

    가장 와 닿는 하나의 키워드를 선택해주세요.

    사진 첨부(선택) 0 / 5

    총 5MB 이하로 jpg,jpeg,png 파일만 업로드 가능합니다.

    신고/차단

    신고 사유를 선택해주세요.
    신고 내용은 이용약관 및 정책에 의해 처리됩니다.

    허위 신고일 경우, 신고자의 서비스 활동이 제한될 수
    있으니 유의하시어 신중하게 신고해주세요.


    이 글을 작성한 작성자의 모든 글은 블라인드 처리 됩니다.

    문장수집 작성

    구매 후 90일 이내 작성 시, e교환권 100원 적립

    eBook 문장수집은 웹에서 직접 타이핑 가능하나, 모바일 앱에서 도서를 열람하여 문장을 드래그하시면 직접 타이핑 하실 필요 없이 보다 편하게 남길 수 있습니다.

    P.
    핵심 코틀린 프로그래밍
    기초를 단단히 다져주는 코틀린 입문서
    저자 모두보기
    저자(글)
    낭독자 모두보기
    sam 이용권 선택
    님이 보유하신 이용권입니다.
    차감하실 sam이용권을 선택하세요.
    sam 이용권 선택
    님이 보유하신 이용권입니다.
    차감하실 sam이용권을 선택하세요.
    sam 이용권 선택
    님이 보유하신 프리미엄 이용권입니다.
    선물하실 sam이용권을 선택하세요.
    결제완료
    e캐시 원 결제 계속 하시겠습니까?
    교보 e캐시 간편 결제
    sam 열람권 선물하기
    • 보유 권수 / 선물할 권수
      0권 / 1
    • 받는사람 이름
      받는사람 휴대전화
    • 구매한 이용권의 대한 잔여권수를 선물할 수 있습니다.
    • 열람권은 1인당 1권씩 선물 가능합니다.
    • 선물한 열람권이 ‘미등록’ 상태일 경우에만 ‘열람권 선물내역’화면에서 선물취소 가능합니다.
    • 선물한 열람권의 등록유효기간은 14일 입니다.
      (상대방이 기한내에 등록하지 않을 경우 소멸됩니다.)
    • 무제한 이용권일 경우 열람권 선물이 불가합니다.
    이 상품의 총서 전체보기
    네이버 책을 통해서 교보eBook 첫 구매 시
    교보e캐시 지급해 드립니다.
    교보e캐시 1,000원
    • 첫 구매 후 3일 이내 다운로드 시 익일 자동 지급
    • 한 ID당 최초 1회 지급 / sam 이용권 제외
    • 네이버 책을 통해 교보eBook 구매 이력이 없는 회원 대상
    • 교보e캐시 1,000원 지급 (유효기간 지급일로부터 7일)
    구글바이액션을 통해서 교보eBook
    첫 구매 시 교보e캐시 지급해 드립니다.
    교보e캐시 1,000원
    • 첫 구매 후 3일 이내 다운로드 시 익일 자동 지급
    • 한 ID당 최초 1회 지급 / sam 이용권 제외
    • 구글바이액션을 통해 교보eBook 구매 이력이 없는 회원 대상
    • 교보e캐시 1,000원 지급 (유효기간 지급일로부터 7일)