코틀린 객체지향 프로그래밍 [OOP를 위한 다양한 디자인 패턴]
- 원서명Hands-On Object-Oriented Programming with Kotlin: Build robust software with reusable code using OOP principles and design patterns in Kotlin (ISBN 9781789617726)
- 지은이아비드 칸(Abid Khan), 이고르 쿠체렌코(Igor Kucherenko)
- 옮긴이황주필
- ISBN : 9791161757506
- 35,000원
- 2023년 04월 28일 펴냄
- 페이퍼백 | 476쪽 | 188*235mm
- 시리즈 : 프로그래밍 언어
책 소개
소스 코드 파일은 여기에서 내려 받으실 수 있습니다.
https://github.com/AcornPublishing/kotlin-oop
요약
자바의 대안으로 많은 개발자가 코틀린을 선택하고 있다. 이 책은 코틀린의 클래스, 데이터 클래스, 상속과 같은 기능에 대한 포괄적인 내용을 다룬다. 또한 디자인 패턴의 이해와 코틀린 구문이 객체 지향 기술과 함께 작동하는 방식도 잘 설명한다. 레이블이 지정된 for loop와 when을 표현식으로 작성하고 봉인된 클래스, 패키지 수준 함수, 코루틴과 같은 고급 개념을 소개하며, 이러한 개념으로 소프트웨어를 만드는 방법을 배울 것이다.
이 책에서 다루는 내용
◆ 코틀린 프로그래밍 언어 개요
◆ 코틀린의 객체 지향 프로그래밍 기술
◆ 객체 지향 디자인 패턴
◆ 코틀린 방식으로 멀티스레딩(코루틴)
◆ 배열과 컬렉션
◆ 객체 지향 디자인 패턴의 중요성
◆ 코틀린 객체 지향 프로그래밍에서 예외 처리와 테스트 이해
이 책의 대상 독자
코틀린이 어떻게 작동하는지를 더 깊이 이해하고 싶은 개발자를 대상으로 한다. 특정 플랫폼이나 프레임워크에 의존하지 않고 자바 가상머신에 초점을 맞추고 있으며, 자바스크립트에 대한 코틀린 및 코틀린의 네이티브 기능은 다루지 않는다. 사용자 인터페이스 및 다중 스레드 환경과 관련된 예제를 포함하고 있기 때문에 클라이언트 개발자에게 좋은 선택이 될 것이다.
이 책의 구성
1장, ‘코틀린 시작하기’에서는 코틀린 프로그래밍 언어의 간략한 개요를 제공한다. 또한 데이터 유형과 null 안전 및 형 변환의 작동 방식을 알아본다. 연산자(operator) 및 흐름 제어도 소개한다. 반복문과 함수도 살펴본다.
2장, ‘객체지향 프로그래밍 소개’에서는 객체지향 프로그래밍이 무엇인지, 왜 절차적 프로그래밍과 다르고 더 나은지 살펴본다. 코틀린의 클래스와 데이터 클래스를 설명하고 코틀린이 어떻게 그것들을 독특하게 만드는지 알아본다. 또한 생성자, 생성자의 유형 및 속성 그리고 제일 중요한 속성이 무엇을 의미하는지 자세히 알아본다.
3장, ‘객체지향 프로그래밍의 4가지 요소’에서는 객체지향 프로그래밍의 4가지 요소를 자세히 알아본다. 또한 캡슐화가 무엇인지, 상속이 어떻게 작동하는지 알아본다. 다형성을 선택하는 이유와 추상화의 장점도 알아본다. 마지막으로 부모 클래스를 선언하는 방법과 자식 클래스에서 자원을 활용하는 방법을 살펴본다.
4장, ‘클래스: 고급 개념’에서는 코틀린이 독점적으로 제공하는 프로그래밍의 핵심 개념을 알아본다. 봉인된 클래스, 객체, 컴패니언 객체의 개념과 기존 클래스와 다른 이유를 알아본다. 또한 클래스의 속성과 위임을 알아본다.
5장, ‘데이터 컬렉션, 반복자, 필터’에서는 코틀린에서 제공하는 다양한 데이터 구조를 사용해 데이터 컬렉션을 처리하는 방법을 살펴본다. 또한 배열을 정의하고 사용하는 방법과 목록, 세트, 컬렉션, 맵과 같은 객체 컬렉션을 효율적으로 관리하고자 다양한 템플릿을 활용하는 방법을 알아본다.
6장, 코틀린을 사용한 객체지향 패턴은 설계 패턴이라고 하는 객체지향 프로그래밍의 고급 개념을 다룬다. 설계 패턴은 소프트웨어 설계에서 알려진 문제에 대한 일반적인 해결책이다. 설계 패턴은 개발 프로세스를 가속화하고 이후 단계에서 발생할 수 있는 설계 에러의 위험을 줄일 수 있다. 다른 문제에는 다른 설계 패턴이 사용된다. 소프트웨어 설계 과제와 설계 패턴을 살펴본다.
7장, ‘코루틴: 경량 스레드?’에서는 코틀린이 코루틴이라는 새로운 라이브러리를 어떻게 도입했는지 알아본다. 코루틴은 수천 개의 요청이 진행 중이더라도 CPU를 한계까지 밀어내지 않는 경량 스레드로 간주할 수 있다. 코루틴이 무엇인지 설명하고 자바에서 기존 스레드보다 우수한 이유를 알아본다.
8장, ‘상호운용성’에서는 코틀린이 자바 상호운용성을 염두에 두고 설계된 자바의 슈퍼세트라는 사실을 살펴본다. 상호운용성은 코틀린에서 자바 함수를 호출할 수 있고 그 반대의 경우도 가능하며 자바 및 코틀린 파일을 동일한 애플리케이션에서 사용할 수 있음을 의미한다. 상호운용성에 대한 기술과 플랫폼 간 코드 작성 방법을 자세히 알아본다. 가장 중요한 것은 자바에서 나타날 수 있는 널(null) 입력 가능 호출을 처리하는 방법을 알아본다.
9장, ‘코틀린의 정규식’과 직렬화에서는 regex라고도 알려진 정규식이 많은 양의 텍스트에서 필요한 정보를 찾는 데 도움을 주는 다른 문자의 조합을 살펴본다. 이 기술은 사용자가 문자열(패턴)을 제공하고 정확하게 일치하거나 유사한 목록을 얻는다. 모든 고급 텍스트 편집기는 정규식을 사용해 코드에서 변수를 찾는다. 그리고 코틀린이 정규식에 대한 완벽한 지원과 버그 없는 패턴 작성을 지원하는 방법을 알아보고, 직렬화와 JSON 같은 텍스트 형식을 코틀린에서 어떻게 동작하는지도 알아본다.
10장, ‘예외 처리’에서는 예외 및 예외 처리를 자세히 알아본다. 또한 다양한 키워드가 시도하고 캐치(catch)하고 던지고(throw) 마침내 던지는 등 다양한 예외 유형과 사용자가 사용자 정의 예외를 작성하고 처리하는 방법을 알아본다. 또한 테스트 환경을 준비해 몇 가지 테스트를 작성할 수 있는 방법을 살펴본다.
11장, ‘코틀린을 사용한 객체지향 프로그래밍 테스트’에서는 테스트의 중요성, 테스트가 필요한 이유 및 코드를 테스트하지 않고 공개했을 때의 영향에 대한 통찰력을 제공한다. 또한 테스트 기술, 테스트용 전용 코틀린 라이브러리 및 코틀린이 깨끗하고 읽기 쉬운 테스트 사례를 작성하는 방법을 알아본다.
목차
목차
- 01장. 코틀린 시작하기
- 기술적 요구 사항
- 코틀린 소개
- 코틀린의 데이터 유형
- 코틀린에서 변수 선언
- var 키워드
- val 키워드
- 유형 추론
- 유형 어노테이션
- 숫자 데이터 유형
- 실수 데이터 유형
- 불리언 데이터 유형
- 문자 데이터 유형
- is 키워드를 사용한 유형 검사
- 문자열 변수
- 코틀린에서 변수 선언
- 널 안전성, 형 변환, 페어, 트리플
- 널 안전성
- 안전한 호출 연산자
- 안전한 호출 연산자 ?.
- 엘비스 연산자 ?:
- 널 아님 단정 연산자 !!
- 형 변환
- 바이트에서 단정도 실수로의 변환
- 배정도 실수에서 정수로 변환
- 문자열에서 정수로 변환
- 스마트 형 변환(Smart cast)
- 안전하지 않은 형 변환
- 페어와 트리플
- 선언 방법
- 값을 가져오는 방법
- 널 안전성
- 흐름 제어
- if문
- if else문
- 조건부 연산자가 있는 if문
- 논리합 연산자(and, &&)가 있는 if문
- 논리합 연산자(or, ||)가 있는 if문
- 논리부정 연산자(not, !)가 있는 if문
- if 표현식
- when 표현식
- 여러 조건의 결합
- when 표현식에서 범위 사용
- 표현식으로 when 사용
- 반복문 소개
- while문
- while문 정의
- do while문
- for문
- for문 정의
- 중첩된 for문
- break문
- 레이블을 가진 for문과 break문
- 함수란?
- 함수 선언
- 매개변수와 반환 형식이 없는 함수
- 매개변수가 있는 함수
- 매개변수와 반환 유형이 있는 함수
- 표현식 함수
- 기본값이 있는 함수
- 명명된 매개변수를 가진 함수
- 함수와 vararg
- 다른 인자와 함께 쓰는 vararg
- 패키지 수준의 함수
- 함수를 액세스하는 방법
- 요약
- 질문
- 참고 도서 목록
- 02장. 객체지향 프로그래밍 소개
- 기술적 요구 사항
- 객체지향 프로그래밍이란?
- 클래스와 객체
- 속성과 행위
- 객체지향 프로그래밍의 이점
- 코틀린의 클래스
- 속성: 일급 객체
- 생성자를 사용해 클래스 만들기
- 기본 생성자
- 주 생성자
- init 블록을 가진 주 생성자
- this 키워드
- 부 생성자
- 생성자 오버로딩
- 기본 매개변수를 가진 생성자
- 명명된 매개변수를 가진 생성자
- 데이터 클래스란?
- toString() 함수
- equals() 함수 ==
- copy() 함수
- hashCode() 함수
- 객체 분해
- 클래스와 함수
- 함수 오버로딩
- 요약
- 질문
- 참고 도서 목록
- 03장. 객체지향 프로그래밍의 4가지 요소
- 기술적 요구 사항
- 캡슐화
- 정보 은닉
- 접근 제한자
- private 제한자
- protected 제한자
- 구현 숨기기
- 상속이란?
- open 키워드
- super 키워드
- 클래스 초기화 계층 구조
- 추상화
- 추상 클래스
- 추상 함수
- 인터페이스
- 다중 인터페이스
- 인터페이스 간 충돌 해결
- 인터페이스와 다형성
- 다중 인터페이스
- 오버라이딩
- 오버라이딩이란?
- super 키워드
- final 키워드
- 함수 오버라이딩 규칙
- 프로퍼티 오버라이딩
- 상속의 종류
- 단일 상속
- 다중 상속
- 계층 상속
- 계층 다중 상속
- is-a 관계
- 다형성
- 다형성의 작동 원리
- 동적 바인딩
- 다형성의 작동 원리
- 요약
- 질문
- 참고 도서 목록
- 04장. 클래스: 고급 개념
- 기술적 요구 사항
- 봉인된 클래스와 열거형 클래스
- 봉인된 클래스
- when절과 봉인된 클래스
- 봉인된 클래스가 필요한 이유
- 열거형 클래스
- 생성자를 가진 열거형 클래스
- 열거형 클래스와 함수
- 열거형 클래스와 인터페이스
- 봉인된 클래스
- 객체와 컴패니언 객체
- 상속과 인터페이스가 함께 있는 객체 클래스
- 컴패니언 객체
- 컴패니언 함수와 인터페이스
- 집합, 구성, 중첩 클래스
- 집합
- 구성
- 중첩 클래스
- 내부 클래스
- 클래스 프로퍼티
- 위임 프로퍼티
- 기본 제공 위임자
- 요약
- 질문
- 참고 도서 목록
- 05장. 데이터 컬렉션, 반복자, 필터
- 기술적 요구 사항
- 범위
- 범위 유형
- 범위 선언
- rangeTo 함수
- until 함수
- downTo 함수
- step 함수
- contains 함수
- elementAt 함수
- 범위 프로퍼티
- coerce 함수
- coerceIn 함수
- coerceAtMost(maxValue) 함수
- coerceAtLeast(minValue) 함수
- 배열
- 배열 정의
- 특정 유형의 배열
- 배열 요소의 색인
- get 함수
- 배열과 for문
- 배열 선언과 초기화
- set 함수
- 불변 요소를 갖는 가변 배열
- 배열의 람다 표현식
- 서로 다른 유형의 요소를 가진 배열
- arrayOfNulls 함수
- 배열 복사
- 코틀린의 목록
- 불변 목록
- listOfNotNull 함수
- 목록에 접근
- 불변 목록과 인터페이스
- 반복 가능 인터페이스
- 컬렉션 인터페이스
- 목록 인터페이스
- 가변 목록
- MutableInterable 인터페이스
- 가변 컬렉션 인터페이스
- 가변 목록 인터페이스
- 코틀린에서 세트
- 불변 세트
- 가변 세트
- 맵
- 불변 맵
- 가변 맵
- 코틀린에서 반복자
- 반복자
- list 반복자
- 가변 반복자
- 가변 목록 반복자
- 불변 목록
- 필터와 컬렉션 함수
- filter 함수
- it 키워드
- filterNot 함수
- filterNotNull 함수
- filterIsInstance<dataType> 함수
- slice 함수
- take 함수
- takeLast
- takeWhile
- takeLastWhile
- drop 함수
- dropLast
- dropWhile
- dropWhileLast
- fold 함수
- foldRight
- reduce 함수
- reduceRight
- reduceRightIndexed
- 몇 가지 중요한 함수
- forEach
- forEachIndexed
- onEach
- max와 maxBy
- min과 minBy
- filter 함수
- 요약
- 질문
- 참고 도서 목록
- 06장. 코틀린을 사용한 객체지향 패턴
- 기술적 요구 사항
- 설계 패턴은 무엇이며 어떻게 도움을 주는가?
- 설계 패턴의 유형
- 생성 패턴
- 구조 패턴
- 행동 패턴
- 생성 패턴
- 생성자
- 팩토리 메서드
- 추상 팩토리
- 싱글톤
- 구조 패턴
- 어댑터
- 데코레이터
- 퍼사드
- 프록시
- 행동 패턴
- 관찰자
- 전략
- 명령
- 상태
- 책임 연쇄
- 방문자
- 요약
- 07장. 코루틴: 경량 스레드?
- 기술적 요구 사항
- 코루틴이란?
- 코루틴과 스레드
- 코루틴 예제 코드
- 예외 처리
- 자원 해제
- 취소 불가능 블록
- 병렬 실행
- 지연 실행
- 채널
- 요약
- 08장. 상호운용성
- 기술적 요구 사항
- 코틀린에서 자바 코드 호출
- 정적 변수와 함수 호출
- 코틀린에서 자바 컬렉션 호출
- 코틀린의 예약어
- 코틀린에서 자바 클래스
- 자바에서 코틀린 코드 호출
- 코틀린 함수 호출
- 확장 함수
- 가변 컬렉션이 있는 함수
- 불변 컬렉션이 있는 함수
- JVM 어노테이션이 있는 함수
- 코틀린 클래스 호출
- 코틀린 싱글톤 클래스 호출
- 코틀린 함수 호출
- 요약
- 질문
- 참고 도서 목록
- 09장. 코틀린의 정규식과 직렬화
- 기술적 요구 사항
- 정규식 소개
- 코틀린과 정규식
- 직렬화 소개
- 직렬화와 코틀린 지원
- 요약
- 10장. 예외 처리
- 기술적 요구 사항
- 예외 처리란?
- 확인된 예외와 확인되지 않은 예외
- 예외 계층 구조
- 자바에서의 예외
- 코틀린에서의 예외
- 상호운용성
- try 블록을 표현식으로 사용
- 사용자 정의 예외 작성
- 요약
- 질문
- 참고 도서 목록
- 11장. 코틀린을 사용한 객체지향 프로그래밍 테스트
- 기술적 요구 사항
- 테스트의 필요성
- 테스트 유형
- 수동 테스트
- 자동 테스트
- 단위 테스트
- 코틀린 테스트 라이브러리
- 설치
- 그루비 스크립트를 사용하는 그레들
- 코틀린 스크립트를 사용하는 그레들
- 메이븐
- 설치
- 테스팅 예제 코드
- 클래스 참조
- 사양 작성
- given, on과 it 블록
- 예외 테스트
- describe과 it 블록
- 요약
- 질문