Top

코틀린 안드로이드 프로그래밍 [안드로이드 예제로 이해하는 코틀린]

  • 원서명Learn Kotlin for Android Development: The Next Generation Language for Modern Android Apps Programming (ISBN 9781484244685)
  • 지은이피터 슈패스(Peter Späth)
  • 옮긴이유진호
  • ISBN : 9791161755793
  • 35,000원
  • 2021년 10월 29일 펴냄
  • 페이퍼백 | 544쪽 | 188*235mm
  • 시리즈 : 프로그래밍 언어

책 소개

소스 코드 파일은 여기에서 내려 받으실 수 있습니다.
https://github.com/AcornPublishing/learn-kotlin
(안드로이드 스튜디오 버전 문제로 인해 2021년 11월 29일 기준으로 업데이트한 버전입니다.)

요약

코틀린을 학습할 때 좋은 학습서이자 참고서로 활용할 수 있다. 안드로이드 애플리케이션 개발을 예제로 코틀린을 설명하지만 안드로이드 개발을 본격적으로 배우기 위한 책은 아니다. 코틀린을 사용한 프로그래밍에 중점을 두고, 그 과정에서 코틀린이라는 언어를 처음 사용하고 학습하는 데 필요한 내용을 적절하게 다룬다.

이 책에서 다루는 내용

◆ 안드로이드에서 실행되는 첫 코틀린 앱 제작
◆ 안드로이드 개발에 코틀린 클래스와 객체 사용
◆ 구조, 루프, 결정 및 스코프 사용
◆ 데이터 작업 수행
◆ 데이터 컨테이너, 배열 및 컬렉션 마스터
◆ 예외 처리와 외부 라이브러리 사용

이 책의 대상 독자

프로그래밍 지식이 거의 없는 초보 소프트웨어 개발자, 향후 안드로이드 프로젝트에 코틀린을 사용하려는 다른 언어 지식이 있는 개발자를 위한 책이다. 대상 플랫폼은 안드로이드 디바이스다. 안드로이드를 플랫폼으로 사용하고 코틀린 프로그래밍 언어와 코틀린이 안드로이드에 사용되는 방법을 철저하게 소개한다.
프로그램 설치 및 시작을 포함해 데스크톱이나 랩톱 컴퓨터를 사용하는 방법의 기본 지식이 필요하다. 사용하려는 운영 체제는 중요한 역할을 하지 않지만, 안드로이드 스튜디오를 개발 환경으로 사용하므로 이 통합 개발 환경(IDE)을 실행할 수 있는 운영 체제를 선택해야 한다. 이러한 운영 체제로는 리눅스, 윈도우, 맥 OS가 있다. 스크린 샷은 우분투 리눅스에서 찍었다. 초급부터 중급 수준 복잡성의 안드로이드용 코틀린 프로그램을 작성하고 실행할 수 있다.

이 책의 구성

1장, ‘첫 코틀린 애플리케이션: Hello Kotlin’에서는 간단한 코틀린 프로그램을 작성하고 실행하기 위해 안드로이드 스튜디오 IDE를 사용하는 방법을 배운다.
2장, ‘클래스와 객체: 객체지향 철학’의 주요 주제인 객체지향은 클래스, 인스턴스화, 객체에 대한 것이다.
3장, ‘클래스의 작동: 프로퍼티와 함수’에서는 프로퍼티와 함수 선언을 얘기한다. 객체지향의 중요 기능인 상속도 얘기한다.
4장, ‘클래스와 객체: 확장 기능’에서는 프로그램이 작동하는 데 반드시 필요하지는 않지만 가독성과 표현력을 향상시키는 확장된 객체지향 기능을 다룬다.
5장, ‘표현식: 데이터 작업’에서는 다양한 표현식 유형과 이들 사이의 변환을 살펴본다.
6장, ‘코틀린 파일의 주석’에서는 주석으로 할 수 있는 것을 비롯해 주석을 코틀린 파일에 어떻게 추가하는지 살펴본다.
7장, ‘구조적 구조’에서는 이러한 분기 구조와 함께 코드 작성을 돕는 보조 부류를 살펴본다.
8장, ‘예외: 뭔가 잘못된다면’에서는 예외를 살펴본다. 예외는 예상하지 못한 심각한 문제가 발생한 경우에 생성되거나 던져지는 객체다.
9장, ‘데이터 컨테이너’에서는 컴퓨터 언어 역사에 먼저 등장한 배열부터 살펴보고 컬렉션을 살펴본다.
10장, ‘참, 거짓 그리고 미정: 널 가능성’에서는 true도 false도 아닌 뭔가가 컴퓨터 프로그래밍에 있어야 한다는 사실과 이러한 널 가능성을 배운다.
11장, 동등성 처리’에서는 동일성과 동등성 사이에는 큰 차이가 있으며, 이러한 동일성과 동등성 비교는 중요한 내용을 알려준다는 것을 배운다.
12장, ‘다시 수학으로: 함수형 프로그래밍’에서는 함수형 구조의 지식을 심화하고, 훌륭한 소프트웨어 작성에 필요한 향상된 도구 집합을 배울 수 있다.
13장, ‘타입 안전성에 대해: 제네릭’에서는 제네릭을 자세하게 살펴보고 타입 연관성을 이해해볼 것이다.
14장, ‘힌트 추가: 애너테이션’에서는 코드에 메타 정보를 추가하기 위한 애너테이션을 살펴본다.
15장, ‘자바와 코틀린 API의 사용’에서는 코틀린과 함께 제공되는 라이브러리를 살펴본다.
16장, ‘컬렉션 API’에서는 이미 알고 있는 것을 복습하고 여러 가지 흥미로운 컬렉션 인터페이스, 클래스, 함수를 살펴본다.
17장, ‘다른 API들’에서는 애플리케이션에서 사용할 수 있는 몇 가지 다른 API를 모았다.
18장, ‘병렬 작업: 멀티스레딩’에서 코틀린은 멀티스레딩의 자체 아이디어를 코루틴이라는 기술로 소개하고 있다.
19장, ‘외부 라이브러리 사용하기’에서는 안드로이드 프로젝트에 외부 라이브러리를 추가하는 방법을 얘기하고 외부 자바 라이브러리를 추가할 경우 널 가능성 관련 특성을 탐구하며 자체 라이브러리를 만드는 방법을 설명한다.
20장, ‘XML과 JSON’에서는 코드 스니펫을 테스트할 수 있는 샘플 앱이 있다고 가정한다.

저자/역자 소개

지은이의 말

컴퓨터 프로그램은 입력 데이터를 사용해 출력 데이터를 생성하는 작업을 실행하고 때로는 해당 작업을 할 때 데이터베이스에서 가져온 데이터를 조작하기도 한다. ‘데이터베이스’라는 단어는 가장 일반적인 의미로 사용된다. 이는 파일이 될 수도 있고 메모리 스토리지나 완전한 데이터베이스 제품일 수도 있다.
오늘날에는 각각 자신만의 장점과 단점을 가진 여러 프로그래밍 언어가 존재한다. 일부는 안정적인 실행을 목표로 하고, 일부는 고성능, 어떠한 것은 특정 작업을 해결하기 위해 만들어졌으며 일부는 회사가 강력한 시장 입지를 구축하길 원하기 때문에 존재한다. 프로그래밍 언어가 시간이 지나면서 발전한 방식을 살펴보는 것은 그 자체로 흥미로운 주제이며, 정보기술의 다양한 측면에 영향을 미친다. 누군가는 이에 대해 별도의 책을 쓸 수도 있겠지만 이 책에서는 단지 컴퓨터 언어 발달에 대한 한 가지 중요한 사실을 강조하려고 한다. 이는 현대 컴퓨터 프로그램이 작성되는 방식에 직접적인 영향을 미친다. 컴퓨터 언어의 역사적 발전을 살펴보면 언어가 나타내는 추상화 수준에 상당한 변화가 있음을 발견할 수 있다. 업계 초기에는 프로그래머가 컴퓨터 하드웨어를 매우 잘 알고 있어야 했지만 이제는 언어에 다른 수준의 추상화가 도입돼 하드웨어 기능으로부터 개념적이고 언어적인 거리가 멀어졌다. 이로 인해 소프트웨어 개발자는 컴퓨터의 중앙처리장치(CPU)에서 무슨 일이 일어나고 있는지 알아야 한다는 사항이 점점 완화됐다.
이 책의 끝에 도달하면 안드로이드 문제에 특히 관심을 갖고 코틀린 언어로 문제를 해결할 수 있는 발전된 개발자가 돼야 한다. 물론 특정 문제를 해결하기 위해 라이브러리를 전부 알 수는 없다. 이때는 오직 경험만 도움이 된다. 하지만 대부분의 언어 구조를 알고 프로그래밍 기술에 대한 좋은 아이디어를 가지면 전문적인 안드로이드 프로그래머가 될 수 있다.

지은이 소개

피터 슈패스(Peter Späth)

2002년 물리학 학사학위를 수료하고 이후 자바 관련 프로젝트를 주로 하는 IT 컨설턴트가 됐다. 2016년 소프트웨어 개발에 주로 초점을 맞춰 다양한 주제로 책을 쓰는 데 집중하기로 결정했다. 자바 관련 언어의 풍부한 경험과 안드로이드 앱을 만드는 데 사용할 수 있는 코틀린 출시로 안드로이드 환경에서 코틀린 개발을 위한 책을 저술하는 데 열의를 보이고 있다.

옮긴이의 말

코틀린이라는 언어를 처음 접하고 사용한 지 벌써 3년이 돼 간다. 여러 큰 회사에서 코틀린으로 만든 애플리케이션으로 서비스를 제공하고 운영해왔다. 3년이 지난 지금도 여전하게 코틀린을 사용 중이고 코틀린을 사용하지 않는 회사로 이직한 경우 코틀린을 왜 사용해야 하는지 기존 구성원을 설득해 전환시켰던 경험이 있다.
프로그래밍 언어의 인기는 곧 신뢰성과 결부되므로 개발자에게 인기는 중요할 수밖에 없다. 현재의 코틀린은 인기가 많이 높아진 것 같다. 안드로이드뿐만 아니라 서버 애플리케이션 개발에도 활발하게 쓰이기 때문인지 기존 구성원을 설득하는 것은 별로 어렵지 않았다. 그렇다면 그 이후 개발자가 느끼는 코틀린은 어땠을까? 설문조사나 통계 작성을 해본 것은 아니지만 잠시 커피 한 잔을 하면서 코틀린에 대한 경험을 말할 때는 왜 이런 언어를 쓰는지에 대한 얘기는 적어도 나오지 않았다. 혹자는 이제 자바 언어가 매우 낯설고 장황하게 느껴진다고 말하기도 한다.
개인적으로 코틀린은 자바 대체 언어로 사용하기에 매우 훌륭한 선택이라고 생각한다. 다른 모던 언어에서 찾아볼 수 있는 기능이 과하지 않을 만큼 코틀린이라는 언어 속에 녹아 있다. 좋은 부분만 잘 수용했다고 할까? 개발자는 코드를 더 간결하게 작성할 수 있고 코드를 자바로 작성하는 것보다 생산성이 더 향상될 수 있다고 생각한다. 코틀린은 사용해봐야만 그 장점을 확실하게 느낄 수 있는 언어다. 이 책을 읽는 독자 여러분도 코틀린의 매력에 푹 빠지길 바란다.

옮긴이 소개

유진호

프로그래밍을 좋아하는 평범한 프로그래머로 다양한 기술에 관심이 많다. 최종사용자에게 서비스 경험을 어떻게 빨리 안정적으로 제공할 수 있을지 최근 들어 자주 고민하고 있다.

목차

목차
  • 1장. 첫 코틀린 애플리케이션: Hello Kotlin
    • IDE 설치: 안드로이드 스튜디오
    • 안드로이드 디바이스 연결
    • 첫 코틀린 앱 시작하기
    • 에뮬레이터 설정 및 사용
    • HelloKotlin 앱 계속하기
    • 커맨드 라인 사용하기

  • 2장. 클래스와 객체: 객체지향 철학
    • 코틀린과 객체지향 프로그래밍
      • 클래스 선언
      • 연습문제 1
      • 프로퍼티 선언
      • 연습문제 2
      • 연습문제 3
      • 클래스 초기화
      • 연습문제 4
      • 연습문제 5
      • 코틀린에서의 송장
      • 다른 송장 프로퍼티
      • 송장 초기화
      • 연습문제 6
      • 코틀린의 인스턴스화
      • 송장에 함수 추가하기
      • 연습문제 7
      • 전체 송장 클래스
    • 간단한 숫자 맞추기 게임
    • 생성자
      • 연습문제 8
      • 생성자 호출
      • 연습문제 9
      • 연습문제 10
      • 명명된 생성자 매개변수
      • 연습문제 11
      • 연습문제 12
      • 생성자 기본 값
      • 연습문제 13
      • 연습문제 14
      • 부 생성자
      • 연습문제 15
    • 클래스가 필요 없다면: 싱글턴 객체
      • 연습문제 16
      • 연습문제 17
    • 상태가 중요하지 않은 경우: 동반자 객체
      • 연습문제 18
      • 연습문제 19
    • 계약 설명: 인터페이스
      • 연습문제 20
      • 연습문제 21
      • 연습문제 22
    • 구조화와 패키지
      • 구조화된 프로젝트
      • 연습문제 23
      • 네임스페이스와 임포트
      • 연습문제 24

  • 3장. 클래스의 작동: 프로퍼티와 함수
    • 프로퍼티와 프로퍼티의 타입
      • 단순 프로퍼티
      • 연습문제 1
      • 프로퍼티 타입
      • 프로퍼티 값 할당
      • 연습문제 2
      • 리터럴
      • 연습문제 3
      • 프로퍼티 가시성
      • NULL 값
      • 연습문제 4
      • 프로퍼티 선언 수정자
    • 멤버 함수
      • 값을 반환하지 않는 함수
      • 연습문제 5
      • 연습문제 6
      • 값을 반환하는 함수
      • 연습문제 7
      • 연습문제 8
      • 연습문제 9
      • 마스킹된 프로퍼티에 접근하기
      • 연습문제 10
      • 함수 호출
      • 연습문제 11
      • 함수의 명명된 매개변수
      • 연습문제 12
      • 함수의 기본 매개변수
      • 연습문제 13
      • 함수의 가변 매개변수
      • 연습문제 14
      • 추상 함수
      • 다형성
      • 로컬 함수
      • 상속
      • 다른 클래스를 상속하는 클래스
      • 생성자 상속
      • 연습문제 15
      • 함수 재정의
      • 프로퍼티 재정의
      • 연습문제 16
      • 연습문제 17
      • 수퍼클래스 애셋에 접근하기
    • 로컬 변수
      • 연습문제 18
    • 클래스와 클래스 멤버의 가시성
      • 자기 참조: this
    • 클래스를 문자열로 변환하기
      • 연습문제 19

  • 4장. 클래스와 객체: 확장 기능
    • 익명 클래스
    • 내부 클래스
    • 클래스 외부의 함수와 프로퍼티
      • 연습문제 1
    • 함수와 프로퍼티 임포트
      • 연습문제 2
    • 데이터 클래스
      • 연습문제 3
      • 연습문제 4
    • 열거형
      • 연습문제 5
    • 사용자 정의 프로퍼티 접근자
      • 연습문제 6
      • 연습문제 7
      • 연습문제 8
    • 코틀린 확장
      • 확장 함수
    • 확장 프로퍼티
      • 널 가능 리시버를 사용하는 확장
      • 확장 캡슐화
    • 꼬리 재귀를 사용하는 함수
    • 이항 연산자
    • 연산자 재정의
      • 연습문제 9
    • 위임

  • 5장. 표현식: 데이터 작업
    • 표현식 예제
    • 표현식의 편재성
    • 수치 표현식
      • 연습문제 1
    • 불리언 표현식
    • 문자열과 문자 표현식
    • 비트와 바이트
    • 다른 연산자
      • 연습문제 2
    • 변환

  • 6장. 코틀린 파일의 주석
    • 패키지 주석
    • 마크다운
    • 클래스 주석
    • 함수와 프로퍼티 주석
      • 연습문제 1
    • 자체 API 문서 생성

  • 7장. 구조적 구조
    • If와 When
    • 레인지
    • For와 While 루프
    • 스코핑 함수
    • apply 함수
    • let 함수
    • with 함수
    • also 함수
    • run 함수
    • 조건별 실행

  • 8장. 예외: 뭔가 잘못된다면
    • 코틀린과 예외
    • 다른 예외 유형
    • 예외 던지기
      • 연습문제 1
    • 표현식에서의 예외

  • 9장. 데이터 컨테이너
    • 배열의 정의와 사용
    • 배열 인스턴스화
      • 연습문제 1
      • 연습문제 2
    • 배열 작업
    • 세트, 리스트 및 맵
      • 세트
      • 연습문제 3
      • 리스트
    • 페어와 트리플
    • 데이터 컨테이너를 이용한 루프
    • 배열과 컬렉션 정렬
      • 연습문제 4
      • 연습문제 5
    • 그룹핑, 폴딩, 리듀싱 및 집핑
      • 그룹핑
      • 연습문제 6
      • 폴딩
      • 리듀싱
      • 연습문제 7
      • 집핑
      • 연습문제 8
    • 배열과 컬렉션의 탐색
    • 스프레드 연산자
    • 큐와 스택: 데크
    • NumberGuess 앱을 위한 통계 클래스
      • 앱에 액션 바 추가하기
      • 통계 액티비티
      • 통계의 상태 관리
      • 액티비티 사이의 소통
      • 통계 계산 구현

  • 10장. 참, 거짓 그리고 미정: 널 가능성
    • NULL이란?
    • 코틀린 내부에서 널 가능성이 처리되는 방식

  • 11장. 동등성 처리
    • 코틀린의 동일성
    • 코틀린의 동등성
    • equals와 해시 코드
      • 연습문제 1
      • 연습문제 2

  • 12장. 다시 수학으로: 함수형 프로그래밍
    • 코틀린과 함수형 프로그래밍
    • 이름 없는 함수: 람다 함수
      • 연습문제 1
      • 연습문제 2
    • 루프 다시 살펴보기
    • 리시버가 있는 함수
    • 인라인 함수
    • 필터
      • 연습문제 3

  • 13장. 타입 안전성에 대해: 제네릭
    • 단순 제네릭
      • 연습문제 1
    • 선언 지점 가변성
    • 불변 컬렉션에 대한 가변성
    • 타입 프로젝션
    • 스타 프로젝션
    • 제네릭 함수
    • 제네릭 제약
      • 연습문제 2

  • 14장. 힌트 추가: 애너테이션
    • 코틀린의 애너테이션
    • 애너테이션의 성질
    • 애너테이션 적용하기
    • 배열 매개변수를 갖는 애너테이션
    • 애너테이션 읽기
    • 내장 애너테이션
    • 커스텀 애너테이션
      • 연습문제 1

  • 15장. 자바와 코틀린 API의 사용
    • 코틀린과 자바 라이브러리
    • 온라인 리소스 사용
    • 문서의 로컬 사본 만들기

  • 16장. 컬렉션 API
    • 인터페이스
    • 클래스
    • 제너레이터 함수
    • 컬렉션과 맵 세터 및 리무버
    • 결정적 게터
    • 컬렉션과 맵 특성
    • 컬렉션과 맵 순회
    • 변환
      • 연습문제 1
      • 연습문제 2
      • 연습문제 3
      • 연습문제 4
    • 필터링
      • 연습문제 5
    • 가변성 변경하기
    • 요소 검사
      • 연습문제 6
    • 요소 찾기
      • 연습문제 7
    • 집계, 폴딩 및 리듀싱
      • 연습문제 8
    • 결합
    • 그룹핑
    • 집핑
    • 윈도잉
    • 시퀀스
    • 연산자

  • 17장. 다른 API들
    • 수학 API
    • 날짜와 시간 API, API 레벨 25 이하
    • 날짜와 시간 API, API 레벨 26 이상
    • 로컬 날짜와 시간
    • 인스턴트
    • 오프셋 날짜와 시간
    • 구역 날짜와 시간
    • 듀레이션과 피리어드
    • 클락
      • 연습문제 1
    • 입력과 출력
    • 테스트 파일 만들기
    • 파일 이름
    • 디렉터리 나열
    • 파일에 쓰기
    • 파일에서 읽기
    • 파일 삭제
    • 임시 파일 다루기
    • 다른 파일 작업
    • URL 읽기
    • 리플렉션 사용
    • 정규 표현식
    • 패턴
    • 일치 확인
      • 연습문제 2
    • 문자열 자르기
    • 하위 문자열 추출하기
    • 대치

  • 18장. 병렬 작업: 멀티스레딩
    • 자바 멀티스레딩 기초
    • 자바의 고급 멀티스레딩
    • 특수한 동시성 컬렉션
    • 잠금
    • 원자적 변수 타입
    • 익스큐터, 퓨처 및 콜러블
      • 연습문제 1
    • 코틀린 코루틴
    • 기본 코루틴
    • 코루틴 컨텍스트
    • delay( )가 하는 일
    • 일시 중단 함수란?
    • 잡 기다리기
    • 코루틴 취소하기
    • 타임아웃
    • 디스패처
    • 예외 처리
      • 연습문제 2

  • 19장. 외부 라이브러리 사용하기
    • 외부 라이브러리 추가하기
    • 의존성 관리
    • 미해결 로컬 의존성
    • 외부 라이브러리와 널 가능성
    • 자체 라이브러리 만들기

  • 20장. XML과 JSON
    • XML 처리
    • XML 데이터 읽기
    • XML 데이터 변경
    • 새로운 DOM 생성
      • 연습문제 1
    • JSON 처리
    • JSON 헬퍼 함수
    • JSON 데이터 읽고 쓰기
    • 새로운 JSON 트리 생성
      • 연습문제 2

도서 오류 신고

도서 오류 신고

에이콘출판사에 관심을 가져 주셔서 고맙습니다. 도서의 오탈자 정보를 알려주시면 다음 개정판 인쇄 시 반영하겠습니다.

오탈자 정보는 다음과 같이 입력해 주시면 됩니다.

(예시) p.100 아래에서 3행 : '몇일'동안 -> 며칠동안

정오표

정오표

안드로이드 스튜디오 버전에 따라 예제가 제대로 실행되지 않는 경우 아래 내용 참고해 수정 후 실행해주시면 감사하겠습니다.

android.support.constraint.ConstraintLayout 오류
activity_main.xml의 android.support.constraint.ConstraintLayout를 androidx.constraintlayout.widget.ConstraintLayout으로 변경

android.support.v7.app.AppCompatActivity 오류
android.support.v7.app.AppCompatActivity
->
import androidx.appcompat.app.AppCompatActivity

android.support.v7.widget.Toolbar 오류
android.support.v7.widget.Toolbar
->
androidx.appcompat.widget.Toolbar

android.support.design.widget.CoordinatorLayout 오류
android.support.design.widget.CoordinatorLayout
->
androidx.coordinatorlayout.widget.CoordinatorLayout

android.support.design.widget.AppBarLayout 오류
budil.gradle에 implementation 'com.google.android.material:material:1.0.0'를 추가한 다음 android.support.design.widget.AppBarLayout을 com.google.android.material.appbar.AppBarLayout으로 변경

272페이지 오버라이드 메서드 추가
override
fun onOptionsItemSelected(item: MenuItem): Boolean {
openStatistics()
return super.onOptionsItemSelected(item)
}