Java EntityクラスはintとIntegerどちらを使うべきか

2024/05/12に公開

はじめに

個人開発で新しくアプリを作り始めるときに毎回迷います。
また、調べてもintとIntegerの書き方が人によってマチマチでどちらであるべきかよくわかりません。

Spring Data JDBCを使った開発を想定しています。

intとIntegerの違い

int型とInteger型の違いについて。
NULLを許容するかどうかがポイントな気がしています。

  • NULL許容
    intはプリミティブ型で、NULLを許容しません。一方、Integerはオブジェクト型で、NULLを許容します。
  • メソッドとフィールド
    Integerはオブジェクト型であり、値を操作するためのメソッド(例えば、Integer.parseInt()やInteger.valueOf()など)を持つ。
  • パフォーマンス
    intの方がIntegerよりも軽微な差だがパフォーマンスが良くなる。intがプリミティブ型であるため、オブジェクトのオーバーヘッドがないため。

Spring Data JDBCで扱う際の違い

Spring Data JDBCなどでリポジトリ作成時に、継承クラスの型指定は必ずオブジェクト型になります。intを指定した場合は、ここでIntegerを指定するようになりオートボクシングされるのでどちらでも問題無く動作します。技術記事とかで書き方が混ざっているのは動作として問題ないためであり、どちらを記載するかは考え方次第な気がしますね。

Repositoryクラス
public interface EntityRepository extends CrudRepository<Entity, Integer>{
    
}

どちらを使うべきか

Entityクラス
@Data
public class Entity {
 
    @Id
    private Integer id;
    private String name;
}

NULLが許容される「Integer」を使うべきという風に自分では結論づけました。
IDなどで主キーである場合、SELECT処理をする場合は値が確実に存在しますが、
INSERT処理をする場合などはNULLとなるタイミングがあることもあり得るためです。

また、int型であれば初期値に「0」が設定されます。
なにかの間違いでIDがセットされない、取得できない場合に「0」が入るよりはNULLが入っているほうが健全なプログラムだろうという考えです。

Discussion