自クラス内のフィールドへのアクセスにgetter/setterを使うか問題
アクセッサはprivateフィールドへのアクセスを制限するために用いられるものだが、自クラス内でフィールドへアクセスする場合でも使ったほうがいいのか。 結論は「ケースバイケース」なのだが、私の個人的な見解は「使わないほうがいい」である。
自クラス内でアクセッサを使う例を以下に記す。 これはlombokを使っているケースだが、使わないほうがクラスの見通しがいいと思う。
そもそもインスタンスフィールドのアクセス修飾子はそのインスタンスを利用するクラスからのアクセスを制限するもの。 それをprivateに制限し、アクセッサで管理することによってカプセル化を実現している。
自クラスのフィールドはprivateであっても自由にアクセスできるため、カプセル化の対象にならない。 カプセル化された外向けのアクセッサと、カプセル化対象外の内側のロジックは一緒にするべきではないという考え方を支持する。
アクセッサを使わない例
import lombok.Getter; import lombok.Setter; @Getter @Setter public class User { private String id; private String name; public User(String id, String name) { this.id = id; this.name = name; } }
アクセッサを使う例
import lombok.Getter; import lombok.Setter; @Getter @Setter public class User { private String id; private String name; public User(String id, String name) { setId(id); setName(name); } }