Programming in Scala (창시자가 직접 집필한 스칼라 언어의 바이블 | 4 판)

Programming in Scala (창시자가 직접 집필한 스칼라 언어의 바이블 | 4 판)

$53.62
Description
스칼라는 여러 함수 언어적 기법과 객체지향 기법이 어우러져 루비나 파이썬 같은 동적 언어 못지않게 간결하면서 풍부한 표현력을 가진 언어다. 스칼라는 빅데이터나 머신러닝 등의 최첨단 분야에 널리 쓰이고 있다. 스칼라를 만든 마틴 오더스키 등이 집필한 이 책은 스칼라의 다양한 측면을 완벽하게 설명한 스칼라 언어의 바이블이다.
이 책은 함수, 트레이트, 암시적 변환, 모듈 등 스칼라의 기본 문법과 컬렉션 사용법, 컬렉션의 내부 구조, 객체지향 및 함수 프로그래밍을 활용하는 방법을 다룬다. 또한 퓨처를 사용한 동시성 프로그래밍, 자바와의 조합, 파싱, GUI 프로그래밍 같은 응용을 설명한 2판의 내용을 수정, 보완했으며, 최신 버전에 맞춰서 문자열 인터폴레이션이나 와일드카드 타입, 변경된 컬렉션 프레임워크에 대한 내용이 추가됐다. 차근차근 따라 하다 보면 숙련된 스칼라 개발자가 될 수 있고, 동시에 다양한 프로그래밍 패러다임을 한 언어에 자연스럽게 녹이는 방법과, 각각을 적재적소에 활용하는 방법을 배울 수 있다.
저자

마틴오더스키

MartinOdersky
스칼라언어의창시자다.스위스로잔EPFL의교수이며,라이트벤드사(Lightbend,Inc)의공동창업자다.프로그래밍언어와시스템분야에서일해왔으며,주로객체지향과함수형프로그래밍을조합하는분야를연구해왔다.2001년이후,스칼라를설계하고구현하고다듬는일에집중해왔다.이전에는자바제네릭스설계자의일원으로자바개발에영향을끼쳤으며,현재사용중인javac참조컴파일러를맨처음작성한프로그래머다.ACM의펠로우(fellow)이기도하다.

목차

1장.확장가능한언어
1.1여러분의마음에서점점자라가는언어
1.2스칼라의확장성이가능한이유
1.3왜스칼라인가?
1.4스칼라의뿌리
1.5결론

2장.스칼라첫걸음
2.11단계:스칼라인터프리터사용법을익히자
2.22단계:변수를정의해보자
2.33단계:함수를정의해보자
2.44단계:스칼라스크립트를작성해보자
2.55단계:while로루프를돌고,if로결정해보자
2.66단계:foreach와for를사용해이터레이션해보자
2.7결론

3장.스칼라두번째걸음
3.17단계:배열에타입파라미터를지정해보자
3.28단계:리스트를사용해보자
3.39단계:튜플을사용해보자
3.410단계:집합과맵을써보자
3.511단계:함수형스타일을인식하는법을배우자
3.612단계:파일의내용을줄단위로읽자
3.7결론

4장.클래스와객체
4.1클래스,필드,메서드
4.2세미콜론추론
4.3싱글톤객체
4.4스칼라애플리케이션
4.5App트레이트
4.6결론

5장.기본타입과연산
5.1기본타입
5.2리터럴
5.3문자열인터폴레이션
5.4연산자는메서드다
5.5산술연산
5.6관계연산과논리연산
5.7비트연산
5.8객체동일성
5.9연산자우선순위와결합법칙
5.10풍부한래퍼
5.11결론

6장.함수형객체
6.1분수클래스명세
6.2Rational생성
6.3toString메서드다시구현하기
6.4선결조건확인
6.5필드추가
6.6자기참조
6.7보조생성자
6.8비공개필드와메서드
6.9연산자정의
6.10스칼라의식별자
6.11메서드오버로드
6.12암시적타입변환
6.13주의사항
6.14결론

7장.내장제어구문
7.1if표현식
7.2while루프
7.3for표현식
7.4try표현식으로예외다루기
7.5match표현식
7.6break와continue문없이살기
7.7변수스코프
7.8명령형스타일코드리팩토링
7.9결론

8장.함수와클로저
8.1메서드
8.2지역함수
8.31급계층함수
8.4간단한형태의함수리터럴
8.5위치표시자문법
8.6부분적용한함수
8.7클로저
8.8특별한형태의함수호출
8.9꼬리재귀
8.10결론

9장.흐름제어추상화
9.1코드중복줄이기
9.2클라이언트코드단순하게만들기
9.3커링
9.4새로운제어구조작성
9.5이름에의한호출파라미터
9.6결론

10장.상속과구성
10.12차원레이아웃라이브러리
10.2추상클래스
10.3파라미터없는메서드정의
10.4클래스확장
10.5메서드와필드오버라이드
10.6파라미터필드정의
10.7슈퍼클래스의생성자호출
10.8override수식자사용
10.9다형성과동적바인딩
10.10final멤버선언
10.11상속과구성사용
10.12above,beside,toString구현
10.13팩토리객체정의
10.14높이와너비조절
10.15한데모아시험해보기
10.16결론

11장.스칼라의계층구조
11.1스칼라의클래스계층구조
11.2여러기본클래스를어떻게구현했는가?
11.3바닥에있는타입
11.4자신만의값클래스정의
11.5결론

12장.트레이트
12.1트레이트의동작원리
12.2간결한인터페이스와풍부한인터페이스
12.3예제:직사각형객체
12.4Ordered트레이트
12.5트레이트를이용해변경쌓아올리기
12.6왜다중상속은안되는가?
12.7트레이트냐아니냐,이것이문제로다
12.8결론

13장.패키지와임포트
13.1패키지안에코드작성하기
13.2관련코드에간결하게접근하기
13.3임포트
13.4암시적임포트
13.5접근수식자
13.6패키지객체
13.7결론

14장.단언문과테스트
14.1단언문
14.2스칼라에서테스트하기
14.3충분한정보를제공하는실패보고
14.4명세로테스트하기
14.5프로퍼티기반테스트
14.6테스트조직과실행
14.7결론

15장.케이스클래스와패턴매치
15.1간단한예
15.2패턴의종류
15.3패턴가드
15.4패턴겹침
15.5봉인된클래스
15.6Option타입
15.7패턴은어디에나
15.8복잡한예제
15.9결론

16장리스트
16.1리스트리터럴
16.2리스트타입
16.3리스트생성
16.4리스트기본연산
16.5리스트패턴
16.6List클래스의1차메서드
16.7List클래스의고차메서드
16.8List객체의메서드
16.9여러리스트를함께처리하기
16.10스칼라의타입추론알고리즘이해
16.11결론

17장.컬렉션
17.1시퀀스
17.2집합과맵
17.3변경가능컬렉션과변경불가능컬렉션
17.4컬렉션초기화
17.5튜플
17.6결론

18장.변경가능한객체
18.1무엇이객체를변경가능하게하는가?
18.2재할당가능한변수와프로퍼티
18.3사례연구:이산이벤트시뮬레이션
18.4디지털회로를위한언어
18.5시뮬레이션API
18.6회로시뮬레이션
18.7결론

19장.타입파라미터화
19.1함수형큐
19.2정보은닉
19.3변성표기
19.4변성표기검사
19.5하위바운드
19.6반공변성
19.7객체의비공개데이터
19.8상위바운드
19.9결론

20장.추상멤버
20.1추상멤버간략하게돌아보기
20.2타입멤버
20.3추상val
20.4추상var
20.5추상val초기화
20.6추상타입
20.7경로에의존하는타입
20.8세분화한타입
20.9열거형
20.10사례연구:통화변환
20.11결론

21장.암시적변환과암시적파라미터
21.1암시적변환
21.2암시규칙
21.3예상타입으로의암시적변환
21.4호출대상객체변환
21.5암시적파라미터
21.6맥락바운드
21.7여러변환을사용하는경우
21.8암시디버깅
21.9결론

22장.리스트구현
22.1List클래스개괄
22.2ListBuffer클래스
22.3실제List클래스
22.4외부에서볼때는함수형
22.5결론

23장.for표현식다시보기
23.1for표현식
23.2n여왕문제
23.3for식으로질의하기
23.4for표현식변환
23.5역방향적용
23.6for일반화
23.7결론
24장컬렉션자세히들여다보기577
24.1변경가능,변경불가능컬렉션
24.2컬렉션일관성
24.3Iterable트레이트
24.4시퀀스트레이트:Seq,IndexedSeq,LinearSeq
24.5집합
24.6맵
24.7변경불가능한구체적인컬렉션클래스
24.8변경가능한구체적인컬렉션클래스
24.9배열
24.10문자열
24.11성능특성
24.12동일성
24.13뷰
24.14이터레이터
24.15컬렉션처음만들기
24.16자바와스칼라컬렉션변환하기
24.17결론
25장스칼라컬렉션아키텍처647
25.1공통연산한데묶기
25.2새로운컬렉션추가하기
25.3결론

26장.익스트랙터
26.1예제:전자우편주소추출
26.2익스트랙터
26.3변수가없거나1개만있는패턴
26.4가변인자익스트랙터
26.5익스트랙터와시퀀스패턴
26.6익스트랙터와케이스클래스
26.7정규표현식
26.8결론

27장.애노테이션
27.1애노테이션이왜필요한가?
27.2애노테이션문법
27.3표준애노테이션
27.4결론

28장.XML다루기
28.1반구조화데이터
28.2XML개요
28.3XML리터럴
28.4직렬화
28.5XML분석
28.6역직렬화
28.7저장하기와불러오기
28.8XML에대한패턴매치
28.9결론

29장.객체를사용한모듈화프로그래밍
29.1문제
29.2조리법애플리케이션
29.3추상화
29.4모듈을트레이트로분리하기
29.5실행시점링킹
29.6모듈인스턴스추적
29.7결론

30장.객체의동일성
30.1스칼라에서의동일성
30.2동일성비교메서드작성
30.3파라미터화한타입의동일성정의
30.4equals와hashCode요리법
30.5결론

31장.스칼라와자바의결합
31.1스칼라를자바에서사용하기
31.2애노테이션
31.3와일드카드타입
31.4스칼라와자바를함께컴파일하기
31.5자바8통합
31.6결론

32장.퓨처와동시성
32.1낙원의골칫거리
32.2비동기실행과Try
32.3Future사용하기
32.4Future테스트
32.5결론

33장.콤비네이터파싱
33.1예제:산술식
33.2파서실행
33.3기본정규표현식파서
33.4또다른예:JSON
33.5파서의결과
33.6콤비네이터파서구현
33.7문자열리터럴과정규표현식
33.8어휘분석과파싱
33.9오류보고
33.10백트래킹과LL(1)
33.11결론

34장.GUI프로그래밍
34.1첫번째스윙애플리케이션
34.2패널과레이아웃
34.3이벤트처리
34.4예제:섭씨/화씨변환기
34.5결론

35장.SCells스프레드시트
35.1화면프레임워크
35.2데이터입력과화면표시분리하기
35.3식
35.4식의파싱
35.5계산
35.6연산라이브러리
35.7변경전파
35.8결론

출판사 서평

★이책의대상독자★

주대상독자층은스칼라로프로그램을작성하는법을배우고싶은프로그래머다.다음프로젝트를스칼라로진행하고싶다면이책이바로당신을위한것이다.또한새로운개념을배워서생각의지평을넓히고싶은프로그래머도재미있게읽을수있을것이다.예를들어,자바프로그래머는이책을읽음으로써다양한함수형프로그래밍개념을익히고더발전된객체지향아이디어도배울수있다.스칼라와그아이디어를배우고나면분명더나은프로그래머가돼있으리라믿는다.
독자여러분이일반적인프로그래밍지식을갖췄다고가정한다.스칼라자체는프로그래밍을처음배울때도적합한언어이긴하지만,이책이프로그래밍을가르쳐주지는않는다.
하지만프로그래밍언어에대한선행지식이필요하지는않다.대부분의프로그래머가스칼라를자바플랫폼에서사용하기는하지만,독자들이자바에대해알고있으리라가정하지는않는다.그러나많은독자가자바에익숙하리라예상하기때문에때때로자바와스칼라를비교해서자바개발에익숙한독자들의이해를도울것이다

★이책의구성★

1장,‘확장가능한언어’스칼라설계와그이유를설명하고,배경역사를설명한다.
2장,‘스칼라첫걸음’기초프로그래밍과업을스칼라로처리하는방법을보여준다.각각이왜작동하는지를자세히설명하지는않는다.2장의목표는독자여러분이스칼라코드를직접타이핑하고실행해보게하는것이다.
3장,‘스칼라두번째걸음’스칼라에더빨리적응할수있도록기본프로그래밍과제를좀더보여준다.3장을마치고나면간단한스크립트작업에스칼라를활용할수있을것이다.
4장,‘클래스와객체’스칼라의기본객체지향빌딩블록을자세히설명하고,스칼라애플리케이션을컴파일하고실행하는방법을보여준다.
5장,‘기본타입과연산’스칼라의기본타입과그리터럴을설명한다.그리고각타입에사용할수있는연산과우선순위및결합법칙을설명한다.마지막으로,풍부한래퍼(wrapper)에대해설명한다.
6장,‘함수형객체’스칼라의객체지향적측면을더깊이파고든다.변경불가능한함수형유리수(functionalrationalnumber)를예제로사용한다.
7장,‘내장제어구문’스칼라가제공하는제어구조인if,while,for,try,match를어떻게활용할수있는지보여준다.
8장,‘함수와클로저’함수언어의기본빌딩블록인함수에대해자세히설명한다.
9장,‘흐름제어추상화’어떻게독자가스스로제어추상화를만들어서스칼라의기본제어구조를보완할수있는지설명한다.
10장,‘상속과구성’스칼라가객체지향프로그래밍을어떻게지원하는지논의한다.다루는주제는4장만큼기초적인부분은아니지만,실무에서는더자주부딪치는부분이다.
11장,‘스칼라의계층구조’스칼라의상속계층을설명하고,모든계층에서사용할수있는일반적인메서드와바닥(최하층)타입에대해설명한다.
12장,‘트레이트’스칼라의믹스인(mixin)조합의메커니즘을다룬다.12장에서는트레이트(trait)가어떻게작동하는지를보여주고,일반적인용례를설명하며트레이트가전통적인다중상속을어떻게향상시키는지보여준다.
13장,‘패키지와임포트’대규모프로그래밍에서생기는문제점을논의한다.최상위패키지,임포트명령,protected나private같은접근제어수식자등에대해설명한다.
14장,‘단언문과테스트’스칼라의단언문(assert)메커니즘을다루고,스칼라에서사용할수있는여러테스트도구를간략히살펴본다.특히,스칼라테스트(ScalaTest)에초점을맞춰설명한다.
15장,‘케이스클래스와패턴매치’캡슐화하지않은일반적인데이터구조를작성하도록지원하는구성요소쌍을소개한다.특히케이스클래스(caseclass)와패턴매치(patternmatch)는트리구조같은재귀적데이터를만들때유용하다.
16장,‘리스트’스칼라프로그램에서가장일반적으로사용하는데이터구조인리스트에대해자세히설명한다.
17장,‘컬렉션’리스트,배열,튜플(tuple),집합(set),맵(map)같은기본스칼라컬렉션사용법을보여준다.
18장,‘변경가능한객체’변경가능한객체를설명하고,스칼라에서이를표현하는방법을배운다.18장뒷부분에서는변경가능한객체를실제활용하는이산이벤트시뮬레이션(discreteeventsimulation)을다룬다.
19장,‘타입파라미터화’13장에서소개한정보은닉기법의일부를구체적인예를들어설명한다.예제는완전히함수형인큐클래스를만드는것이다.19장에서는타입파라미터의변성(variance)에대해설명하고,변성과정보은닉의관계를이야기한다.
20장,‘추상멤버’스칼라가지원하는모든추상멤버를설명한다.메서드뿐아니라필드나타입도추상멤버로정의할수있다.
21장,‘암시적변환과암시적파라미터’소스코드에서프로그래머가지겨워할수있는부분을생략해도컴파일러가대신필요한내용을채워넣도록돕는두가지요소를알려준다.
22장,‘리스트구현’List클래스구현을설명한다.스칼라리스트가어떻게동작하는지이해하는일은중요하다.더나아가,이구현을통해스칼라의특징중몇가지를활용하는방법을보여주기도한다.
23장,‘for표현식다시보기’for표현식을어떻게map,flatMap,filter,foreach등을호출하는명령으로바꿀수있는지보여준다.
24장,‘컬렉션자세히들여다보기’스칼라컬렉션라이브러리를자세히설명한다.
25장,‘스칼라컬렉션의아키텍처’컬렉션라이브러리를어떻게만들었는지보여주고,독자여러분이컬렉션을직접구현하는방법을설명한다.
26장,‘익스트랙터’케이스클래스뿐아니라,임의의클래스에대해패턴매치를어떻게할수있는지보여준다.
27장,‘애노테이션’애노테이션(annotation)을통한언어확장을사용하는방법을알려준다.표준애노테이션에대해설명하고,직접애노테이션을만드는방법도알아본다.
28장,‘XML다루기’스칼라로XML을처리하는방법을설명한다.XML을생성하고,파싱하고,파싱한XML을처리할수있는여러숙어를보여준다.
29장,‘객체를사용한모듈화프로그래밍’스칼라의객체를모듈시스템으로활용하는방법을알려준다.
30장,‘객체의동일성’equals메서드를작성할때고려해야할사항을설명한다.피해야할함정이몇가지있다.
31장,‘스칼라와자바의결합’스칼라와자바를한프로젝트에서함께사용할경우생기는문제를논의하고,그해결책을제안한다.
32장,‘퓨처와동시성’스칼라의Future사용법을보여준다.자바의동시성기본요소나라이브러리를스칼라프로그램에활용할수도있지만,퓨처를사용하면전통적인‘스레드와락’을사용한접근방식을감염시키곤하는교착상태와경합조건을피하는데도움이된다.
33장,‘콤비네이터파싱’스칼라의파서콤비네이터(parsercombinator)라이브러리를사용해파서를만드는방법을보여준다.
34장,‘GUI프로그래밍’스칼라라이브러리로간단한스윙GUI프로그래밍을하는과정을보여준다.
35장,‘SCells스프레드시트’지금까지배운것을한데모아서스칼라로완전한스프레드시트애플리케이션을작성한다.

★추천의글★

2004년프로그래밍을시작하면서당시잘알려지지않았던언어인스칼라를선택했을때만해도,내가어떤탐험과발견의항해를떠나고있는지를미처깨닫지못했다.
처음스칼라를실험했을때는그전에사용해본다른언어와거의비슷했지만이후시행착오,실험을통한발견,오해후의깨달음등이있었다.당시에는스칼라를배울만한문서가거의없고자습서나블로그,나를가르쳐줄만큼스칼라경험이많은사용자도없었다.당연히『ProgramminginScala』같은책도없었다.놀랄만큼새로운기능을제공하는언어만있고누구도이런기능을제대로쓰는법을확실히알지못했다.그런상황은의욕이넘치게하는동시에당황스럽기도했다!
자바개발자로지내며경험한내용으로프로그래밍방식은예상할수있었지만,매일매일스칼라로일상적인코딩을진행해본경험은다르게느껴졌다.초반에스칼라사용법을배우는모험을했던것과중간규모의프로젝트를다른사람들과진행했던일이생각난다.리팩토링을하기로결정한적도있고(계속해서새로운특징과패턴을발견하고배움에따라리팩토링을꽤자주해야했다),컴파일을여러번해야했던적도있다.
컴파일러는매번다양한오류를소스코드줄번호와함께뱉어냈다.그럴때마다해당코드를살펴보고,어떤부분이잘못됐는지알아낸다음,오류를고치기위해코드를수정했다(물론코드를수정하면서오류가다른위치로옮겨간경우도자주있다).하지만이런단계마다컴파일러가정확히문제의근원으로나를이끌어줬다.때로는한번도컴파일에성공하지못하고며칠동안코드수정을반복한적도있다.하지만컴파일오류숫자를몇백개에서십여개로줄이고,다시이런오류를하나로줄이고,결국에는오류를없애면서(즉,컴파일에성공했다는말이다)아주많이리팩토링을거친소프트웨어를처음실행할수있었다.
그리고내예상과다르게컴파일이된코드는처음부터잘실행됐다.자바,펄,파스칼,베이직,PHP,자바스크립트만경험해봤던젊은프로그래머였던나에게,이런경험이얼마나인상적이었는지말로는제대로표현할수가없다.
2015년내가조직했던스칼라월드(ScalaWorld)콘퍼런스키노트에서루나비야나슨(R?narBjarnason)은“제약은자유를주고자유는제약을가한다.”라고주장했다.이말이사실임은스칼라로컴파일할때가장극명하게드러난다.scalac가여러가지제약사항을강제로부여하는주목적은실행시점에발생할것으로예상되는오류(여러오류중이런오류가최악이다)를프로그래머가저지르지못하게하는것이고,이는모든프로그래머를자유롭게해준다.이로인해종합적인테스트스위트가없어도프로그래머가자신감을가지고실험하고,탐험하고,소프트웨어를마음대로바꿀수있다.
그로부터몇년이지났고,나는오늘날까지계속스칼라를배우면서새로운가능성,미묘한의미차이,여러기능간의흥미로운상호작용등을발견하고있다.이렇게여러해동안사용자가열중할수있을정도의깊이를제공하는다른프로그래밍언어가있는지모르겠다.
스칼라는엄청난변화의시기를겪으려한다.다음에나올주버전인스칼라3은15년전내가자바에서스칼라2로옮겨왔을때만큼큰변화를포함할것이다.스칼라를사용하는매일매일의프로그래밍경험은거의그대로유지되겠지만,스칼라언어의거의전영역을관통하는새로운특성레퍼토리가스칼라3에들어온다.이글을쓰고있는지금,스칼라3이폭넓게도입되려면몇년이더걸리고,여전히당분간은스칼라2가사실상표준역할을할것이다.
이책은스칼라2최신릴리스인스칼라2.13을폭넓게다룬다.또한스칼라2.8에서도입했던대규모재설계이후알게된내용을포함시키면서구조를더단순화하기위해재설계해서표준라이브러리에도입된컬렉션라이브러리를소개한다.새컬렉션라이브러리는스칼라2나3에서모두컴파일될수있다.따라서다음10년간사용할코드의기반을이컬렉션라이브러리가제공하게된다.따라서새로운스칼라의등장에흥분하기에앞서,이책을집어들고공부를시작하기에아주좋은때다!

존프레티(JonPretty)
폴란드크라쿠프,2019년9월12일