カプセル化とはオブジェクトの内部の仕様を外部からは隠蔽すること。外部からは公開されている部分しかアクセスできないため、独立性が高まる。
例えばクラスのフィールドへのアクセスはgetterメソッドやsetterメソッドといったアクセサ経由でのみ可能にする。
で、自己カプセル化とはクラス内部からのアクセスもアクセサ経由で行うということ。
public class TestClass { private int param; public int getParam() { return param; } public void setParam(int param) { this.param = param; } public void update() { setParam( 100 ); } public void draw() { System.our.println( getParam() ); } }
このように、paramフィールドはクラス内部にあるのにもかかわらず、updateメソッドやdrawメソッドではからなずgetParamメソッドやsetParamメソッドを使ってアクセスしている。
これが「自己カプセル化フィールド」というリファクタリングのひとつ。
このようにすることによって、コードとフィールドのつながりを緩めて、さらなるリファクタリングがしやすくなる。