プロパティ

Kotlinのオブジェクト指向プログラミング(OOP)における**プロパティ(Property)とは、クラスやオブジェクトが持つ状態(データ)**を表すもので、Javaにおけるフィールド(field)やゲッター・セッターの概念を簡潔に表現する仕組みです。Kotlinではプロパティを通じて、より自然で安全な方法でデータの読み書きが行えます。


1. プロパティの構造

Kotlinのプロパティは、以下の要素から構成されます:

  • プロパティ名

  • getter(取得)

  • setter(設定)

基本的な構文は以下のとおりです。

kotlin
class Person { var name: String = "Unknown" val age: Int = 30 }

上記の例では:

  • name は変更可能なプロパティ(var

  • age は読み取り専用のプロパティ(val


2. バッキングフィールドとカスタムアクセス

プロパティには内部的に**バッキングフィールド(backing field)**が使われ、これを通じて値の保存が行われます。カスタムのgetterやsetterを定義することも可能です。

kotlin
class User { var email: String = "default@example.com" get() = field.uppercase() set(value) { field = value.trim() } }

この例では:

  • getter はメールアドレスを大文字で返す

  • setter は空白を除いた文字列を設定する

field はKotlinが自動的に提供するバッキングフィールドのキーワードです。


3. valvarの違い

修飾子 意味 書き換え可能か
val 読み取り専用(immutable) ×
var 読み書き可能(mutable)

valを使うことで不変性が保証され、副作用を防ぐ設計ができます。


4. デフォルトプロパティの使用例

kotlin
class Car(val model: String, var speed: Int)

この例では、model は読み取り専用、speed は変更可能なプロパティです。コンストラクタで初期化され、そのままプロパティとしてアクセスできます。


5. カスタムプロパティの応用(例:計算プロパティ)

kotlin
class Rectangle(val width: Int, val height: Int) { val area: Int get() = width * height }

このような**計算プロパティ(computed property)**は、値を保持せず、都度計算して返すプロパティです。


6. lateinitby lazy の活用

  • lateinit:後から初期化するvarプロパティ(非null型に限る)

  • by lazy:必要になるまで評価されないvalプロパティ

kotlin
class Example { lateinit var config: String val settings: String by lazy { loadSettings() } }

まとめ

Kotlinのプロパティは、Javaのゲッター・セッターを簡潔に表現しつつ、型安全性と柔軟性を兼ね備えています。OOPにおける「状態のカプセル化」と「データアクセスの制御」を効率的に実現する仕組みです。

生成日:2025/05/04