Kotlinのプロパティに関して学びます。
プロパティはJavaでいうところのメンバ変数です。

例を見ましょう。

nameがプロパティになります。
Javaのメンバー変数と変わらないようです。

バッキングフィールド

先ほど、変わらないと書きましたが、実際プロパティはバッキングフィールドと呼ばれる入れ物
を持ちます。
先ほど定義したプロパティnameのStringの参照はバッキングフィールド内に
持っており、それらをプロパティを通じてアクセスすることになります。

カスタムセッター

では、カスタムセッターを用いて、バッキングフィールドにアクセスして見ましょう

バッキングフィールドを持つプロパティが自動で値をセットするのでなく、
カスタムセッターを用いて、nameのfieldに値をセットすることができました。

プライマリコンストラクタにプロパティを持たせる

プライマリコンストラクタにプロパティを持たせることができます。
例を見て見ましょう

遅延初期化

Kotlinでは、初期値にnullが代入されることを防ぐ為に、プロパティを宣言する際にnull以外の値を代入する必要がありますが、lateinit keywordを使用することにより、プロパティに初期値を代入することなくプロパティを宣言することができます。

例を見ましょう

上記では、初期化することなく、プロパティnameを宣言できていますが、
nameを初期化する前に参照しているため
UninitializedPropertyAccessException
が吐かれてしまいました。