Swiftのクラスとは?初心者でもわかるオブジェクト指向の基本をやさしく解説
生徒
「Swiftの“クラス”ってなんですか?オブジェクト指向とか難しそうで…」
先生
「たしかに最初は難しく聞こえるけど、大丈夫。クラスは、モノの設計図のようなものと考えるとわかりやすいよ。」
生徒
「設計図?どういうことですか?」
先生
「それじゃあ、Swiftのクラスとオブジェクト指向について、基礎から見ていこう!」
1. Swiftのクラスとは?
Swift(スウィフト)で「クラス」とは、現実世界のモノや概念をプログラムの中で再現するための「設計図(せっけいず)」のようなものです。
たとえば「車」を作りたいとき、色やスピード、動かし方などを一つのまとまりとして定義できます。この「車の設計図」がクラスになります。
2. クラスとインスタンスの関係
クラスをもとにして作られる実体(じったい)のことを「インスタンス」と呼びます。
たとえば、「赤い車」「青い車」は、それぞれクラスから作られたインスタンス(実際の車)です。設計図は1つでも、作れる車は何台でもOKですよね。それと同じです。
3. 実際にSwiftでクラスを使ってみよう
Swiftでクラスを定義するには、classキーワードを使います。そして、そこからインスタンスを作って使います。
class Car {
var color: String = "白"
var speed: Int = 0
func drive() {
print("車が走り出しました。スピード: \(speed)km/h")
}
}
// インスタンスを作る
let myCar = Car()
myCar.color = "赤"
myCar.speed = 60
myCar.drive()
このコードでは、Carというクラスを作り、それをもとにmyCarというインスタンスを作成しています。
色を赤に、スピードを60に設定して、drive()メソッドを実行しています。
出力結果は以下のようになります。
車が走り出しました。スピード: 60km/h
4. プロパティとメソッドの意味
クラスの中には、「プロパティ」と「メソッド」という2つの要素があります。
- プロパティ:クラスが持つ「情報」のことです。上の例では
colorやspeedがそれにあたります。 - メソッド:クラスができる「動作」のことです。上の
drive()がその例です。
5. 初期化する方法:イニシャライザ(initializer)
Swiftのクラスでは、インスタンスを作るときに値を指定したい場合があります。そのときに使うのがinit(イニット)という特別な関数です。
class Car {
var color: String
var speed: Int
init(color: String, speed: Int) {
self.color = color
self.speed = speed
}
func drive() {
print("色は\(color)の車が\(speed)km/hで走っています。")
}
}
let blueCar = Car(color: "青", speed: 80)
blueCar.drive()
色は青の車が80km/hで走っています。
このようにinitを使うことで、インスタンスを作るときに必要な情報を渡せます。
6. クラスの便利なポイント:再利用しやすい
クラスを使うと、同じような処理を何回も書かずに済みます。設計図をもとに、いろいろなパターンのインスタンスを簡単に作れるので、プログラムの整理もしやすくなります。
また、後で新しい機能を追加したいときも、クラスにまとめてあると管理がラクです。
7. 構造体(Struct)との違い
Swiftにはクラスと似たものに構造体(Struct)もあります。
大きな違いは、「インスタンスをコピーしたときの動き」です。
- クラスは参照型:同じインスタンスを共有する
- 構造体は値型:コピーして別のものとして扱う
例えば、クラスで作ったインスタンスを別の変数に代入すると、元のインスタンスと同じものを指します。
class Dog {
var name: String = "ポチ"
}
let dog1 = Dog()
let dog2 = dog1
dog2.name = "タロウ"
print(dog1.name) // タロウ と表示される
これは、dog1とdog2が同じ「犬」を指しているからです。
8. クラスのキーワードと文法のおさらい
ここまでで登場した、Swiftのクラスに関連するキーワードをおさらいしましょう。
class:クラスを定義するvar:プロパティ(変数)を定義するfunc:メソッド(関数)を定義するinit:イニシャライザ(初期化のための特別な関数)self:自分自身のインスタンスを指すキーワード
これらを組み合わせて、オリジナルのクラスを作っていけるようになると、Swiftの開発がとても楽しくなります。