본문 바로가기

book

기본기가 탄탄한 자바 개발자 (제2판)

 

책이 많이 두껍습니다. 책을 받는 순간 많은 내용을 내것으로 만든다면 자바에 대해서 정말 책의 부제처럼 

기본기가 탄단한 개발자가 될 것 같은 생각이 듭니다.

 

이 책은 큰 특징은 아래와 같다고 생각이 듭니다.

  • Java에 다양한 버전 (LTS)기준으로 각각의 변경점을 구체적으로 설명하고 있습니다.
  • Java의 문법에만 주안점을 두고 설명하는 것이 아니고, 실제 Java를 활용해서 사용하기 위한 필요한 모든것들이 언급됩니다.
    • 빌드, 테스트코드, JVM등에 다양하게 JAVA를 활용함에 부족함없는 구성입니다.
  • 샘플코드 및 문법과 어떠한 장단점, 언제 사용하면 좋을지 잘 설명되어져 있습니다.

 

■ JAVA LTS 버전별 특징에 대해서 살펴보기

https://www.oracle.com/kr/java/technologies/java-se-support-roadmap.html

 

Oracle Java SE Support Roadmap | Oracle 대한민국

Oracle provides this Oracle Java SE Support Roadmap, to help you understand maintenance and support options and related timelines. If you are looking for the latest free JDK release from Oracle under an open source license, please see jdk.java.net, or a fr

www.oracle.com

 

 

Java버전에 대해서 사용을 한다면  LTS(Long Term Support) 장기지원버전을 선택해야 합니다.

지금 Java에서는 8, 11, 17 버전중에 선택을 해야 합니다.

 

이 책은 무조건 최신 버전을 사용하는 것을 사용을 권유하는 것이 아니고, 우리가 사용하는 버전을 기준으로 고려하고 있는 

Java버전을 사용하기 위해서 고려해야 하는 부분이 주로 언급됩니다.

 

이 책을 통해서 Java버전별로 제공하는 특징을 이해하기 매우 좋습니다.

 

자바 8부터 17까지 주요 기능과 변화를 체계적으로 설명

람다표현삭, 스트림 API, 모듈 시스템, text블록 등 최신 기능들을 실제 코드에 어떻게 적용할지 설명

· 11에서 작은 변경 사항

  - 컬렉션 팩토리 (JEP 213)

  - 엔터프라이즈 모듈 제거 (JEP 320) : 예전에 J2EE모듈에 추가된 사항이 제거됨

  - HTTP/2 

  - 단일 소스 코드 프로그램 (JEP 330) : 파이션, 루비 같은 스크립트 언어 형태로 사용자 경험 제공

 

· 자바 모듈

모듈이 도입된 이유는 복잡한 의존성으로 자바 애플리케이션의  jar지옥 의존성을 해결하기 위함입니다.

java9부터 도입된 새로운 개념입니다. java8을 사용하시는 경우에는 새롭게 추가된 개념입니다.

모듈에 대해서 어떤 구조를 가지고 플랫폼, 애플리케이션 측면에서 모듈을 어떻게 빌드하고 사용하는지 내용을 설명합니다.

모듈에 대해서 사용법 및 내보내기 하고, 의존적인 모듈을 선언하는 방법등이 설명되어 집니다.

 

 

 

다증 릴리스 JAR 를 사용해서 최신의 모듈식 JVM 모드에서 작동할수 있는 라이브러리를 만들수 있습니다.

 

· JAVA 17

주요내용으로는 

Text블록, switch 표현식, record, sealed타입이 설명됩니다

 

text의 경우, python, javascript등에서 주로 사용하는 블록단위 처리를 가능하게 처리하였습니다.

record 클래스는 기존에 애플리케이션에서 도메인 클래스를 더 명확하고 작게 만들수 있으며

많은 수작업 코딩 구현을 제거하는데 도움이 됩니다. record관련 내용에 많은 지면을 사용해서 코드를 통해서 예제를 제공합니다.

 

이렇게 part1에서는 자바 11, 17에서 주요 변화된 기능 스팩을 코드 기준으로 설명을 하면서, 

기본적인 개념 및 문법을 학습할수 있는 내용으로 구성되어 있습니다.

 

 

■ JVM에 대해서 좀 더 알아보기

이 책의 장점은 java의 신규 기능 설명에 대한 부분만 있는 것이 아니라, 실제 동작원리를 소개한다는 점이다.

JVM을 통해서 클래스 로딩 부터 살펴봅니다.

 

실제 동작하는 자바 클래스 파일의 내부를 들여다 보고 바이트 코드가 담고 있는 내용을 살펴보면서

강력한 디버깅 능력을 학습합니다. javap를 이용합니다.

 

클래스 로딩, 리플랙션, 클래스 파일의 구조, JVM바이트코드에 대해서 명확한 개념을 살펴보고 이해할수 있습니다. 

기본이라는 것이 실제 동작원리를 파악하는 것인데, 평소에 잘 접하지 않은 분들은 매우 좋은 레퍼런스가 될수 있습니다.

 

 

 

load, store, Invoke 오퍼레이션 코드에 대해서 정의하고 각각의 인수, 스택 레이아웃에 대해서 설명합니다.

 

 

 

자바개발자가 갖추어야할 기술중에 매우 중요한 부분이지만, 어려움이 있습니다.

리플렉션은 객체를 쿼리하거나 내부를 조사해서 런타임에 해당 객체의 기능을 발견하고 사용하는 기능입니다.

 

 

 

 

· 자바 동시성 라이브러리

java의 동시성을 지원하기 위해서 java.util.concurrent 패키지를 이용합니다.

동시성을 처리하기 위해서 빌딩 블록의 도구 상자를 사용하는 방법을 잘 정리하고 있습니다.

우선 동시성 처리 동작의 기초적인 내용으로 

- 동시성 이론, 블록 구조 동시성, 동기화, 자바 메모리 모델, 바이트 코드에서의 동시성 지원을 통해서

기본적인 이론을 설명합니다.

동시성과 멀티스레드의 대한 부분, 스레드의  상태 모델 및 동기화 예시 등이 있습니다.

 

이어서 관련 클래스 등을 있습니다.

 - 아토믹 클래스

 - 잠금 클래스

 - 동시 데이터 구조

 - BlockingQueues

 - Futures와 CompletableFuture

 - Executors

의 사항을 다루고 있습니다.

 

■ 다른 JVM언어

JVM에서 동작되는 다양한 언어들이 제공되고 있습니다.

그중에서도 코틀린은 안드로이드 및 Spring개발에도 많이 사용되고 있습니다.

 

다양한 언어에서 각각의 특징이 있습니다.

- 인터프리트 vs 컴파일

- 동적 타이핑 vs 정적 타이핑

- 명령형 언어 vs 함수형 언어

- 재구현 vs 원래 언어

 

JVM을 사용하는 환경에서 다양한 언어들이 시도 되고 있습니다.

java에서는 재컴파일이 번거롭다. 

엄격한 문법을 가지고 있다.

정적 타입 지정은 유연성을 제한할수 있다.

배포는 무거운 과정이다.

이러한 부분 때문에 JVM환경에서 구현이 가능한 언어중에 코틀린, 클로저 가 대표적입니다.

 

코틀린의 주요 문법에 대해서 코드 및 주석을 통해서 java와 다른 부분을 설명합니다.

 

 

 

■ 그래들과 메이븐을 사용한 빌드 & 도커 이용하기

책에서 자바를 실제 빌드와 디플로이먼트를 소개하는 것도 매우 인상적입니다.

현재 가장 많이 사용하고 있는 빌드 도구인 메이븐과 그래들을 살펴봅니다.

 

기본적으로 빌드도구를 이용하는 방법 이외에 컨테이너에서 자바 실행하는 방법까지도 설명됩니다.

 

maven에서 사용하는 pom.xm파일에 대해서 구문, mainfest 설정  및 다른 의존성 주입에 대해서 언급됩니다.

gradle 도 동일하게 동일하게 의존성 및 작성법, 동작방식에 대해서 다룹니다.

 

아래 사례는 그래들을 이용해서 빌드를 하고 도커로 빌드하는 환경을 만드는 부분입니다.

 

이어서 ks8(쿠버네티스)환경에서도 간단하게 구성하는 방법도 있습니다.

 

■ 테스트 기본 

java와 함께 꼭 필요한 테스트에 대해서도 함께 있는것도 자바를 잘 활용할수 있습니다.

단순히 테스트를 위한 JUnit4에서 5로 변경에 대한 기술적인 부분만이 아니라

테스트 하는 이유, 테스트 방법, 테스트 중싱 개발, 테스트 더블등에 대해서 전반적으로 다룹니다.

 

Java책이지만, 이러한 꼭 필요한 테스트 관련 내용이 있다는 것은 자바의 기본기를 탄탄하게 하기 위해서는

테스트가 반드시 필요하다는 역설적인 부분을 말하는 것 같습니다.

 

더미 객체, 스텝 겍체, 페이크 객체, 목 객체등을 활용한 방법이 있습니다.

 

 

 


■ 추가로 Java8의 스트림에 대해서 부록으로 제공하는 것도 기억에 남습니다.

java8에서 스트림을 많이 사용하는데, 아래와 같은 목차 처럼 상세하게 필요한 요약된 내용을 제공합니다.