導入
リファクタリングは、既存のコードを改善し、可読性や保守性を向上させる手法です。特に中級エンジニアにとって、実務で遭遇する具体的なシチュエーションに基づくリファクタリングの理解は重要です。本記事では、リファクタリングの実践的なアプローチとその効果を具体的なコード例を通じて探ります。
教科書レベルの解説(リファクタリング)
重要な概念の整理
リファクタリングは単なるコードの修正ではなく、システム全体の設計を見直す機会でもあります。特に、コードの重複や複雑性を減少させることが主な目的です。中級レベルのプログラマーは、リファクタリングを通じて、コードの再利用性やテストの容易さを向上させることが求められます。
コード例(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();
}
}
コードの行ごとの解説
- Orderクラスは、アイテムのリストを保持し、合計金額を計算するメソッドを提供します。
- calculateTotalメソッドは、全てのアイテムの価格を合計するロジックを含んでいます。
- getOrderSummaryメソッドは、アイテムの名前と価格を文字列としてまとめます。
解説編
このコード例では、リファクタリングのポイントとして「SRP(単一責任の原則)」に注目します。Orderクラスは、合計金額の計算と注文の概要を生成するという2つの異なる責任を持っています。これにより、クラスが肥大化し、変更やテストが困難になる可能性があります。リファクタリングとして、これらの機能を別のクラスに分割することで、各クラスが単一の責任を持つように改善できます。
まとめ
- リファクタリングは、コードの可読性と保守性を向上させる重要な手法です。
- SRPを意識した設計が、クラスの責任を明確にし、コードの品質を高めることにつながります。