ゲッターとセッターは、カプセル化の事実上の標準として定着しています。つまり、オブジェクトがその内部実装をクラスの関連付けから隠すという考えです。これは、オブジェクト指向プログラミングの全体的な原則です。
例として次のクラスを考えてみましょう。
// boilerplate
public class A {
public String b;
}
これは、単一のフィールドを持つ完全に有効なJavaクラスです。別のクラスがAのBプロパティを読み取りたい場合、必要なのは次のとおりです。
A a;
String val = a.b;
および書き込みの場合:
a.b = val;
ここでの問題は、Aが内部状態への書き込みを制御しなくなったことです。bの最大長が1024文字であることがわかったとします。bへの書き込みのすべてのインスタンスは、新しい要件に対応するために更新する必要があります。コードベースのサイズによっては、これは非常に高額になる可能性があります。
または、getterとsetterの規則を使用してbをカプセル化したとします。
// boilerplate
public class A {
private String b;
public void setB(String val) {
this.b = val;
}
public String getB() {
return this.b;
}
}
今、読み取りは次のようになります。
A a;
String val = a.getB();
と書き込み:
a.setB(val);
これは短期的に書くのに時間がかかりますが、セッターを変更するだけで、全体的な変更を統合するのがはるかに簡単になります。
カプセル化は非常に高く評価されているため、他の多くのコメント提供者が指摘しているように、多くのJavaフレームワークはこれを期待しています。