カテゴリ: Swift 更新日: 2025/12/09

Swift構造体(struct)の基本とクラスとの違いをわかりやすく解説!初心者向けオブジェクト指向入門

Swift 構造体(struct)の基本とクラスとの違い
Swift 構造体(struct)の基本とクラスとの違い

先生と生徒の会話形式で理解しよう

生徒

「Swiftで“構造体”ってよく見かけますけど、クラスとどう違うんですか?」

先生

「とても大切なポイントですね!構造体はクラスと似ているけれど、動き方が少し違うんです。イメージしやすいように順番に説明していきましょう。」

生徒

「お願いします!基本から教えてください!」

先生

「それじゃあ、Swiftの構造体(struct)とクラスの違いを、簡単な例を使って学んでいきましょう!」

1. Swiftの構造体(struct)とは?

1. Swiftの構造体(struct)とは?
1. Swiftの構造体(struct)とは?

Swift(スウィフト)における構造体(struct)は、データをまとめて扱うための型です。たとえば、ひとりの「人」の情報をまとめたいときに、名前や年齢などを1つにまとめることができます。

構造体は「クラス」ととてもよく似ていて、プロパティ(情報)やメソッド(処理)を持たせることができます。

2. 実際に構造体を使ってみよう

2. 実際に構造体を使ってみよう
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. 構造体の特徴は「値型」

3. 構造体の特徴は「値型」
3. 構造体の特徴は「値型」

構造体(struct)の最大の特徴は「値型(あたいがた)」であることです。

値型とは、変数や定数に代入するときに「コピー」されるということです。コピーとは、同じデータをもう一つ別に作るという意味です。

つまり、ひとつの構造体を別の変数に代入しても、元のデータには影響が出ません。


var person1 = Person(name: "花子", age: 30)
var person2 = person1

person2.name = "さくら"

print(person1.name) // 花子
print(person2.name) // さくら

花子
さくら

このように、person2を変更しても、元のperson1には影響がありません。これが「値型」の特長です。

4. クラスとの違いを比べてみよう

4. クラスとの違いを比べてみよう
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. 構造体がよく使われる場面

5. 構造体がよく使われる場面
5. 構造体がよく使われる場面

Swiftでは、基本的なデータの表現には構造体を使うことが推奨されています。

たとえば、位置情報(xとyの座標)やサイズ、色、日付などのように、「値を表す」目的のときに構造体はとても向いています。

構造体は軽くて速いというメリットもあるので、データの受け渡しが多いアプリではパフォーマンス面でも効果的です。

6. 構造体とクラスの主な違いまとめ表

6. 構造体とクラスの主な違いまとめ表
6. 構造体とクラスの主な違いまとめ表

以下に、構造体とクラスの主な違いを簡単にまとめた表を載せておきます。

比較項目 構造体(struct) クラス(class)
型の種類 値型 参照型
継承(けいしょう) できない できる
イニシャライザ(初期化) 自動生成される 自分で書く必要がある
使用される場面 データの表現 振る舞いの共有

7. Swiftの構造体は便利で安全

7. Swiftの構造体は便利で安全
7. Swiftの構造体は便利で安全

構造体は、Swiftにおいてとても重要な役割を持っています。iOSアプリ開発でも、StringArrayDictionaryなどの多くが実は構造体として作られています。

「コピーされる」という動作により、安全にデータを扱うことができるため、初心者にも安心して使える機能なのです。

Swiftを基礎から実践レベルまで学びたい人や、 iOSアプリ開発を本格的に始めたい人には、 定番の入門+実践書がこちらです。

Swift実践入門をAmazonで見る

※ Amazon広告リンク

まとめ

まとめ
まとめ

Swiftの構造体(struct)は、初心者が最初に出会う大切な概念のひとつであり、値型という特長によってデータを安全に扱える点が大きな魅力です。この記事で学んできたように、構造体はプロパティやメソッドを持たせてひとまとまりの情報を扱うことができ、クラスと似た見た目を持ちながらも、内部ではまったく異なる動作をします。特に、コピーによるデータの独立性は、Swiftの安全性を支える大事な仕組みです。構造体を使うことで、意図せぬ値の書き換えを防ぎやすく、アプリの動作が予測しやすくなるというメリットがあります。 また、Swiftの標準ライブラリには、構造体で作られている型が多く存在します。たとえば、文字列を表すString、配列であるArray、辞書のDictionaryなど、ふだんよく使う型が値型で動作しています。これらの型と同じ性質を持つ構造体は、アプリ開発のあらゆる場面で安心して使えるため、初心者にも扱いやすく、Swiftらしい設計を自然と理解できるようになります。特に、アプリ内で座標やサイズ、ユーザー情報などをまとめて扱いたいときには、構造体を利用することでコードの見通しがよくなり、拡張性も高まります。 さらに、構造体とクラスの違いを明確に理解することは、Swiftでのオブジェクト指向設計を習得するうえで欠かせません。参照型のクラスは、同じインスタンスを共有するため、複数箇所から同じデータにアクセスするような複雑な処理に向いています。一方、構造体は値型であり、処理が明確に分離されるため、小さく安全なデータ管理に適しています。用途によってこれらを使い分ける力がつくと、アプリ開発における設計の幅が大きく広がり、効率的でミスの少ないコードを書くことにつながります。

実装例でもう一度理解しよう

以下では、構造体の値型としての特性をより深く理解できる簡単なサンプルを紹介します。実際のSwiftコードを通して、値がコピーされる様子や、クラスとの違いを改めて確認できます。


// 構造体(struct)の値コピーを確認する例
struct Book {
    var title: String
    var pages: Int

    func info() {
        print("この本のタイトルは\(title)、ページ数は\(pages)です。")
    }
}

var book1 = Book(title: "物語集", pages: 200)
var book2 = book1

book2.title = "新しい物語集"

book1.info() // 物語集
book2.info() // 新しい物語集

ここでは、構造体が値型であるために、book1book2が独立して存在していることがよくわかります。同じ初期値を持ちながら、ひとつを変更してももう片方には影響が出ないため、安全に複数のデータを扱うことができます。アプリの状態管理では、このような特性が役立つ場面が多くあります。

構造体とクラスの使い分けのポイント

構造体は、値そのものを扱う「データ中心」の場面に向いています。一方、クラスは機能や振る舞いを複数の場所で共有したいときに適しています。データの変化が多く、複数箇所から更新されるようなケースではクラスを使い、小さく安全に管理したいデータには構造体を選ぶとよいでしょう。アプリ開発では両者を正しく理解して役割を分けることが大切であり、この判断ができるようになると設計がより柔軟になります。

先生と生徒の振り返り会話

生徒

「今日の構造体の話、とても分かりやすかったです!値型ってこういう動きなんだと実感できました。」

先生

「それはよかったです。値型と参照型の違いは、Swiftの設計で非常に重要ですからね。理解しておくとアプリ開発がぐっと楽になりますよ。」

生徒

「クラスと構造体をどう使い分けるのかもイメージしやすくなりました。特にコピーされるしくみは初心者にやさしいと思いました。」

先生

「ええ、構造体は安全性が高くて扱いやすいですよ。Swiftでは多くの基本型が構造体で作られているので、これからたくさん触れることになるでしょう。」

生徒

「今日学んだことを意識して、これからのアプリ開発に活かしていきます!」

関連セミナーのご案内

Windowsで始めるiPhoneアプリ開発入門|Swiftの基本と仕組みを1時間で攻略

Windowsで始めるiPhoneアプリ開発入門|Swiftの基本と仕組みを1時間で攻略

「iPhoneアプリを作りたいけれど、Macを持っていないから諦めている」そんな方のための画期的な入門講座です。実は、プログラミングの本質を学ぶのに高価な機材は必要ありません。本講座では、Windowsパソコンを使用し、クラウド環境を活用してAppleの最新言語Swift(スウィフト)の基礎を最短距離でマスターします。

Windowsで実現する開発環境

【つくるもの】
ブラウザ上で動作する「スマート・計算ツール」や「データ判定プログラム」をゼロから作成します。変数の扱いや条件分岐など、iPhoneアプリの内部で動くロジックを自分の手で構築する感動を体験してください。

【開発環境】
ブラウザだけでSwiftが動くプロ仕様のオンラインエディタ(Replit等)を使用します。面倒な設定は一切不要。今あるWindows PCで、プロのエンジニアと同じコードを書き始められます。

この60分で得られる3つの理解

1. WindowsでのSwift実行環境の作り方

OSの壁を越え、クラウドを活用してスマートに学習を開始する「現代的な開発スタイル」を習得します。

2. Swiftの基本構造(変数・型・定数)

iPhoneアプリ特有のデータの扱い方や、Appleが推奨する「安全で美しいコード」の書き方を学びます。

3. アプリエンジニアとしてのロードマップ

将来的にiOSエンジニアとして副業・転職するために必要な準備や、Mac選びのポイントを伝授します。

※本講座は、将来的にiPhoneアプリ開発で収益化や転職を目指したい未経験者のためのエントリー講座です。マンツーマン形式により、Windows環境ならではの疑問にもその場でお答えし、あなたの理解度に合わせて進行します。

セミナー画像

Windowsで始めるiPhoneアプリ開発入門

カテゴリの一覧へ
新着記事
New1
Go言語
Go言語のwhile的なforループの使い方!条件式ループの基本を解説
New2
Swift
Swiftのswitch文の使い方|初心者でもわかるパターンマッチング徹底解説
New3
Kotlin
Kotlinの認証と認可を完全解説!初心者でもわかる安全なログイン管理とセキュリティ対策
New4
Go言語
Go言語の関数でエラーハンドリングする基本的な方法
人気記事
No.1
Java&Spring記事人気No1
Swift
Swift開発環境の構築方法を徹底解説!Xcode・Windows・Linux対応
No.2
Java&Spring記事人気No2
Kotlin
Gradleファイル(build.gradle.kts)の書き方と役割をやさしく解説!Kotlin初心者向け完全ガイド
No.3
Java&Spring記事人気No3
Go言語
Go言語でリダイレクト処理を行う方法(http.Redirect)を初心者向けに解説
No.4
Java&Spring記事人気No4
Kotlin
Android Studioのインストール手順と初期設定を初心者向けに完全解説!
No.5
Java&Spring記事人気No5
Swift
Swift Playgroundの使い方を完全解説!初心者に最適な学習環境の始め方
No.6
Java&Spring記事人気No6
Go言語
Go言語のgo.modファイル完全ガイド!初心者でもわかる仕組みと書き方
No.7
Java&Spring記事人気No7
Kotlin
Kotlinの文字列の部分取得!substring・take・dropの基本
No.8
Java&Spring記事人気No8
Go言語
Go言語でミドルウェアを作成する方法と活用例!初心者でもわかるWebアプリ開発