Javaコーディング規約・実装注意事項整理

Javaにおけるコーディング規約・実装注意事項整理

一般的なJavaのコーディング規約はよくGoogleとかにまとめられているのですが、いざ実際現場に適用すると多すぎて担当者が理解しきれないので、最低限を整理してみました。

観点として,全て共通する一般的な観点とクラス設計,エラー処理,マルチスレッド,性能と分けています。

参考書籍

こちらの本が良い本だったので影響を受けて自分でもまとめようと思いまとめました。

良いコード/悪いコードで学ぶ設計入門―保守しやすい 成長し続けるコードの書き方

一般的観点

  • メソッドやクラスの役割や責務を明確にし、シンプルな設計を心掛けること
  • インデントやスペース、命名規則などのコーディング規約に従い、一貫性のあるコードを書くこと
  • マジックナンバー(直接的な数値)を使わず、意味のある定数や列挙型を使用すること
  • メソッドやクラスの長さを適切に制御し、読みやすさを向上させること
  • 分岐処理では条件分岐を漏らさず記載し、必ずElse節を書くこと
  • 固定値はシステム設定の外部ファイルに定義し、リファクタリングや設定変更が容易にできるようにすること
  • データベースアクセスやネットワーク通信などの外部リソースにアクセスする際は、適切なエラーハンドリングを行い、リトライやロールバックなどのリカバリー処理を実装すること

クラス設計観点

  • メソッドの入力引数や戻り値の型には具体的なクラスやインターフェースを使用し、できる限り抽象化すること
  • 外部からのインプット引数/戻り値はnullである可能性を考慮し、適切なnullチェックを行うこと
  • 不変な変数には極力final修飾子を付け、再代入を防ぐこと

エラー処理観点

  • Catchに指定するExceptionは上位クラスのExceptionにまとめないこと
  • Catchした例外は必ずログに出力し、上位にThrowする際はCatchした例外を保持してThrowすること

マルチスレッド観点

  • マルチスレッド環境での競合状態を避けるために、適切な同期やロックを使用すること
  • 変数のスコープを意識して使用すること(サーブレット定義の変数はシングルトンとなる)
  • 使用するJavaライブラリの処理がスレッドセーフかどうか意識して使うこと(SimpleDateFormatなど)
  • マルチスレッド対応のクラス(ConcurrentHashMapやThreadLocalなど)を過信せず正しく使用すること

性能観点

  • リソースの解放漏れを避けるため、try-with-resources文を使用してリソースの自動クローズを行うこと
  • 文字列の連結や変更が頻繁に行われる場合は、StringBuilderやStringBufferを使用して効率的な文字列操作を行うこと
  • 大規模なループ処理の場合には、パフォーマンスを意識して最適化すること(無駄な処理や重複した操作の排除)
  • 再帰呼び出しを行う場合は、スタックオーバーフローのリスクに対処するために適切な終了条件を設定すること

まとめ

これら全てを理解して実装していくのは結構大変ですよね。
丸暗記ではなく,ダメな背景を理解して定期的に見直し,体の一部にしていきたいと思います。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です