프로그래밍 스칼라: 실용적인 스칼라 활용법을 익히는 가장 확실한 실전 바이블 (2.11.x 버전 기반)

Book description

이 책은 다양한 코드 예제가 포함된 실전 바이블이다. 초보자와 고급 사용자를 한데 아우를 뿐 아니라, 실제 개발자들의 실용적 관심사에 초점을 맞추어 실전 활용법을 안내한다. 2.11.x 버전에 대응한 최신 스칼라 언어의 특징부터 패턴 매칭, for 내장(comprehension), 고급 함수형 프로그래밍 등의 새로운 내용을 소개한다. 또한 스칼라 명령행 도구와 서드파티 도구, 라이브러리, IDE의 스칼라 지원에 대해 살펴보고, 그 과정에서 생산성을 발휘하는 방법을 제시한다.

Table of contents

  1. 프로그래밍 스칼라
    1. 지은이·옮긴이 소개
    2. 추천의 글
    3. 옮긴이의 말
    4. 이 책에 대하여 (1/2)
    5. 이 책에 대하여 (2/2)
    6. 감사의 글
    7. 목차 (1/4)
    8. 목차 (2/4)
    9. 목차 (3/4)
    10. 목차 (4/4)
  2. Part 1 스칼라와의 만남
    1. CHAPTER 1 빠른 출발: 스칼라 소개
      1. 1.1 왜 스칼라인가?
        1. 1.1.1 스칼라의 매력
        2. 1.1.2 자바 8이 나왔지만 여전히 유용한 스칼라
      2. 1.2 스칼라 설치하기 (1/2)
      3. 1.2 스칼라 설치하기 (2/2)
        1. 1.2.1 SBT 사용하기
        2. 1.2.2 스칼라 명령행 도구 실행하기
        3. 1.2.3 IDE에서 스칼라 REPL 실행하기
      4. 1.3 스칼라 맛보기 (1/3)
      5. 1.3 스칼라 맛보기 (2/3)
      6. 1.3 스칼라 맛보기 (3/3)
      7. 1.4 동시성 맛보기 (1/3)
      8. 1.4 동시성 맛보기 (2/3)
      9. 1.4 동시성 맛보기 (3/3)
      10. 1.5 마치며
    2. CHAPTER 2 입력은 조금만, 일은 더 많이
      1. 2.1 세미콜론
      2. 2.2 변수 정의
      3. 2.3 범위
      4. 2.4 부분 함수
      5. 2.5 메서드 선언 (1/3)
      6. 2.5 메서드 선언 (2/3)
      7. 2.5 메서드 선언 (3/3)
        1. 2.5.1 메서드의 기본 인자와 이름 붙은 인자
        2. 2.5.2 인자 목록이 여럿 있는 메서드
        3. 2.5.3 Future 맛보기
        4. 2.5.4 내포된 메서드 정의와 재귀
      8. 2.6 타입 정보 추론하기 (1/2)
      9. 2.6 타입 정보 추론하기 (2/2)
      10. 2.7 예약어
      11. 2.8 리터럴 값 (1/2)
      12. 2.8 리터럴 값 (2/2)
        1. 2.8.1 정수 리터럴
        2. 2.8.2 부동소수점 리터럴
        3. 2.8.3 불린 리터럴
        4. 2.8.4 문자 리터럴
        5. 2.8.5 문자열 리터럴
        6. 2.8.6 심벌 리터럴
        7. 2.8.7 함수 리터럴
        8. 2.8.8 튜플 리터럴
      13. 2.9 Option, Some, None: null 사용 피하기
      14. 2.10 봉인된 클래스 계층
      15. 2.11 파일과 이름공간으로 코드 구조화하기
      16. 2.12 타입과 멤버 임포트하기
        1. 2.12.1 임포트는 상대적이다
        2. 2.12.2 패키지 객체
      17. 2.13 추상 타입과 매개변수화한 타입
      18. 2.14 마치며
    3. CHAPTER 3 기초를 튼튼히
      1. 3.1 연산자 오버로딩?
        1. 3.1.1 편의 구문
      2. 3.2 빈 인자 목록이 있는 메서드
      3. 3.3 우선순위 규칙
      4. 3.4 도메인 특화 언어
      5. 3.5 스칼라 if 문
      6. 3.6 스칼라 for 내장 (1/2)
      7. 3.6 스칼라 for 내장 (2/2)
        1. 3.6.1 for 루프
        2. 3.6.2 제너레이터 식
        3. 3.6.3 가드: 값 걸러내기
        4. 3.6.4 yield로 값 만들어내기
        5. 3.6.5 확장 영역과 값 정의
      8. 3.7 다른 루프 표현
        1. 3.7.1 스칼라 while 루프
        2. 3.7.2 스칼라 do-while 루프
      9. 3.8 조건 연산자
      10. 3.9 try, catch, finally 사용하기
      11. 3.10 이름에 의한 호출과 값에 의한 호출
      12. 3.11 지연값
      13. 3.12 열거값
      14. 3.13 문자열 인터폴레이션
      15. 3.14 트레이트: 스칼라 인터페이스와 혼합
      16. 3.15 마치며
  3. Part 2 기본기 다지기
    1. CHAPTER 4 패턴 매칭
      1. 4.1 단순 매치
      2. 4.2 매치 내의 값, 변수, 타입
      3. 4.3 시퀀스에 일치시키기
      4. 4.4 튜플에 일치시키기
      5. 4.5 케이스 절의 가드
      6. 4.6 케이스 클래스에 일치시키기 (1/2)
      7. 4.6 케이스 클래스에 일치시키기 (2/2)
        1. 4.6.1 unapply 메서드
        2. 4.6.2 unapplySeq 메서드
      8. 4.7 가변 인자 목록과 일치시키기
      9. 4.8 정규 표현식과 일치시키기
      10. 4.9 케이스 절의 변수 바인딩에 대해 더 살펴보기
      11. 4.10 타입 일치에 대해 더 살펴보기
      12. 4.11 봉인된 클래스 계층과 매치의 완전성
      13. 4.12 패턴 매칭의 다른 사용법
      14. 4.13 패턴 매칭에 대한 설명을 마치며
      15. 4.14 마치며
    2. CHAPTER 5 암시
      1. 5.1 암시적 인자
        1. 5.1.1 implicitly 사용하기
      2. 5.2 암시적 인자를 사용하는 시나리오 (1/4)
      3. 5.2 암시적 인자를 사용하는 시나리오 (2/4)
      4. 5.2 암시적 인자를 사용하는 시나리오 (3/4)
      5. 5.2 암시적 인자를 사용하는 시나리오 (4/4)
        1. 5.2.1 실행 맥락 제공하기
        2. 5.2.2 사용 가능한 기능 제어하기
        3. 5.2.3 사용 가능한 인스턴스 제한하기
        4. 5.2.4 암시적 증거 제공하기
        5. 5.2.5 타입 소거 우회하기
        6. 5.2.6 오류 메시지 개선하기
        7. 5.2.7 유령 타입
        8. 5.2.8 암시적 인자를 처리하기 위한 규칙
      6. 5.3 암시적 변환 (1/2)
      7. 5.3 암시적 변환 (2/2)
        1. 5.3.1 자신만의 문자열 인터폴레이션 만들기
        2. 5.3.2 표현력 문제
      8. 5.4 타입 클래스 패턴
      9. 5.5 암시와 관련된 기술적 문제
      10. 5.6 암시 해결 규칙
      11. 5.7 스칼라가 기본 제공하는 암시 (1/2)
      12. 5.7 스칼라가 기본 제공하는 암시 (2/2)
      13. 5.8 암시를 현명하게 활용하기
      14. 5.9 마치며
    3. CHAPTER 6 스칼라 함수형 프로그래밍
      1. 6.1 함수형 프로그래밍이란 무엇인가? (1/2)
      2. 6.1 함수형 프로그래밍이란 무엇인가? (2/2)
        1. 6.1.1 수학 함수
        2. 6.1.2 값이 바뀌지 않는 변수
      3. 6.2 스칼라 함수형 프로그래밍
        1. 6.2.1 익명 함수, 람다, 클로저
        2. 6.2.2 안에서 보는 순수성과 밖에서 보는 순수성
      4. 6.3 재귀
      5. 6.4 꼬리 호출과 꼬리 호출 최적화
        1. 6.4.1 꼬리 호출 트램펄린
      6. 6.5 부분 적용 함수와 부분 함수
      7. 6.6 함수의 커링과 다른 변환 (1/2)
      8. 6.6 함수의 커링과 다른 변환 (2/2)
      9. 6.7 함수형 데이터 구조 (1/2)
      10. 6.7 함수형 데이터 구조 (2/2)
        1. 6.7.1 시퀀스
        2. 6.7.2 맵
        3. 6.7.3 집합
      11. 6.8 순회하기, 연관시키기, 걸러내기, 접기, 축약하기 (1/3)
      12. 6.8 순회하기, 연관시키기, 걸러내기, 접기, 축약하기 (2/3)
      13. 6.8 순회하기, 연관시키기, 걸러내기, 접기, 축약하기 (3/3)
        1. 6.8.1 순회
        2. 6.8.2 연관시키기
        3. 6.8.3 펼치면서 연관시키기
        4. 6.8.4 걸러내기
        5. 6.8.5 접기와 축약시키기
      14. 6.9 왼쪽 순회와 오른쪽 순회 (1/2)
      15. 6.9 왼쪽 순회와 오른쪽 순회 (2/2)
        1. 6.9.1 꼬리 재귀와 무한 컬렉션에 대한 순회
      16. 6.10 콤비네이터: 가장 뛰어난 소프트웨어 컴포넌트 추상화
      17. 6.11 복사에 드는 비용은 어떤가?
      18. 6.12 마치며
    4. CHAPTER 7 for 내장
      1. 7.1 돌아보기: for 내장의 기본 요소
      2. 7.2 for 내장: 내부 동작
      3. 7.3 for 내장의 변환 규칙
      4. 7.4 Option과 다른 컨테이너 타입 (1/4)
      5. 7.4 Option과 다른 컨테이너 타입 (2/4)
      6. 7.4 Option과 다른 컨테이너 타입 (3/4)
      7. 7.4 Option과 다른 컨테이너 타입 (4/4)
        1. 7.4.1 컨테이너로서의 Option
        2. 7.4.2 Either: Option의 논리적 확장
        3. 7.4.3 Try: 할 수 있는 일이 없을 때
        4. 7.4.4 스칼라제드의 Validation
      8. 7.5 마치며
    5. CHAPTER 8 스칼라 객체지향 프로그래밍
      1. 8.1 클래스와 객체의 기초
      2. 8.2 참조 타입과 값 타입
      3. 8.3 값 클래스
      4. 8.4 부모 타입
      5. 8.5 스칼라에서의 생성자 (1/2)
      6. 8.5 스칼라에서의 생성자 (2/2)
      7. 8.6 클래스의 필드
        1. 8.6.1 단일 접근 원칙
        2. 8.6.2 단항 메서드
      8. 8.7 입력 검증하기
      9. 8.8 부모 클래스 생성자 호출하기(그리고 좋은 객체지향 설계) (1/2)
      10. 8.8 부모 클래스 생성자 호출하기(그리고 좋은 객체지향 설계) (2/2)
        1. 8.8.1 여담: 좋은 객체지향 설계
      11. 8.9 내포된 타입
      12. 8.10 마치며
    6. CHAPTER 9 트레이트
      1. 9.1 자바 8의 인터페이스
      2. 9.2 믹스인으로서의 트레이트
      3. 9.3 트레이트 쌓기 (1/2)
      4. 9.3 트레이트 쌓기 (2/2)
      5. 9.4 트레이트 만들기
      6. 9.5 클래스를 쓸 것인가 트레이트를 쓸 것인가?
      7. 9.6 마치며
    7. CHAPTER 10 스칼라 객체 시스템 I
      1. 10.1 매개변수화한 타입: 상속에 따른 변성
        1. 10.1.1 함수 내부 들여다보기
        2. 10.1.2 변경 가능한 타입의 변성
        3. 10.1.3 스칼라의 변성과 자바의 변성 비교
      2. 10.2 스칼라 타입 계층구조
      3. 10.3 Nothing(그리고 Null)에 대한 더 많은 내용 (1/2)
      4. 10.3 Nothing(그리고 Null)에 대한 더 많은 내용 (2/2)
      5. 10.4 Product, 케이스 클래스, 튜플
      6. 10.5 Predef 객체 (1/2)
      7. 10.5 Predef 객체 (2/2)
        1. 10.5.1 암시적 변환
        2. 10.5.2 타입 정의
        3. 10.5.3 조건 검사 메서드
        4. 10.5.4 입출력 메서드
        5. 10.5.5 기타 메서드
      8. 10.6 객체의 동등성
        1. 10.6.1 equals 메서드
        2. 10.6.2 ==와 != 메서드
        3. 10.6.3 eq와 ne 메서드
        4. 10.6.4 Array의 동등성과 sameElements 메서드
      9. 10.7 마치며
    8. CHAPTER 11 스칼라 객체 시스템 II
      1. 11.1 클래스와 트레이트의 멤버 오버라이딩하기
        1. 11.1.1 구체적 멤버를 오버라이딩하는 일 피하기
        2. 11.1.2 final 선언을 오버라이딩하려 시도하기
        3. 11.1.3 추상적 메서드와 구체적 메서드 오버라이딩하기
        4. 11.1.4 추상적 필드와 구체적 필드 오버라이딩하기
        5. 11.1.5 추상 타입 오버라이딩하기
        6. 11.1.6 접근자 메서드와 필드를 구별할 수 없을 때: 단일 접근 원칙
      2. 11.2 객체의 상속 계층을 선형화하기 (1/2)
      3. 11.2 객체의 상속 계층을 선형화하기 (2/2)
      4. 11.3 마치며
    9. CHAPTER 12 스칼라 컬렉션 라이브러리
      1. 12.1 제네릭, 변경 가능, 변경 불가능, 동시성, 병렬 컬렉션, 아이고!
        1. 12.1.1 collection 패키지
        2. 12.1.2 collection.concurrent 패키지
        3. 12.1.3 collection.convert 패키지
        4. 12.1.4 collection.generic 패키지
        5. 12.1.5 collection.immutable 패키지
        6. 12.1.6 collection.mutable 패키지
        7. 12.1.7 collection.parallel 패키지
      2. 12.2 컬렉션 선택하기
      3. 12.3 컬렉션 라이브러리의 설계 방식
        1. 12.3.1 Builder
        2. 12.3.2 CanBuildFrom
        3. 12.3.3 ...Like 트레이트
      4. 12.4 값 타입을 위한 특화
        1. 12.4.1 미니박싱
      5. 12.5 마치며
    10. CHAPTER 13 가시성 규칙
      1. 13.1 공개: 기본 가시성
      2. 13.2 가시성 지정 키워드
      3. 13.3 공개 가시성
      4. 13.4 보호 가시성
      5. 13.5 비공개 가시성
      6. 13.6 영역 지정 비공개와 영역 지정 보호 가시성 (1/2)
      7. 13.6 영역 지정 비공개와 영역 지정 보호 가시성 (2/2)
      8. 13.7 가시성에 대한 마지막 고찰
      9. 13.8 마치며
  4. Part 3 기초를 넘어서
    1. CHAPTER 14 스칼라 타입 시스템 I
      1. 14.1 매개변수화한 타입
        1. 14.1.1 변성 표기
        2. 14.1.2 타입 생성자
        3. 14.1.3 타입 매개변수의 이름
      2. 14.2 타입 바운드 (1/2)
      3. 14.2 타입 바운드 (2/2)
        1. 14.2.1 상위 타입 바운드
        2. 14.2.2 하위 타입 바운드
      4. 14.3 맥락 바운드
      5. 14.4 뷰 바운드
      6. 14.5 추상 타입 이해하기
        1. 14.5.1 추상 타입과 매개변수화한 타입의 비교
      7. 14.6 자기 타입 표기 (1/2)
      8. 14.6 자기 타입 표기 (2/2)
      9. 14.7 구조적 타입
      10. 14.8 복합 타입
        1. 14.8.1 타입 세분화
      11. 14.9 존재 타입
      12. 14.10 마치며
    2. CHAPTER 15 스칼라 타입 시스템 II
      1. 15.1 경로에 의존하는 타입
        1. 15.1.1 C.this
        2. 15.1.2 C.super
        3. 15.1.3 경로.x
      2. 15.2 의존적 메서드 타입
      3. 15.3 타입 투영
        1. 15.3.1 싱글턴 타입
      4. 15.4 값에 대한 타입
        1. 15.4.1 튜플 타입
        2. 15.4.2 함수 타입
        3. 15.4.3 중위 타입
      5. 15.5 고계 타입 (1/2)
      6. 15.5 고계 타입 (2/2)
      7. 15.6 타입 람다
      8. 15.7 자기 재귀 타입: F-바운드 다형성
      9. 15.8 마치며
    3. CHAPTER 16 고급 함수형 프로그래밍
      1. 16.1 대수적 데이터 타입
        1. 16.1.1 합 타입과 곱 타입
        2. 16.1.2 대수적 데이터 타입의 특성
        3. 16.1.3 대수적 데이터 타입에 대한 마지막 고찰
      2. 16.2 카테고리 이론 (1/3)
      3. 16.2 카테고리 이론 (2/3)
      4. 16.2 카테고리 이론 (3/3)
        1. 16.2.1 카테고리란 무엇인가
        2. 16.2.2 펑터 카테고리
        3. 16.2.3 모나드 카테고리
        4. 16.2.4 모나드의 중요성
      5. 16.3 마치며
  5. Part 4 고급 주제 및 실전 응용
    1. CHAPTER 17 동시성 프로그래밍 도구
      1. 17.1 scala.sys.process 패키지
      2. 17.2 퓨처 (1/2)
      3. 17.2 퓨처 (2/2)
        1. 17.2.1 Async
      4. 17.3 액터를 활용해서 튼튼하고 확장성 있는 동시성 프로그래밍하기
      5. 17.4 아카: 스칼라를 위한 액터
        1. 17.4.1 액터: 마지막 고찰
      6. 17.5 피클링과 스포어즈
      7. 17.6 반응형 프로그래밍
      8. 17.7 마치며
    2. CHAPTER 18 스칼라를 활용한 빅데이터
      1. 18.1 빅데이터: 간략한 역사
      2. 18.2 스칼라로 맵리듀스 개선하기 (1/2)
      3. 18.2 스칼라로 맵리듀스 개선하기 (2/2)
      4. 18.3 맵리듀스를 넘어서
      5. 18.4 수학을 위한 카테고리
      6. 18.5 스칼라 기반 데이터 도구 목록
      7. 18.6 마치며
    3. CHAPTER 19 스칼라 동적 호출
      1. 19.1 동기를 불어넣는 예제: 루비 온 레일즈의 ActiveRecord
      2. 19.2 Dynamic 트레이트를 사용해서 스칼라에서 동적 호출하기 (1/2)
      3. 19.2 Dynamic 트레이트를 사용해서 스칼라에서 동적 호출하기 (2/2)
      4. 19.3 DSL에서 고려할 점
      5. 19.4 마치며
    4. CHAPTER 20 스칼라 도메인 특화 언어
      1. 20.1 예제: 스칼라를 위한 XML과 JSON DSL
      2. 20.2 내부 DSL (1/2)
      3. 20.2 내부 DSL (2/2)
      4. 20.3 파서 콤비네이터를 활용한 외부 DSL
        1. 20.3.1 파서 콤비네이터
        2. 20.3.2 급여 계산 외부 DSL
      5. 20.4 내부 DSL과 외부 DSL에 대한 마지막 고찰
      6. 20.5 마치며
    5. CHAPTER 21 스칼라 도구와 라이브러리
      1. 21.1 명령행 도구
        1. 21.1.1 scalac 명령행 도구
        2. 21.1.2 scala 명령행 도구
        3. 21.1.3 scalap와 javap 명령행 도구
        4. 21.1.4 scaladoc 명령행 도구
        5. 21.1.5 fsc 명령행 도구
      2. 21.2 빌드 도구
        1. 21.2.1 스칼라 표준 빌드 도구 SBT
        2. 21.2.2 다른 빌드 도구
      3. 21.3 IDE나 텍스트 편집기와 통합하기
        1. 21.3.1 텍스트 편집기
      4. 21.4 스칼라로 테스트 주도 개발하기
      5. 21.5 서드파티 라이브러리
      6. 21.6 마치며
    6. CHAPTER 22 자바 상호 운용성
      1. 22.1 자바에서 정의한 이름을 스칼라 코드에서 사용하기
      2. 22.2 자바와 스칼라 제네릭스
      3. 22.3 자바빈즈 프로퍼티
      4. 22.4 AnyVal 타입과 자바 기본 타입
      5. 22.5 자바 코드로 변환한 스칼라 이름
      6. 22.6 마치며
    7. CHAPTER 23 애플리케이션 설계
      1. 23.1 그 동안 배운 내용 복습
      2. 23.2 애노테이션
      3. 23.3 모듈로서의 트레이트
      4. 23.4 디자인 패턴
        1. 23.4.1 생성 패턴
        2. 23.4.2 구조 패턴
        3. 23.4.3 행동 패턴
      5. 23.5 계약에 의한 설계를 활용해서 더 좋게 설계하기
      6. 23.6 파르테논 구조 (1/2)
      7. 23.6 파르테논 구조 (2/2)
      8. 23.7 마치며
    8. CHAPTER 24 메타프로그래밍: 매크로와 리플렉션
      1. 24.1 타입을 이해하기 위한 도구
      2. 24.2 실행 시점 리플렉션
        1. 24.2.1 타입에 대한 리플렉션
        2. 24.2.2 클래스 태그, 타입 태그, 매니페스트
      3. 24.3 스칼라의 고급 실행 시점 리플렉션 API
      4. 24.4 매크로 (1/2)
      5. 24.4 매크로 (2/2)
        1. 24.4.1 매크로 예제: 불변성 강제하기
        2. 24.4.2 매크로에 대한 마지막 고찰
      6. 24.5 마치며
  6. 부록 A 참고 문헌 (1/2)
  7. 부록 A 참고 문헌 (2/2)
  8. 찾아보기 (1/4)
  9. 찾아보기 (2/4)
  10. 찾아보기 (3/4)
  11. 찾아보기 (4/4)

Product information

  • Title: 프로그래밍 스칼라: 실용적인 스칼라 활용법을 익히는 가장 확실한 실전 바이블 (2.11.x 버전 기반)
  • Author(s): 오현석, 딘 왐플러, 알렉스 페인
  • Release date: July 2016
  • Publisher(s): Hanbit Media, Inc.
  • ISBN: 9788968482755