『Java本格入門』で、Javaの知見を体系的に濃縮する

Javaのプログラムを書いているとき、「これはベストな書き方なのか?」という疑問は常にあると思います。ネットで調べる、レビューを受けるといった、確認方法はいくつかあると思いますが、その一つが本書になると思います。

Java本格入門 ~モダンスタイルによる基礎からオブジェクト指向・実用ライブラリまで

Java本格入門 ~モダンスタイルによる基礎からオブジェクト指向・実用ライブラリまで

表紙の情報量が非常に多いのが特徴です。

対象読者層

「はじめに」に書いてあるのでほぼ合っていると思います。

オススメな人

  • Javaをある程度お仕事で書いてきた

  • 体系的に学びなおしたい

お仕事で書いてきたというのは、実際に稼働するコードを書いた。また、他人の書いたコードを読んだり直したりしたことがある、という意味です。

向かない人

プログラミング経験がほとんどない人

特徴

トピックは多岐にわたりますが、全般的にめちゃくちゃ絞り込んであります。「本格入門」であって入門書ではないので、ある程度文法を分かっている前提で進みます。

また、筆者のこれまでの経験を生かして、「結局どうすればいいか」が書いてあります。

例えば、インタフェースのデフォルト実装をとりあげます。

抽象クラスとどのように使い分けるのかという疑問について、「インタフェースのデフォルト実装は基本的に使わなくてよい」と簡潔に答えています。

理由としては、

デフォルト実装は、Javaの「過去のバージョンとの互換性*1」のために生まれた

という、Javaの歴史を感じるものになっています。納得感のある説明になっていると思います。

デザインパターン

GoFデザインパターンは23種類もあって身に着けるのが大変ですが、本書では9つに絞って紹介しています。

結城『デザインパターン入門』に比べると、書中ですべてのコードを載せているわけではありませんが、実際に使いそうな例になっています。

Abstract Factoryパターンでの呼び出し側のコードは以下の通りです。

public class SampleMain {
    public static void main(String... args) {
        String env = "PostgreSQL";
       
        Factory factory = createFactory(env);
        Connection connection = factory.getConnection();
        Configuration configuration = factory.getConfiguration();
    }

    private static Factory createFactory(String env) {
        switch(env) {
            case "PostgreSQL":
                return new PostgreSQLFactory();
            case "MySQL":
                return new MySQLFactory();
            default:
                throw new IllegalArgumentException(env);
        }
    }
}

ただ、個別のパターンの解説の詳しさは、結城本のほうが上回っています。例えば、このパターンでは「工場」を増やすのは簡単です。OracleFactoryは既存の実装に影響を与えずに追加できます。一方、新しい「部品」、HogeSettingsを追加しようとすると、すべての既存の「工場」に影響が出てしまうので大変です。そのような説明が結城本に記載されています。

本書でも記載はありますが、個人的には結城本を読んで初めてちゃんと理解できた印象です。「わかっている人にはこれくらいの説明で十分」という感覚ですかね。

記載のないもの

後半で、デザインパターンや各種ライブラリの説明がありますが、基本的には各クラス内で、どのように書くべきかという説明が中心になっています。設計的な話はあまりないのかな*2という印象です。

まとめ

ブログタイトルに「濃縮する」と書いた通り、コンパクトに必要な記載を詰め込んでいるのが本書の良いところだと思います。

余談ですが、私は6年くらい前に筆者たちが所属するアクロクエストテクノロジー株式会社に1日インターンに行ったことがあります。当時は1ミリもプログラムを書いたことがなかったはずなのになんで行ったのか全く覚えていませんが、こういった形でまた巡り合うことになるとは、不思議な縁を感じます。

*1:具体的には7と8

*2:一定レベル以上のクラス設計は本書の対象外という記載もある