0Pricing
Swift Academy · レッスン

プロトコル指向設計の原則

柔軟な設計のため、クラス継承よりもプロトコル合成を優先します。

「プロトコル指向設計の原則」はCoddyKit上の無料Swift Academyレッスンです。 これはレッスン4/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはSwift Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Swift Academyコースには全4レッスンが含まれています。

ようこそ

プロトコル指向プログラミング(POP)では、柔軟でテストしやすく再利用可能な Swift コードを構築するために、クラス継承よりもプロトコル合成を重視します。

継承の問題点

深いクラス階層には、次のような問題があります: • サブクラスはスーパークラスの状態と振る舞いをすべて継承します • スーパークラスを変更すると、サブクラスが壊れる可能性があります • 2つのクラスを継承することはできません プロトコルを使えば、これら3つの問題を解決できます。

プロトコルから始める

```swift protocol Greetable { var greeting: String { get } func greet() } extension Greetable { func greet() { print(greeting) } // default implementation } ``` プロトコル extension はデフォルト実装を提供し、適合する型はそれをそのまま利用できます。

振る舞いの合成

```swift protocol Persistable { func save() } protocol Networked { func fetch() async throws -> Data } protocol Loggable { func log(_ msg: String) } struct DataService: Persistable, Networked, Loggable { ... } ``` LEGO ブロックのように振る舞いを組み合わせられるため、クラス階層は必要ありません。

共有ロジックのためのプロトコル extension

```swift extension Loggable { func log(_ msg: String) { print("[\(type(of: self))] \(msg)") } } // Every Loggable type gets this for free ```

遡及的モデリング

自分が所有していない型にもプロトコルを適用できます: ```swift protocol JSONConvertible { func toJSON() -> String } extension Int: JSONConvertible { func toJSON() -> String { "\(self)" } } ``` サブクラス化せずに、標準ライブラリの型へ適合を追加できます。

値型とプロトコル

プロトコルに適合する構造体を使うと、値セマンティクスとポリモーフィズムの両方を利用できます: ```swift protocol Shape { var area: Double { get } } struct Circle: Shape { var radius: Double; var area: Double { .pi * radius * radius } } struct Square: Shape { var side: Double; var area: Double { side * side } } let shapes: [any Shape] = [Circle(radius:3), Square(side:4)] shapes.map { $0.area } // [28.27, 16] ```

プロトコルによる依存性注入

```swift protocol DataStore { func save(_ data: Data) } struct FileStore: DataStore { func save(_ d: Data) { /* disk */ } } struct MockStore: DataStore { func save(_ d: Data) { /* test log */ } } class Service { let store: DataStore init(store: DataStore) { self.store = store } } ```

クラスを使う場面

次のような場合はクラスを選びます: • 共有される可変状態が必要な場合(参照セマンティクス) • ObjC/UIKit API との統合が必要な場合 • 継承が適切なモデルである場合(まれです) それ以外では、基本的にプロトコルと構造体を使います。

プロトコルの命名規則

• 能力を表すプロトコル: `-able`、`-ible`、`-ing` を接尾辞に付けます(Equatable、Hashable、Coding) • Delegate プロトコル: `Delegate` または `DataSource` を接尾辞に付けます • 抽象的な役割: 名詞を使います(`Store`、`Parser`、`Renderer`) 適切な名前を付けると、プロトコル指向のコードは説明がなくても理解しやすくなります。

確認問題

プロトコル extension は、適合する型に何を提供しますか?

まとめ

主なポイント: • クラス階層よりもプロトコルと構造体を優先します • プロトコル extension は共有されるデフォルト実装を提供します • 小さく単一目的のプロトコルから振る舞いを合成します • プロトコルにより、テストしやすい依存性注入が可能になります • クラスは参照セマンティクスと ObjC 相互運用のために限定して使います コース完了です!次は「値型と参照型を深く理解する」です。

よくある質問

「プロトコル指向設計の原則」レッスンは無料ですか?

はい。「プロトコル指向設計の原則」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Swift Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Swift Academyコースには全4レッスンが含まれています。

「プロトコル指向設計の原則」で何を学びますか?

柔軟な設計のため、クラス継承よりもプロトコル合成を優先します。 ブラウザで直接実行するハンズオンコードでSwift Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

Swift Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのSwift Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン4/4です。

「プロトコル指向設計の原則」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このSwift Academyレッスンでコードを書いて実行できますか?

はい。すべてのSwift Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. &によるプロトコル合成
  2. 条件付き適合
  3. Self要件とEquatableの設計
  4. プロトコル指向設計の原則
← Swift Academyに戻る