Java中級

中級 Javaで学ぶリファクタリング|解説編

導入

リファクタリングは、既存のコードを改善し、可読性や保守性を向上させる手法です。特に中級エンジニアにとって、実務で遭遇する具体的なシチュエーションに基づくリファクタリングの理解は重要です。本記事では、リファクタリングの実践的なアプローチとその効果を具体的なコード例を通じて探ります。

教科書レベルの解説(リファクタリング)

重要な概念の整理

リファクタリングは単なるコードの修正ではなく、システム全体の設計を見直す機会でもあります。特に、コードの重複や複雑性を減少させることが主な目的です。中級レベルのプログラマーは、リファクタリングを通じて、コードの再利用性やテストの容易さを向上させることが求められます。

コード例(Java)


public class Order {
    private List items;

    public Order(List items) {
        this.items = items;
    }

    public double calculateTotal() {
        double total = 0;
        for (Item item : items) {
            total += item.getPrice();
        }
        return total;
    }

    public String getOrderSummary() {
        StringBuilder summary = new StringBuilder();
        for (Item item : items) {
            summary.append(item.getName()).append(": ").append(item.getPrice()).append("\n");
        }
        return summary.toString();
    }
}

コードの行ごとの解説

  1. Orderクラスは、アイテムのリストを保持し、合計金額を計算するメソッドを提供します。
  2. calculateTotalメソッドは、全てのアイテムの価格を合計するロジックを含んでいます。
  3. getOrderSummaryメソッドは、アイテムの名前と価格を文字列としてまとめます。

解説編

このコード例では、リファクタリングのポイントとして「SRP(単一責任の原則)」に注目します。Orderクラスは、合計金額の計算と注文の概要を生成するという2つの異なる責任を持っています。これにより、クラスが肥大化し、変更やテストが困難になる可能性があります。リファクタリングとして、これらの機能を別のクラスに分割することで、各クラスが単一の責任を持つように改善できます。

まとめ

  • リファクタリングは、コードの可読性と保守性を向上させる重要な手法です。
  • SRPを意識した設計が、クラスの責任を明確にし、コードの品質を高めることにつながります。