はじめに
Swiftプログラミング言語には、クラス、構造体、関数、プロパティなどのアクセスレベルを制御するためのアクセス修飾子があります。アクセス修飾子を使用することで、コードのカプセル化、隠蔽、保護などを行うことができます。この記事では、Swiftにおける各種アクセス修飾子とその使用例について詳しく解説します。
アクセス修飾子の種類
Swiftには以下の5つのアクセス修飾子があります。
-
open
- 別のモジュールでもサブクラス化やオーバーライドが可能。 -
public
- 別のモジュールでもアクセス可能。 -
internal
- 同一モジュール内でアクセス可能(デフォルト)。 -
fileprivate
- 同一ファイル内でのみアクセス可能。 -
private
- 同一スコープ内でのみアクセス可能。
アクセス修飾子による呼び出し可能範囲の比較
以下の表は、各アクセス修飾子によって呼び出し可能な範囲を示しています。
アクセス修飾子 | 同一スコープ | 同一ファイル | 同一モジュール | 別モジュール |
---|---|---|---|---|
open |
✅ | ✅ | ✅ | ✅ (サブクラス化、オーバーライド可能) |
public |
✅ | ✅ | ✅ | ✅ |
internal |
✅ | ✅ | ✅ | ❌ |
fileprivate |
✅ | ✅ | ❌ | ❌ |
private |
✅ | ❌ | ❌ | ❌ |
各アクセス修飾子の詳細と使用例
open
open
修飾子は、クラスやクラスメンバー(メソッド、プロパティ、など)に使用できます。この修飾子を使うと、そのクラスやクラスメンバーは別のモジュールでサブクラス化やオーバーライドが可能になります。
// 別のモジュールでもサブクラス化やオーバーライドが可能
open class OpenClass {
open func openMethod() {
print("Open Method")
}
}
public
public
修飾子は、その要素がどこからでもアクセスできるようにしますが、別のモジュールでのサブクラス化やオーバーライドは不可です。
// 別のモジュールでもアクセス可能だが、サブクラス化やオーバーライドは不可
public class PublicClass {
public func publicMethod() {
print("Public Method")
}
}
internal
internal
はデフォルトのアクセスレベルであり、同一モジュール内であればどこからでもアクセスできます。
// 同一モジュール内でアクセス可能
internal class InternalClass {
internal func internalMethod() {
print("Internal Method")
}
}
fileprivate
fileprivate
は、同一ファイル内でしかアクセスできないように制限します。
// 同一ファイル内でのみアクセス可能
fileprivate class FilePrivateClass {
fileprivate func filePrivateMethod() {
print("FilePrivate Method")
}
}
private
private
は、同一スコープ(ブロック、クラス、構造体、など)内でのみアクセスが可能です。
// 同一スコープ内でのみアクセス可能
private class PrivateClass {
private func privateMethod() {
print("Private Method")
}
}
まとめ
Swiftのアクセス修飾子は、コードの保守性や可読性を高める上で非常に有用です。適切なアクセス修飾子を使うことで、エラーを防ぎ、より安全なコードを書くことができます。この記事が、Swiftでのアクセス修飾子の理解に役立つことを願っています。