ruby と rails における getter と setter
- rails で getterメソッドとsetterメソッドを定義しないときとするときってなんでだっけと思ったので書きました。
-
getterメソッド
とsetterメソッド
とは - オブジェクト指向におけるカプセル化されたクラスのオブジェクトが持つデータにアクセスするためのメソッドのこと
カプセル化
- クラス内のプロパティ値へのアクセスを制限して、プロパティ値がクラス外から自由に参照・変更されないようにする仕組みのこと
- 外部から自由に変更できてしまうと、対象のクラスの内容を変更する際に、対象のデータにアクセスしている全てメソッドに影響が及ぶ可能性がある。
- カプセル化して、外部から自由にプロパティ値を変更出来ないようにすることで、対象のクラスの内容を変更する際に、考えられる影響範囲を狭めることができる。(保守の負担が軽減する)
- プロパティ値へのアクセス手段として、getterメソッドとsettrメソッドを定義し、外部からそのメソッドを呼び出すことで、参照や変更をできるようにする。
ruby と rails の場合
-
ruby だと、下記で定義できる。(ruby はgetter・setter が定義されていないとプロパティ値は外部から参照できない)
- attr_reader :変数名 ... getter
- attr_writter :変数名 ... setter
- attr_accessor :変数名 ... getterとsetter
-
rails 場合は
ActiveRecord::Base
を継承したクラスは、そのclassが紐づくテーブルのカラムがプロパティ値となり、明示的にgetter or setter を定義しなくても自動的に作成してくれる。(この部分を忘れて、なんでだっけ調べることがあった)