Swift構造体(struct)の基本とクラスとの違いをわかりやすく解説!初心者向けオブジェクト指向入門
生徒
「Swiftで“構造体”ってよく見かけますけど、クラスとどう違うんですか?」
先生
「とても大切なポイントですね!構造体はクラスと似ているけれど、動き方が少し違うんです。イメージしやすいように順番に説明していきましょう。」
生徒
「お願いします!基本から教えてください!」
先生
「それじゃあ、Swiftの構造体(struct)とクラスの違いを、簡単な例を使って学んでいきましょう!」
1. Swiftの構造体(struct)とは?
Swift(スウィフト)における構造体(struct)は、データをまとめて扱うための型です。たとえば、ひとりの「人」の情報をまとめたいときに、名前や年齢などを1つにまとめることができます。
構造体は「クラス」ととてもよく似ていて、プロパティ(情報)やメソッド(処理)を持たせることができます。
2. 実際に構造体を使ってみよう
Swiftでは、structというキーワードを使って構造体を定義します。以下のコードを見てください。
struct Person {
var name: String
var age: Int
func greet() {
print("こんにちは、私は\(name)、\(age)歳です。")
}
}
let taro = Person(name: "太郎", age: 25)
taro.greet()
このコードでは、Personという構造体を定義し、その中に名前と年齢の情報、そしてあいさつをするメソッドを定義しています。
こんにちは、私は太郎、25歳です。
3. 構造体の特徴は「値型」
構造体(struct)の最大の特徴は「値型(あたいがた)」であることです。
値型とは、変数や定数に代入するときに「コピー」されるということです。コピーとは、同じデータをもう一つ別に作るという意味です。
つまり、ひとつの構造体を別の変数に代入しても、元のデータには影響が出ません。
var person1 = Person(name: "花子", age: 30)
var person2 = person1
person2.name = "さくら"
print(person1.name) // 花子
print(person2.name) // さくら
花子
さくら
このように、person2を変更しても、元のperson1には影響がありません。これが「値型」の特長です。
4. クラスとの違いを比べてみよう
では、構造体とクラスの違いを確認してみましょう。クラスは「参照型(さんしょうがた)」です。参照型とは、同じインスタンス(実体)を複数の変数が共有しているということです。
下のコードは、同じような内容をクラスで書いた例です。
class PersonClass {
var name: String
var age: Int
init(name: String, age: Int) {
self.name = name
self.age = age
}
func greet() {
print("こんにちは、私は\(name)、\(age)歳です。")
}
}
var personA = PersonClass(name: "一郎", age: 40)
var personB = personA
personB.name = "二郎"
print(personA.name) // 二郎
print(personB.name) // 二郎
二郎
二郎
このように、personBを変えるとpersonAも変わります。これは、同じデータを共有しているからです。これがクラスと構造体の動きの大きな違いです。
5. 構造体がよく使われる場面
Swiftでは、基本的なデータの表現には構造体を使うことが推奨されています。
たとえば、位置情報(xとyの座標)やサイズ、色、日付などのように、「値を表す」目的のときに構造体はとても向いています。
構造体は軽くて速いというメリットもあるので、データの受け渡しが多いアプリではパフォーマンス面でも効果的です。
6. 構造体とクラスの主な違いまとめ表
以下に、構造体とクラスの主な違いを簡単にまとめた表を載せておきます。
| 比較項目 | 構造体(struct) | クラス(class) |
|---|---|---|
| 型の種類 | 値型 | 参照型 |
| 継承(けいしょう) | できない | できる |
| イニシャライザ(初期化) | 自動生成される | 自分で書く必要がある |
| 使用される場面 | データの表現 | 振る舞いの共有 |
7. Swiftの構造体は便利で安全
構造体は、Swiftにおいてとても重要な役割を持っています。iOSアプリ開発でも、StringやArray、Dictionaryなどの多くが実は構造体として作られています。
「コピーされる」という動作により、安全にデータを扱うことができるため、初心者にも安心して使える機能なのです。