Kotlinのクラスの基本!クラス定義とコンストラクタの書き方を解説
生徒
「Kotlinで『クラス』っていう言葉を見たんですが、クラスって何なんですか?」
先生
「クラスとは、簡単に言えば『設計図』のようなものです。たとえば、人間というクラスを作れば、その設計図から『田中さん』や『佐藤さん』といった実体(インスタンス)を作ることができます。」
生徒
「なるほど、クラスは実体を作るためのもとになるんですね。どうやって書くんですか?」
先生
「それでは、Kotlinでのクラス定義と、コンストラクタの使い方について、わかりやすく説明していきましょう。」
1. クラスとは何か?初心者にもわかるクラスの基本
Kotlinにおけるクラス(class)とは、オブジェクト(モノ)を作るための設計図です。設計図があることで、同じ形やルールを持ったオブジェクトを何度でも作れるようになります。たとえば、ペットの情報をまとめたい場合に「Pet」というクラスを用意しておけば、犬や猫といった複数のペットを整理して扱うことができます。
現実の世界で考えると、「犬」というクラスは、「名前」「年齢」「種類」などの共通した特徴を持っています。一匹一匹の犬は名前や年齢が違いますが、基本的な項目は同じですよね。この「共通点をまとめたもの」をプログラムで表現したのがクラスです。
まずは「クラス=同じ性質を持つデータをまとめる箱」だとイメージすると、プログラミング未経験の方でも理解しやすくなります。
class Dog {
var name: String = ""
var age: Int = 0
}
この例では、「Dog」というクラスを作り、その中に名前と年齢という情報をまとめています。このクラスをもとにして、あとから具体的な犬のデータを作成していくことになります。
2. Kotlinでの基本的なクラスの定義方法
Kotlinでクラスを定義するときは、classというキーワードを使います。クラス名は「何を表す設計図なのか」が伝わる名前にすると、あとから読み返したときも迷いにくくなります。まずは一番シンプルな形で、プロパティ(クラスの中に持たせる情報)を用意する書き方から覚えるのがおすすめです。
class Pet {
var name: String = ""
var age: Int = 0
}
この例では、Petというクラスを作り、name(名前)とage(年齢)という2つの情報をまとめています。どちらも最初は空や0で用意しておき、あとから必要な値を入れて使う形です。初心者の方は「まず箱を作って、あとで中身を入れる」と考えると分かりやすいでしょう。
実際にクラスを使うには、クラスからインスタンス(実体)を作って値を入れます。次のサンプルでは、Petからペットを作り、名前と年齢を設定して表示しています。
fun main() {
val pet = Pet()
pet.name = "ミケ"
pet.age = 2
println("名前: ${pet.name}")
println("年齢: ${pet.age}")
}
名前: ミケ
年齢: 2
ポイントは、Pet()のように書くと「設計図から実体を作る」ことになる点です。そしてpet.nameやpet.ageのようにドットでつなげて、情報を入れたり取り出したりできます。クラス定義の基本を押さえると、データを整理しながらプログラムを書けるようになり、Kotlinの学習も一気に進めやすくなります。
3. コンストラクタとは?オブジェクトの初期設定をする仕組み
コンストラクタとは、クラスからオブジェクト(インスタンス)を作るタイミングで、最初の状態を決めるための仕組みです。たとえば「名前と年齢が必ず必要なペット」を作りたいなら、作成時にその情報を受け取るようにしておくと、あとから入れ忘れる心配が減ります。初心者の方は「作る瞬間に、最初の中身までセットする」と覚えるとスッと入ります。
Kotlinでは、クラス名の横にあるカッコ()の中に、受け取りたい情報を書きます。さらにvalやvarを付けると、そのままクラスのプロパティとして使えるようになります。
class Pet(val name: String, val age: Int)
このように書くと、Petを作るときに「名前」と「年齢」を必ず渡すルールになります。実際に使うときは次の通りです。
fun main() {
val dog = Pet("ポチ", 3)
println("名前: ${dog.name}")
println("年齢: ${dog.age}")
}
名前: ポチ
年齢: 3
ここでのポイントは、Pet("ポチ", 3)のように書いた瞬間に、もうnameとageが決まっていることです。あとから代入する形よりも手順が少なく、データがそろった状態のオブジェクトを作りやすいのがメリットです。クラスを使ったプログラムでは、この「最初に必要な情報をそろえる」考え方がとても役に立ちます。
4. プロパティ(変数)をクラスの外から使う
コンストラクタでvalやvarを付けて定義したプロパティ(変数)は、クラスの外からもドット.でアクセスできます。これができると、オブジェクトに入っている情報を読み取ったり、必要に応じて書き換えたりできるようになります。初心者の方は「クラスの中にしまった情報を、外から取り出す・しまい直す」と考えるとイメージしやすいです。
ここで大事なのが、valとvarの違いです。valは読み取り専用なので、最初に入れた値をあとから変更できません。一方、varは変更可能なので、成長したペットの年齢を更新する、といった動きができます。どちらを使うかは「あとから変更したいかどうか」で決めるのが基本です。
class Pet(var name: String, var age: Int)
fun main() {
val cat = Pet("ミケ", 2)
// 読み取り(参照)
println("名前: ${cat.name}")
println("年齢: ${cat.age}")
// 書き換え(更新)
cat.age = 3
println("更新後の年齢: ${cat.age}")
}
名前: ミケ
年齢: 2
更新後の年齢: 3
このように、cat.nameやcat.ageの形で値を扱えるのが「プロパティをクラスの外から使う」という意味です。特にvarは更新できるので便利ですが、むやみに変更できる状態が増えると管理が難しくなることもあります。まずは「変える必要があるものはvar、変えないものはval」という考え方で使い分けると、クラス設計がすっきりまとまりやすくなります。
5. クラスから複数のインスタンスを作る
同じクラスから、複数のオブジェクト(インスタンス)を作ることができます。たとえば、複数のペットを作ることができます。
val dog = Pet("ポチ", 3)
val cat = Pet("ミケ", 2)
これにより、dogとcatという2つの異なるインスタンスができ、それぞれに違う情報が入ります。
6. クラスとインスタンスの関係を身近なもので例えると?
クラスとインスタンスの関係は、「クッキーの型」と「焼かれたクッキー」のようなものです。
クッキーの型(クラス)を使って、たくさんのクッキー(インスタンス)を作ることができ、どれも形は同じだけど中身は少しずつ違うことがあります。
このように考えると、クラスとインスタンスの関係がとても分かりやすくなります。
Kotlinを基礎からしっかり学びたい人や、 Java経験を活かしてモダンな言語にステップアップしたい人には、 定番の入門書がこちらです。
基礎からわかるKotlinをAmazonで見る※ Amazon広告リンク
まとめ
クラスは設計図でインスタンスは実体
この記事では、コトリンのクラスを初めて学ぶ人がつまずきやすい点を、身近なたとえと一緒に整理しました。クラスは同じ形のデータを作るための設計図で、インスタンスはその設計図から作られた実体です。設計図が一つあると、同じ項目を持つデータを何個でも作れるため、情報が増えても管理が散らかりにくくなります。たとえばペット管理や名簿管理のように、名前や年齢など共通項目が決まっている場面では、クラスを使うだけで読みやすさと扱いやすさが一気に上がります。
プロパティは外から読めて必要なら更新できる
クラスの中に置いたプロパティは、インスタンスを通して外から参照できます。ドットでつないで値を読む感覚に慣れると、オブジェクトに入っている情報を自然に扱えるようになります。さらに、読み取り専用にしたい場合はバルを選び、あとで変更する可能性がある場合はバーを選ぶ、という判断も大切です。最初から何でも変更できる形にしてしまうと、どこで値が変わったのか追いにくくなるので、変える必要があるものだけを変更できる状態にする意識が、きれいなクラス設計につながります。
コンストラクタで最初に必要な情報をそろえる
コンストラクタを使うと、インスタンスを作る瞬間に必要な情報を受け取って、最初からそろった状態の実体を作れます。あとから値を入れる方法より手順が少なく、入れ忘れも起こりにくいので、初心者ほど便利さを感じやすいです。名前と年齢のように必ず必要な情報は、作成時に渡す形にしておくと、データの欠けが減って安心です。まずは小さな例で、作るときに渡す流れと、作ったあとに読む流れを体で覚えるのが近道です。
クラスの基本を一度に確かめるサンプル
次のサンプルは、ペットのクラスを作り、二匹分のインスタンスを作って表示し、年齢だけを更新して違いを確認する流れです。クラス定義、コンストラクタ、プロパティ参照、プロパティ更新、複数インスタンスという基本が一通り入っています。短いコードでも、クラスの使い方が頭の中でつながりやすくなるので、まずは実行して結果を見てください。
class Pet(var name: String, var age: Int)
fun main() {
val dog = Pet("ポチ", 3)
val cat = Pet("ミケ", 2)
println("犬の名前は" + dog.name + "で年齢は" + dog.age + "です")
println("猫の名前は" + cat.name + "で年齢は" + cat.age + "です")
cat.age = 3
println("更新後の猫の年齢は" + cat.age + "です")
}
同じペットのクラスから作った二つのインスタンスでも、それぞれが別の情報を持って動きます。犬の年齢を変えれば犬だけが変わり、猫の年齢を変えれば猫だけが変わる、という独立した動きが確認できれば理解は十分です。こうした感覚が身につくと、クラスで形をそろえてデータを管理する考え方が日常的に使えるようになり、学習も進めやすくなります。
よくあるつまずきとコツ
初心者が最初に困りやすいのは、クラスとインスタンスを言葉だけで覚えようとしてしまうことです。頭の中で考えるより、実際に一つ作って表示し、二つ作って表示し、どちらか一方だけ値を変えて表示する、という順番で確かめると理解が進みます。とくにインスタンスは別々に値を持つという感覚は、手を動かして初めて納得できることが多いです。犬と猫の例でも、同じ名前の項目を持つのに中身は違う、という状態を作ってみると、設計図と実体の関係が自然に見えてきます。
もう一つのつまずきは、プロパティの初期値です。クラスの中で空の文字や零を入れておく書き方は分かりやすい反面、入れ忘れに気づきにくいという弱点もあります。たとえば名前が空のままでも動いてしまうので、表示したときに違和感が出ます。反対に、コンストラクタで必ず受け取る形にしておけば、作成時に名前と年齢を渡さないといけないため、うっかりが減ります。どちらが正しいというより、用途に応じて使い分けるのが大切で、まずは安全側に倒すならコンストラクタで受け取る形が安心です。
また、クラス名とプロパティ名は、役割がすぐ伝わる言葉にすると読みやすくなります。ペットならペット、人なら人、商品なら商品、というように、現実の対象に合わせて名前を付けると、コードを見た人が迷いません。名前を付ける作業は地味ですが、クラスを使う上ではとても重要です。読みやすい名前があるだけで、全体の理解が速くなり、間違いも減ります。
複数インスタンスをまとめて扱うイメージ
クラスの強みは、複数のインスタンスを同じルールで並べられる点にもあります。たとえばペットが一匹だけなら変数をいくつか用意しても管理できますが、増えてくると同じ項目が何度も出てきて混乱します。クラスを使えば、名前と年齢という形をそろえたまま、何匹でも増やせます。すると、一覧表示や確認のような作業も、同じ手順で繰り返せるようになります。最初は難しく感じても、形がそろうことの便利さは、少しデータが増えた瞬間に実感できます。
たとえば、犬と猫だけでなく、鳥やうさぎなどが増えても、ペットという枠でまとめられます。ここで重要なのは、クラスが対象の共通点を持っていることです。共通点があるからこそ、同じ項目で比べたり、同じ並びで表示したりできます。クラスを作るときは、何を共通項目にするかを意識すると、あとで扱いやすい形になりやすいです。
クッキーのたとえをもう少しだけ具体的に
クッキーの型のたとえを、もう少しだけ丁寧に見てみましょう。型は形を決める道具で、同じ型を使えば同じ形のクッキーが焼けます。これがクラスです。一方で、実際に焼けたクッキーは一枚一枚が別物で、チョコが多いものもあれば少ないものもあります。これがインスタンスです。形は同じでも中身が違う、というところがポイントです。プログラムでも、同じクラスから作られたインスタンスは同じプロパティを持ちますが、値はそれぞれ別々に保存されます。この違いが分かると、クラスを使う意味がはっきりします。
生徒
「クラスって設計図って聞いてもピンとこなかったんですけど、同じ形のデータを作る型だと思うと分かりやすかったです」
先生
「それで十分です。設計図があるから、名前や年齢みたいな同じ項目をそろえて、いくつでもインスタンスを作れます」
生徒
「インスタンスを二つ作っても、片方を変えたらもう片方は変わらないのが面白いですね」
先生
「そこが大事です。実体はそれぞれ別のデータを持つので、同じクラスでも中身は独立します」
生徒
「あと、バルとバーの違いが少し分かってきました。変えないなら読み取り専用にする方が安心なんですね」
先生
「そうです。必要なものだけ変更できる形にすると、後から見たときも意図が伝わりやすいです」
生徒
「コンストラクタで最初に値を渡すと、入れ忘れが減るのも実感できました」
先生
「最初に必要な情報をそろえる考え方は、クラスを使う上でずっと役に立ちます。小さな例で何度か作って読む練習をすると、自然に身につきますよ」
【未経験OK】Kotlinで始めるプログラミング入門|ゼロから「動く喜び」を体験する60分
「プログラミングを始めたい」を形にする。最新言語Kotlinで楽しむ、ものづくりの第一歩。
本講座は、プログラミング経験が全くない方のためのエントリー講座です。「コードを書くってどういうこと?」という基本から、世界中で使われている最新言語Kotlin(コトリン)を使って、実際にプログラムを動かすまでを体験します。難しい理屈よりも、まずは「自分の手で動かす楽しさ」を最短距離で実感していただきます。
具体的な体験内容と環境
【つくるもの】
簡単な言葉を入力すると自動で返答してくれる「対話型ミニプログラム」や、計算を自動化する「便利ツール」をゼロから作成します。黒い画面に自分の書いた文字が表示される瞬間は、最高の感動体験です。
【開発環境】
プロのエンジニアが実際に使っている開発ツールIntelliJ IDEA(インテリジェイ)をインストールします。ボタン一つで日本語化し、初心者でも迷わず操作できる「魔法の設定」を一緒に行います。
この60分で得られる3つの体験
プロと同じ道具を揃えることで、明日から一人でもプログラミングを続けられる環境が整います。
「変数」や「型」といった難しい言葉も、身近な例え話で解説。モヤモヤをゼロにします。
Kotlinは英語に近くて読みやすいのが特徴。自分でコードを読んで、間違いを見つけるコツも伝授します。
※本講座は、パソコン操作が不安な方でも安心して受講いただける完全マンツーマンです。あなたのペースに合わせて、一つずつ丁寧に進めていきます。
Kotlinで始めるプログラミング入門|ゼロから「動く喜び」を体験