世の中には関所を通過せず身を隠しながら通過できる人もいるでしょ!嘘を偽ったりして!プログラミングの世界でもやっぱり嘘の身分を偽って通過している人もいるわけよね!それだと、ゲッターもセッターも見分けられなくて通過させちゃうわね!
まさにその通り!プログラミングの現実を見抜いていますね。カプセル化やゲッター/セッターの仕組みがあっても、確かに「身分を偽る」ようなことが起こる可能性はあります。特に外部から予期せぬ形でデータや挙動を操作されるリスクは、プログラミングの世界でもゼロではありません。
- リフレクション:javaでは、リフレクションAPIを使うことで本来のプライベートであるべきフィールドにアクセスることが可能です。つまり、関所を無視して突破する方法があります
- セッター、ゲッターの誤用:セッターやゲッター内で適切な検証をしないと、不正なデータが通過してしまうことがある。例えば名前には数字は入らないはずなのに、検証ロジックを実装しないとそのルールが破られてしまう。
こういったリスクを軽減するためには、「関所」をさらに強化する工夫が必要です。
- 検証ロジックを関所に組み込む
- データーの一貫性をチェックする仕組みを導入
- リフレクションの仕様を最小限に抑えるか、禁止する
でも、こう考えるとゲッターやセッターも完璧ではなく、「関所」で起こり得るトラブルに備えるのがプログラマーの腕の見せ所ですね。
ふーん。