ISBN 9784621303252
Effective Java
概要
JavaのイデオムとAPIデザインからベストプラクティスを体得する
想定読者
Java中級〜上級エンジニアで、より高品質なコードを書くために設計・実装のベストプラクティスを体系的に習得したい人
こんな人には向いていない
- Javaの基本文法を学び始めたばかりの初学者には、前提として求められるOOPの理解が不足していると消化が難しい
- Python・Go・RustなどJava以外の言語を主戦場とするエンジニアには、言語固有のイデオムが多く直接適用できない項目が多い
- すでにEffective Javaをチームのコードレビュー基準として運用している上級チームには、第3版固有の差分(ラムダ・ストリーム章)以外は復習色が強い
この本で身につくこと
- try-with-resourcesを使ってリソース解放漏れをコンパイラに保証させる実装ができる
- ラムダ・ストリームAPIを活用した関数型スタイルのデータ処理コードを書ける
- ジェネリックスの型安全な設計でコンパイル時に型エラーを検出できる
- enumと@Overrideアノテーションなど、Java固有のイデオムを正しく適用できる
- 並行性設計のリスク(可視性・原子性の欠如)を認識し、スレッドセーフなコードを書ける
- Javaシリアライズの危険性を理解し、JSON等の代替手段を選択する判断ができる
ハイライト(外部からの言及)
多くのデザインパターンとイデオムを示すコード例を含んでおり、プログラミング言語Javaの正しい理解と、簡潔で明瞭で正確なソフトウェアの設計に役立つでしょう — 出典
著者が本書の位置づけを端的に示した記述。コード例ベースで学べる実践性が本書の核心
Javaは大きく複雑になり、並列実行から、繰り返し、各種データの表現まで、多くの事柄に対して多様な抽象化を持ち合わせています。この大きさと複雑さを考えると、最新のベストプラクティスの指導書はなおさら重要です — 出典
Java 8以降の複雑化を背景に、第3版が改訂された理由が端的に示されている
読了後にできること
Before(読む前): 例外時のリソース解放にtry-finallyを手書きしており、ネストが深くなるとclose()漏れのリスクを抱えていた
After(読み終えた後): try-with-resourcesのイデオムで記述量を減らしつつ、リソース解放をコンパイラに保証させられる
章立て
第2章 オブジェクトの生成と消滅
Builderパターン・シングルトン・DIの基礎になる章。チーム標準化を進めたい場合に最初に読む価値がある
第3章 すべてのオブジェクトに共通のメソッド
equals/hashCode/toStringの正しい実装はコードレビューで頻出。早めに押さえておきたい
第7章 ラムダとストリーム
第3版の新規追加章。Java 8以降を業務で使う人は本書中で最も即効性が高い
第11章 並行性
ExecutorService/synchronized等の前提知識がないと消化が難しい。必要になったタイミングで集中して読む
第12章 シリアライズ
Javaシリアライズの危険性と代替手段を論じる章。レガシーシステム保守担当者に特に関連が高い
関連記事 / 参考情報
- 新人さんにすすめる有益な技術書達 2022春 — Java・設計・インフラを横断する新人エンジニア向け推薦書リスト。Effective Javaを中核に位置づけている
- インフラエンジニアとしてなんとなく役立っていそうな書籍をリストアップする — インフラ系エンジニアの目線から、言語を問わず読んでおくべき設計書として言及
- try-finallyよりもtry-with-resourcesを使おう — Effective Java 項目9を根拠に、try-with-resourcesの実装メリットをコード例で解説
- 10年前はGoFのデザインパターン本を読んで何やらわかった気になっていました — GoFパターンとEffective Javaの関係を振り返り、設計力の習熟ステップを整理している
- Code Smell とリファクタリング技法について調べてみた — リファクタリング文脈でEffective Javaのイデオムを参照しながらCode Smellへの対処法を解説
- メソッドをオーバーライドする時にOverrideアノテーションをつけるべき理由 — Effective Java 項目40を根拠に、@Override省略によるバグリスクを実例とともに解説
- 新卒1年目エンジニアが入社してから読んだ本 — 1年目でEffective Javaを読んだ体験談。難度と得られた気づきが当事者視点で語られている
学習のヒント
- 第7章(ラムダとストリーム)は第3版の新規追加章であり、Java 8以降のコードを日常的に書く人には本書中で最も即効性が高い。Stream APIに慣れた後でも見落としがちなイデオムが凝縮されており、他章に先行して読む価値がある
- 第2章・第3章はコードレビューで頻出する設計判断の根拠になる。チームのコーディング標準を整備したいエンジニアリードは、この2章から始めると議論が言語化しやすい
- 全90項目を通読するより、現在の業務や学習で引っかかっている設計判断をインデックスから逆引きする辞書的な使い方が定着しやすい。通読後は手元に置いてレビュー時に参照する形が実務では多く報告されている
- 第11章(並行性)はExecutorService・synchronizedなどJava並行処理の基礎があることを前提にしている。この分野に不安がある場合は「Java並行処理プログラミング」を先に読んでから戻ると理解速度が上がる
前提知識
- Javaの基本文法(クラス・継承・インタフェース・例外の実装経験)
- オブジェクト指向の基本概念(カプセル化・継承・ポリモーフィズム)
- Java 8以降のラムダ式・Stream APIの基本的な書き方(第7章を効果的に読む前提として)
次に読む本
リファクタリング 既存のコードを安全に改善する(第2版)
Effective Javaのイデオムを、より広いリファクタリング技法の文脈で実践に接続できる
Java並行処理プログラミング
Effective Java第11章(並行性)の前提となる並行処理の基礎と実践パターンを体系的に補完できる
Clean Code アジャイルソフトウェア達人の技
Effective Javaで扱うJava固有のイデオムを、言語横断的なクリーンコードの原則として広げることができる
出版社による内容紹介
Javaプログラマーにとって必読の定番書『Effective Java』の改訂第3版。 この第3版では、Java 8で新たに導入されたラムダとストリームに関する章が新規に追加されたほか、オプショナル、インタフェースでのデフォルトメソッド、try-with-resources文、@SafeVarargsアノテーション、モジュールなどの機能を扱った項目を含み、第2版の78項目から90項目に増加しています。 今日ではJavaは大きく複雑になり、並列実行から、繰り返し、各種データの表現まで、多くの事柄に対して多様な抽象化を持ち合わせています。 この大きさと複雑さを考えると、最新のベストプラクティスの指導書はなおさら重要です。 本書は多くのデザインパターンとイデオムを示すコード例を含んでおり、プログラミング言語Javaの正しい理解と、簡潔で明瞭で正確なソフトウェアの設計に役立つでしょう。 日本語版によせて 訳者まえがき Effective Javaによせて まえがき 謝辞 第1章 はじめに 第2章 オブジェクトの生成と消滅 第3章 すべてのオブジェクトに共通のメソッド 第4章 クラスとインタフェース 第5章 ジェネリックス 第6章 enumとアノテーション 第7章 ラムダとストリーム 第8章 メソッド 第9章 プログラミング一般 第10章 例外 第11章 並行性 第12章 シリアライズ 付録 第2版に対応する項目 参考文献 索引
この本がどの学習段階で役立つかは、 関連する ロードマップ から確認できます。