JVM 언어 입문 [자바, 스칼라, 클로저, 코틀린, 그루비 체험하기]
- 원서명Introduction to JVM Languages: Java, Scala, Clojure, Kotlin, and Groovy (ISBN 9781787127944)
- 지은이빈센트 반 데르 렌(Vincent van der Leun)
- 옮긴이신은정
- ISBN : 9791161751962
- 36,000원
- 2018년 08월 30일 펴냄
- 페이퍼백 | 536쪽 | 188*235mm
- 시리즈 : acorn+PACKT, 프로그래밍 언어
책 소개
소스 코드 파일은 여기에서 내려 받으실 수 있습니다.
본문에 쓰인 컬러 이미지는 여기에서 내려 받으세요.
요약
자바 가상 머신(JVM)을 등장시킨 자바 플랫폼에 대한 개괄적인 내용과 JVM의 주요 개념을 설명하고 가장 인기 있는 사용 사례를 소개한다. JVM 언어로 가장 대표적인 자바의 기본 원리와 애플리케이션 개발 방법을 시작으로 스칼라와 클로저, 코틀린, 그루비의 기본 원리와 개발 방법을 다룬다. 다양한 JVM 언어의 차이를 이해하면 개발하고자 하는 프로그램에 가장 적합한 개발 언어를 선택할 수 있는 혜안을 갖게 될 것이다.
이 책에서 다루는 내용
■ JVM에 대한 실질적인 정보 얻기
■ 인기 있는 JVM 언어와 자바 클래스 라이브러리 이해
■ 명령형과 객체지향, 함수형과 같은 다양한 프로그래밍 패러다임
■ 이클립스IDE와 그래들(Gradle), 메이븐(Maven) 같은 일반적인 JVM 툴 사용
■ 스파크자바(SparkJava), Vert.x, 아카(Akka), 자바FX(JavaFX)와 같은 프레임워크 탐구
■ 자바스크립트(JavaScript)와 파이썬(Python), 루비(Ruby) 등을 포함한 다른 유명한 프로그래밍 언어의 변형에 대한 지식
이 책의 대상 독자
이 책은 자바 가상 머신(JVM)에 관심 있으며 JVM 개발에 가장 인기 있는 프로그램 언어를 알고 싶은 개발자를 대상으로 한다. 객체지향 프로그래밍을 지원하는 프로그래밍 언어(자바스크립트, 파이썬, C#, VB.NET, C++)에 대한 경험적 지식이 있다고 가정한다.
이 책의 구성
1장, ‘자바 가상 머신’에서는 자바 플랫폼과 자바 가상 머신에 대한 개괄적인 내용을 제공한다. 웹 애플리케이션과 빅데이터 분석, 사물인터넷(IoT)와 같이 JVM에서 동작하는 애플리케이션의 가장 인기 있는 사용 사례를 소개한다. 또한 JIT(just-in-time) 컴파일러와 가비지 컬렉션을 포함해서 JVM의 주요한 개념을 설명한다.
2장, ‘자바 가상 머신에서 개발하기’에서는 JVM의 기술적인 부분을 설명한다. 주요 운영 체제(윈도우, 맥OS, 리눅스)에서 자바 개발 키트(JDK)를 설치하는 절차와 JDK의 구조를 다룬다. 자바 클래스 라이브러리의 구조와 클래스 경로(ClassPath)를 설정해서 JVM 기반 애플리케이션을 실행하는 방법도 설명한다.
3장, ‘자바’에서는 자바의 기본 원리를 다룬다. 클래스를 생성하고 이 클래스에서 객체를 생성하며, 클래스에 메소드와 속성을 추가하는 방법과 자바 접근 제어자와 다른 수식어를 설명한다. 이외에도 추상 클래스와 인터페이스, 배열, 컬렉션, 예외도 다루며 스레드와 람다 같은 고급 기능도 설명한다.
4장, ‘자바 프로그래밍’에서는 자바 언어로 간단한 웹 서비스를 제작하는 방법을 단계별로 설명한다. 이때 이클립스(Eclipse) IDE와 그래들(Gradle) 빌드 도구, 스파크자바(SparkJava)와 같은 프로그래밍 라이브러리(마이크로 웹 서비스 프레임워크), JUnit 단위 테스트 프레임워크를 사용한다.
5장, ‘스칼라’에서는 하이브리드 함수형 프로그래밍과 객체지향 프로그래밍 언어 스칼라(Scala)에 대해 설명한다. 스칼라를 설치하는 절차와 언어에 번들로 포함된 대화명 셀의 사용법도 설명한다. 대화형 셀을 사용하면 명시적으로 코드를 컴파일하지 않고도 스칼라 코드를 작성하고 동적으로 실행할 수 있다. 스칼라에서는 객체지향과 함수형 프로그래밍을 모두 다룬다.
6장, ‘스칼라 프로그래밍’에서는 인기 많은 아카(Akka) 툴킷으로 구동하는 간단한 콘솔 기반 애플리케이션을 작성하는 방법을 순차적으로 설명한다. 아카는 최신의 멀티 코어 프로세서를 최대한 활용하는 확장 가능한 애플리케이션에 특화된 툴킷이다. 액터 기반 시스템과 같은 아카와 관련된 많은 개념도 간단히 다룬다. 프로젝트를 빌드하기 위해 스칼라 빌드 툴(SBT, Scala Build Tool)을 사용하고, 단위 테스트를 작성하는 데는 스칼라테스트(ScalaTest) 라이브러리를 사용한다.
7장, ‘클로저’에서는 리스프(Lisp)에서 영감을 얻은 동적 함수형 프로그래밍 언어인 클로저(Clojur)의 기본 원리를 설명한다. 클로저는 객체지향 프로그래밍 언어가 아니다. 스칼라와 같이 클로저도 다양한 예제를 작성하는 데 사용 가능한 대화형 셸을 포함한다. 멀티 스레드 애플리케이션에서 상태를 처리하는 기술인 에이전트도 다룬다.
8장, ‘클로저 프로그래밍’에서는 두 개의 작은 프로젝트에 대한 단계별 가이드를 제공한다. 첫 번째 프로젝트는 모나드(monad)를 기반으로 하는데, 모나드는 기능적 프로그래밍 언어, 특히 리스프에서 흔히 사용하는 기법이다. 두 번째 프로젝트는 클로저를 위한 마이크로 웹 프레임워크 중 가장 인기 있는 루미너스(Luminus)로 구동되는 웹 애플리케이션이다. 두 프로젝트를 빌드하는 데는 라이닌겐(Leiningen) 빌드 도구를 사용한다.
9장, ‘코틀린’에서는 젯브레인의 정적 자료형 프로그램 언어인 코틀린(Kotlin)을 설명한다. 안전한 null 처리를 보장하는 코틀린의 자료형 시스템을 설명하고, 데이터 클래스와 람다, 인라인 함수와 같은 다른 기능을 다룬다. 코틀린에서의 절차적 프로그래밍도 설명한다.
10장, ‘코틀린 프로그래밍’에서는 자바FX(JavaFX) 툴킷을 사용해서 GUI 기반의 데스크톱 애플리케이션을 제작하는 절차를 단계별로 설명한다. 프로젝트는 아파치 메이븐(Apache Maven)을 사용해 빌드하고, 버그를 찾고 수정하는 데 이클립스 IDE 디버거를 사용한다.
11장, ‘그루비’에서는 JVM에 등장한 첫 번째 대체 언어 중 하나인 동적 프로그래밍 언어 그루비(Groovy)를 다룬다. 그루비는 기본적으로 동적 언어지만, 정적 자료형 코드도 컴파일할 수 있다. 이 장에서는 두 가지 경우를 모두 설명한다. 광범위한 내장 클래스 라이브러리인 그루비 개발 키트도 함께 살펴본다. 그루비 개발 키트는 그루비 언어 배포 시에 함께 배포된다.
12장, ‘그루비 프로그래밍’에서는 JDBC(Java Database Connectivity) 표준을 사용해서 내장 데이터베이스 관리 시스템으로부터 데이터를 추출하고 그루비 개발 키트의 클래스를 사용해서 XML을 생성하는 그루비 기반의 웹 서비스를 제작하는 절차를 설명한다. 웹 서비스는 Vert.x 프레임워크를 사용해서 구동한다.
부록 A, ‘다른 JVM 언어’에서는 종종 비주류 언어라 부르는 다섯 가지의 다른 JVM 기반 언어, 오라클 나스호른(자바스크립트), 자이썬(파이썬), 제이루비(루비), 프레게(하스켈), 레드햇의 정적 자료형 언어인 실론(Ceylon)을 다룬다.
목차
목차
- 1장. 자바 가상 머신
- JVM 구현체
- 왜 JVM에서 개발하는가?
- 시장 변화에 적응한 JVM
- 자바 클래스 라이브러리
- 생태계
- 일반 사용 사례
- 웹 애플리케이션
- 빅데이터
- IoT
- JVM 개념
- 가상 머신
- JIT 컴파일러
- 기본형 데이터 타입
- 클래스
- 참조 타입
- 가비지 컬렉터
- 하위 호환성
- 빌드 도구
- 자바 에디션
- 자바 SE
- 자바 EE
- 예제
- 자바 ME
- JVM의 다른 언어들
- 자바 외에 다른 언어를 선택하는 이유
- 자바는 매우 장황한 언어다
- 프로젝트에 JVM 언어 혼용하여 사용하기
- 다른 언어로 단위 테스트 작성하기
- 요약
- 2장. 자바 가상 머신에서 개발하기
- JDK
- JDK 설치
- JDK 들여다보기
- JRE
- 패키지를 포함한 클래스 구조
- 패키지란?
- 패키지 이름 정하기
- 패키지 이름 예제
- 정규화된 클래스 이름
- 자바 클래스 라이브러리
- 자바 클래스 라이브러리 구조
- 패키지 개요
- java.lang 패키지의 기본 클래스
- 컬렉션 API-java.util.ArrayList와 java.util.HashMap
- 커맨드 라인에서 JVM 애플리케이션 실행
- 적어도 하나 이상의 클래스에 정적 main() 메소드 구현
- 클래스 파일에 필요한 디렉터리 구조
- JVM 인스턴스를 위한 클래스경로 설정
- JAR 파일에 클래스 파일 배치하기
- java 명령어로 프로그램 실행하기
- JVM에서 실행하는 프로젝트 실무 사례
- 이클립스 IDE
- 이클립스 IDE 다운로드
- 이클립스 IDE 설치
- 요약
- JDK
- 3장. 자바
- 자바에서의 OOP
- 클래스 정의
- 클래스 접근 제한자
- Final 클래스 제한자-클래스 잠금
- 패키지 정의
- 클래스 가져오기
- 클래스 멤버, 변수와 메소드 추가하기
- 제한자
- 생성자와 종료자
- 상위형변환과 하위형변환
- 자바 코드 작성
- 연산자
- 조건 체크
- POJO
- 배열
- 제너릭과 컬렉션
- 루프
- 스레드
- 람다
- 스타일 가이드
- 퀴즈
- 요약
- 자바에서의 OOP
- 4장. 자바 프로그래밍
- 이클립스 IDE 구성
- 자바로 웹 서비스 제작하기
- 이클립스에서 새로운 그래들 프로젝트 생성하기
- 그래들 빌드 파일 수정
- 프로젝트 빌드
- 백엔드 클래스 작성
- 요약
- 5장. 스칼라
- 스칼라 설치
- 스칼라의 REPL 셸
- 함수형 vs 명령형 프로그래밍
- 스칼라 언어 문법과 규칙
- 정적 타입 언어
- 가변 변수와 불변 변수
- 기본 스칼라 타입
- Strings
- 스칼라에서의 OOP
- 패키지와 하위패키지 선언
- 멤버 가져오기
- 클래스 정의
- 인스턴스 변수와 메소드
- 생성자
- 클래스 확장
- 메소드 오버로딩
- 추상 클래스
- 트레이트
- 싱글턴 객체
- 연산자 오버로딩
- case 클래스
- 스칼라의 표준 라이브러리
- 제너릭
- 컬렉션
- XML 처리
- 스칼라에서의 함수형 프로그래밍
- 함수를 사용해서 컬렉션 검색하기
- 맵과 필터, 리듀스 디자인 패턴
- 커링
- 퀴즈
- 요약
- 6장. 스칼라 프로그래밍
- 이클립스 플러그인 형태의 스칼라 IDE
- 이클립스에 스칼라 IDE 설치
- 스칼라 IDE 퍼스펙티브 전환
- SBT
- SBT 설치
- SBT 기반 이클립스 IDE 프로젝트 생성
- 스칼라 컴파일러(scalac)
- 아카 프로젝트 생성
- SBT 빌드 파일에 아카 의존성 추가
- 스칼라 IDE 프로젝트 업데이트
- 아카 개념
- 첫 번째 아카 액터 QuotesHandlerActor 생성
- 메시지 생성
- ScalaTest 기반 단위 테스트 작성
- 메시지 처리기 구현
- QuotePrinterActor 생성
- 메인 애플리케이션
- 요약
- 이클립스 플러그인 형태의 스칼라 IDE
- 7장. 클로저
- 클로저 설치
- 시작 스크립트 작성
- 클로저 대화형 셸(REPL)
- 클로저 언어
- 문법
- 표현식
- 변수 정의
- 함수 정의
- 데이터 구조
- 자바 클래스와 동작하기
- deftype과 defrecord를 가진 간단한 자바 클래스 생성
- 에이전트로 상태 관리하기
- 에이전트 예제
- 스타일 가이드
- 퀴즈
- 요약
- 클로저 설치
- 8장. 클로저 프로그래밍
- 이클립스 IDE의 카운터클락와이즈 플러그인
- 카운터클락와이즈 플러그인 설치
- 자바 퍼스펙티브로 변환하기
- 라이닌겐 빌드 도구
- 라이닌겐 설치
- 클로저에서 실행 가능한 프로그램 작성
- 라이닌겐 없이 클래스 파일 컴파일
- 라이닌겐으로 프로젝트 컴파일
- 새로운 카운터클락와이즈 프로젝트 생성
- 이클립스 IDE 안의 클로저 REPL
- 프로젝트의 클로저 버전 변경
- 의존성 추가
- 테스트 주도 개발을 통해 모나드 탐구
- 루미너스 웹 프레임워크
- 루미너스 프로젝트 생성
- 카운터클락와이즈에서 프로젝트 가져오기
- 루미너스 프로젝트 탐색
- 웹 애플리케이션에 페이지 추가
- 요약
- 이클립스 IDE의 카운터클락와이즈 플러그인
- 9장. 코틀린
- 코틀린 설치
- 실행 스크립트
- 코틀린 REPL 대화형 셸
- 코틀린 언어 기본
- 로컬 변수 정의
- 함수 정의
- 코틀린 유형
- 반복
- 코틀린에서 OOP
- 패키지 정의
- 멤버 가져오기
- 클래스와 생성자 정의
- 클래스에 멤버 추가
- 상속
- 인터페이스
- 가시성 제한자
- 싱글턴과 컴패니언 객체
- 데이터 클래스
- 람다와 인라인 함수
- 코틀린에서 절차적 프로그래밍
- 스타일 가이드
- 퀴즈
- 요약
- 10장. 코틀린 프로그래밍
- 이클립스 IDE를 위한 코틀린 플러그인
- 이클립스 IDE를 위한 코틀린 플러그인 설치
- 코틀린 퍼스펙티브로 전환
- 아파치 메이븐
- 아파치 메이븐 설치
- 사전에 구성된 코틀린 스타터 키트 다운로드
- 이클립스 IDE에 프로젝트 가져오기
- pom.xml 빌드 파일 탐구
- 이클립스에서 빌드 파일 변경
- 자바FX 데스크톱 GUI 애플리케이션 제작
- 프로젝트 준비
- 실행 가능한 애플리케이션 제작
- 확장 함수 작성
- 레이아웃 페인
- BorderPane 기반 레이아웃 구현
- 애니메이션 구현
- 프로그램 디버깅
- 요약
- 이클립스 IDE를 위한 코틀린 플러그인
- 11장. 그루비
- 그루비 설치
- 그루비콘솔과 그루비셸
- 그루비 언어
- 그루비에서 객체지향 프로그래밍
- 그루비 개발자 키트(GDK)
- 그루비 문자열(GStrings)
- 컬렉션
- 동적, 정적 프로그래밍
- 메타 프로그래밍
- 그루비에서 정적 프로그래밍
- 퀴즈
- 요약
- 그루비 설치
- 12장. 그루비 프로그래밍
- 그루비 이클립스 플러그인 설치
- 자바 퍼스펙티브 변환
- 아파치 아이비와 IvyDE
- 이클립스 IDE용 아파치 IvyDE 플러그인 설치
- 프로젝트 생성과 구성
- 새로운 그루비 이클립스 프로젝트 생성
- 아이비를 위한 ivy.xml 파일 생성
- JDBC(Java Database Connectivity)
- H2 데이터베이스
- 메모리 내 데이터베이스 생성
- 마크업빌더를 사용한 XML 생성
- SQL 기반으로 XML 생성
- Vert.x 마이크로서비스 플랫폼..
- 아이비에 Vert.x 의존성 추가
- 웹 서비스 생성
- 요약
- 그루비 이클립스 플러그인 설치
- 부록 A. 다른 JVM 언어
- 오라클 나스호른
- JVM 기반 프로젝트에 나스호른 포함시키기
- 나스호른 실행
- 자이썬(파이썬)
- C파이썬과 자이썬의 차이
- 자이썬 실행
- 제이루비(루비)
- 루비 온 레일즈와 제이루비
- 제이루비 실행
- 프레게(하스켈)
- 프레게에서 자바 코드 호출
- 프레게 실행
- 실론
- 실론의 모듈 시스템
- 실론 실행
- 요약
- 오라클 나스호른