【Kotlin】レッスン5-01:クラスの定義と使い方を基礎から学ぼう

一つ前の章ではKotlinのコレクションについて学習しました。
今回からは オブジェクト指向 について見ていきましょう。
Lesson1:基礎文法編
Lesson2:制御構造編
Lesson3:関数編
Lesson4:コレクション編
Lesson5:オブジェクト指向編
・Lesson5-1:クラスの基本を理解しよう ◁今回はココ
・Lesson5-2:プライマリコンストラクタを理解しよう
・Lesson5-3:セカンダリコンストラクタを理解しよう
・Lesson5-4:ふたつのコンストラクタを使いこなそう
・Lesson5-5:アクセス修飾子とカプセル化を理解しよう
・Lesson5-6:クラスメンバとインスタンスメンバを理解しよう
・Lesson5-7:クラスの継承を理解しよう
・Lesson5-8:メソッドのオーバーライドを理解しよう
・Lesson5-9:クラスを拡張しよう
・Lesson5-10:抽象クラスを理解しよう
・Lesson5-11:インターフェースを理解しよう
・Lesson5-12:データクラスを理解しよう
・確認問題5-☆1:モンスター捕獲ゲームを作ろう
・確認問題5-☆2:マルバツゲームを作ろう
・確認問題5-☆3:石取りゲームを作ろう
Kotlinで学ぶクラスの使い方|定義からインスタンス化まで徹底解説

Kotlinでは、オブジェクト指向プログラミングの基礎として「クラス」が重要な役割を果たします。
本記事では、ラスの基本的な定義方法やインスタンス化について、初心者向けに解説します。
クラスとは?Kotlinでの役割と基本概念を理解しよう
クラスとはプロパティ(データ)とメソッド(動作)をまとめた「設計図」のようなものです。
この設計図を準備しておいて、実際に動作する「インスタンス」をメイン関数の中に作成できます。
クラスを用いることで、現実世界の物事をコードとして表現することが容易になります。
Kotlinでクラスを定義する基本構文を覚えよう
Kotlinではclass
キーワードを使ってクラスを定義します。
以下に基本的な構文を示します。
// クラスの定義 class User { // Userという名前のクラスを定義 var name: String = "" // 変数(プロパティ)の宣言 var age: Int = 0 // 変数(プロパティ)の宣言 fun displayInfo() { // displayInfoという名前のメソッドを定義 println("Name: $name, Age: $age") // このメソッドの処理内容 } }
class User
: クラス名をUser
としています。var name
とvar age
: クラス内のプロパティを定義しています。fun displayInfo()
: クラス内で使用できるメソッドを定義しています。
このようにクラスを使えばデータとその操作方法をまとめられます。
ただしこれはあくまでも設計図であり、実際に動作はしません。
動作させるためには、この設計図を基にインスタンスを生成する必要があります。
クラスのインスタンスを作成して使う方法
定義したクラスを使用するためには「インスタンス化」という操作を行います。
インスタンス化とはクラスの具体的な実体を作成することです。
class User { // Userクラスの定義 var name: String = "" // プロパティ var age: Int = 0 // プロパティ fun displayInfo() { // メソッドの定義 println("Name: $name, Age: $age") } } fun main() { // メイン関数 val user = User() // Userクラスのインスタンスを生成し、定数userに代入 user.name = "Alice" // 定数userの中のプロパティnameにAliceを代入 user.age = 25 // 定数userの中のプロパティageに25を代入 /* ここで変更しているのはあくまでも定数userの中のプロパティである点に注意 基の設計図であるUserクラスの中身は何も変わっていない */ user.displayInfo() // 定数userの中のdisplayInfoメソッドの呼び出し }
このコードは次の手順を実行しています:
User
クラスのインスタンス化:val user = User()
でUser
クラスのオブジェクトを生成します。- プロパティの値を設定:
user.name
とuser.age
に値を代入します。 - メソッドの呼び出し:
user.displayInfo()
で情報を出力します。
このコードを実行すると以下のように出力されます。
Name: Alice, Age: 25
このように、インスタンス化を通じてクラスを操作できます。
クラス = データや動作を書いた設計図。クラス自体は動作しない。
インスタンス = クラスから作られる、実際に動作するプログラム。
実践で学ぶクラス活用例|ユーザー管理アプリ風に応用
もう少し実践的な例として、簡単なユーザー管理アプリのシミュレーションを作成してみましょう。
class User { // Userクラスの定義 var name: String = "" // プロパティの宣言 var age: Int = 0 // プロパティの宣言 fun displayInfo() { // メソッドの定義 println("Name: $name, Age: $age") } } fun main() { // メイン関数の宣言 val user1 = User() // Userクラスのインスタンスを生成し、定数user1に代入 user1.name = "Bob" user1.age = 30 val user2 = User() // Userクラスのインスタンスを生成し、定数user2に代入 user2.name = "Eve" user2.age = 22 println("User 1 Information:") user1.displayInfo() // user1のメソッドの呼び出し println("User 2 Information:") user2.displayInfo() // user2のメソッドの呼び出し }
このコードでは複数のインスタンスを作成し、それぞれ異なるデータを設定しています。
このコードを実行すると以下のように出力されます。
User 1 Information: Name: Bob, Age: 30 User 2 Information: Name: Eve, Age: 22
学んだ内容のまとめ|クラスの定義から実装までの復習

上の図はこれから学習していくKotlrinのオブジェクト指向を概念的にまとめた図です。
本記事ではクラスの基本構造とその使用例について学びました。
クラスを使うことでデータと動作をひとつにまとめ、整理されたコードを書くことができます。
次回はさらに進んだ概念である「コンストラクタ」について学びます。
引き続き学習を進めて、Kotlinのスキルを向上させましょう!
練習問題|クラスを使ってユーザー情報を出力するプログラムを作ろう

ユーザーの名前と年齢を入力して、その情報を表示するプログラムを作成しましょう。
さらに入力された年齢が正しい形式でない場合には適切なメッセージを表示するようにします。
この問題の要件
以下の要件に従ってコードを完成させてください。
- Userクラスを定義すること:
- プロパティ
name
を持ち、文字列型のデータを格納すること。 - プロパティ
age
を持ち、整数型のデータを格納すること。 displayInfo()
メソッドを定義し、name
とage
を表示すること。
- プロパティ
- main関数を作成すること:
readLine()
を使用して、ユーザーの名前を入力させること。- 年齢を入力させ、数値に変換すること。ただし、入力が数値でない場合は適切なエラー処理を行うこと。
- 入力された名前と年齢を
User
クラスのインスタンスに設定し、その情報を表示すること。
- エラーメッセージを表示すること:
- 年齢が正しい形式でない場合、「年齢が正しくありません」と表示すること。
ただし、以下のような実行結果となること。
ユーザーの名前を入力してください: 太郎 ユーザーの年齢を入力してください: 25 入力されたユーザー情報: 名前: 太郎, 年齢: 25
この問題を解くヒント
1からコードを組み立てることが難しい場合は、以下のヒントを開いて参考にしましょう。
- ヒント1【コードの構成を見る】
-
正解のコードは上から順に以下のような構成となっています。
(※下記の□はコード内のインデントを表しています)1:Userクラスを定義
□ 変数nameを宣言し、初期値を空文字列に設定
□ 変数ageを宣言し、初期値を0に設定
□ displayInfo関数を定義
□ □ 名前と年齢を文字列の埋め込みで出力
2:main関数を定義
□ 「ユーザーの名前を入力してください:」と出力
□ 変数userNameを宣言し、入力された文字列を代入。nullの場合は”未入力”を設定
□ 「ユーザーの年齢を入力してください:」と出力
□ 変数userAgeInputを宣言し、入力された文字列を代入
□ 変数userAgeを宣言し、userAgeInputを整数に変換。無効な入力の場合は-1を設定
□ Userクラスのインスタンスを生成し、変数userに代入
□ 変数userのnameプロパティにuserNameを代入
□ 変数userのageプロパティにuserAgeを代入
□ if文にてuser.ageが0以上であるか判定
□ □ 真の場合、「入力されたユーザー情報:」と出力
□ □ displayInfo関数を呼び出してユーザー情報を出力
□ □ 偽の場合、「年齢が正しくありません。数値を入力してください。」と出力
- ヒント2【穴埋め問題にする】
-
以下のコードをコピーし、コメントに従ってコードを完成させて下さい。
// Userクラスを定義します。このクラスはユーザー情報を格納します。 /* 【穴埋め問題1】 ここでUserクラスを定義し、nameとageというプロパティを持つコードを書いてください。 また、displayInfoという関数を定義して、ユーザー情報を表示するコードを記述してください。 */ fun main() { // 入力を受け取る準備 println("ユーザーの名前を入力してください:") /* 【穴埋め問題2】 ここにユーザーの名前を入力させ、それを変数userNameに格納するコードを書いてください。 */ println("ユーザーの年齢を入力してください:") /* 【穴埋め問題3】 ここにユーザーの年齢を入力させ、無効な入力の場合に-1を設定するコードを書いてください。 */ // Userクラスのインスタンスを作成 /* 【穴埋め問題4】 ここでUserクラスのインスタンスを作成し、nameとageプロパティにそれぞれuserNameとuserAgeを設定するコードを書いてください。 */ // 年齢が適切かチェック /* 【穴埋め問題5】 ここにif文を使って、年齢が0以上の場合にユーザー情報を表示し、それ以外の場合にエラーメッセージを出力するコードを書いてください。 */ }
このヒントを見てもまだ回答を導き出すのが難しいと感じる場合は、先に正解のコードと解説を見て内容を理解するようにしましょう。
練習問題の解答と解説
この問題の正解コードとその解説は以下の通りです。
クリックして開いて確認してください。
- 正解コード
-
// Userクラスを定義します。このクラスはユーザー情報を格納します。 class User { // ユーザー名を格納する変数 var name: String = "" // ユーザーの年齢を格納する変数 var age: Int = 0 // ユーザー情報を表示する関数 fun displayInfo() { println("名前: $name, 年齢: $age") } } // ユーザーから情報を入力し、クラスを活用する関数 fun main() { // 入力を受け取る準備 println("ユーザーの名前を入力してください:") val userName = readLine() ?: "未入力" // 入力がnullの場合は"未入力"を設定 println("ユーザーの年齢を入力してください:") val userAgeInput = readLine() val userAge = userAgeInput?.toIntOrNull() ?: -1 // 入力が無効な場合は-1を設定 // Userクラスのインスタンスを作成 val user = User() user.name = userName // 入力された名前を設定 user.age = userAge // 入力された年齢を設定 // 年齢が適切かチェック if (user.age >= 0) { // ユーザー情報を表示 println("入力されたユーザー情報:") user.displayInfo() } else { println("年齢が正しくありません。数値を入力してください。") } }
- 正解コードの解説
-
コードをブロックごとに分割して解説します。
Userクラスの定義
class User { var name: String = "" var age: Int = 0 fun displayInfo() { println("名前: $name, 年齢: $age") } }
class User
: クラスを定義する基本構文です。User
はクラスの名前であり、任意の名前を付けられます。var name: String = ""
: ユーザーの名前を格納する変数(プロパティ)を定義しています。初期値は空文字列です。var age: Int = 0
: ユーザーの年齢を格納するプロパティです。初期値は0です。fun displayInfo()
: クラス内のメソッドです。このメソッドを呼び出すと、name
とage
の値を表示します。
メイン関数の定義
fun main() { println("ユーザーの名前を入力してください:") val userName = readLine() ?: "未入力" println("ユーザーの年齢を入力してください:") val userAgeInput = readLine() val userAge = userAgeInput?.toIntOrNull() ?: -1
fun main()
: プログラムのエントリーポイントです。この関数からプログラムが開始します。readLine()
: ユーザーからの入力を受け取る関数です。名前や年齢を入力するために使用します。?:
(エルビス演算子): 入力がnull
の場合にデフォルト値を設定します。ここでは名前のデフォルトを”未入力”、年齢のデフォルトを-1
としています。toIntOrNull()
: 入力された文字列を整数に変換します。変換できない場合はnull
を返します。
クラスのインスタンス化とプロパティの設定
val user = User() user.name = userName user.age = userAge
val user = User()
:User
クラスのインスタンスを生成しています。これによりuser
というオブジェクトが作られます。user.name = userName
:user
オブジェクトのname
プロパティに、入力された名前を代入します。user.age = userAge
:user
オブジェクトのage
プロパティに、入力された年齢を代入します。
条件分岐による年齢のチェックと結果表示
if (user.age >= 0) { println("入力されたユーザー情報:") user.displayInfo() } else { println("年齢が正しくありません。数値を入力してください。") } }
if (user.age >= 0)
: 年齢が0以上の場合のみユーザー情報を表示します。無効な入力(例: 年齢に文字を入力した場合)はエラーメッセージを表示します。user.displayInfo()
:User
クラスのdisplayInfo()
メソッドを呼び出し、ユーザー情報を表示します。
まとめ
このコードではKotlinのクラスの定義と使用の基礎を学びました。
クラスを活用するとプログラムがより整理され、再利用可能になります。
次のステップでは、さらに高度なクラスの機能やオブジェクト指向の考え方を学びましょう!