
みなさまこんにちは〜!
メモリアインクのすだです。
今回は、たまに迷いがちな Kotlinのアクセス修飾子について
実際のコードを用いてわかりやすく説明していきます!
この記事を読んでわかること…
・Kotlinの4つのアクセス修飾子の使い方と、その違いについて
環境
- Kotlin (ver 1.9.0)
- Android Studio (Giraffe | 2022.3.1 Patch 3)
Kotlinの4つのアクセス修飾子、使い方と違い
修飾子(access modifier)とは、
クラスや関数、変数などに対して「どこから使えるか(=アクセスできる範囲)」を制限するキーワードです。
Kotlinでは以下の4種類があります:
修飾子 | 意味 |
---|---|
public | 全体に公開しても問題ないもの |
private | 完全に隠したい(クラス内だけ) |
protected | 継承クラスだけに見せたい |
internal | 同じモジュール内だけに見せたい(後悔はしたくない) |
public
Kotlinでは何も指定しなければ デフォルトでpublic
扱いになります。(= 省略可能)
アプリ全体で共有しても問題ない関数やクラスの修飾子として使用します。
public 使用例 ▼
public class User(val name: String) {
public fun sayHello() {
println("こんにちは!")
}
}
呼び出し例 ▼
val user = User("さくら")
user.sayHello() // ← どこからでも呼べる
private
クラスの内部だけで使える、外部から絶対にアクセスさせたくない処理や値に使います。
たとえば、セキュリティのためのパスワードや外から勝手に変更されたくない状態管理プロパティ、公開する必要のない一時的な変数など。
private 使用例 ▼
class Counter {
private var count = 0
fun increment() {
count++
}
fun getCount(): Int {
return count
}
}
protected
privateと似ていますが、protectedは継承を前提とした設計で使われます。
つまりは、サブクラス(子クラス)からのみ使えるようにしたいという場合に最適な修飾子です。
protected 使用例 ▼
open class Animal {
protected fun speak() {
println("なにかの鳴き声")
}
}
呼び出し例 ▼
class Dog : Animal() {
fun bark() {
speak() // ← OK:protected は継承先から使える
}
}
internal
internal
は Kotlin 独自のアクセス修飾子で、
そのモジュールの中だけで見えるクラス・関数として制限されます。
モジュールとは、簡単にいうと ビルド単位のまとまり(= Gradle単位のプロジェクトのかたまり)のことで
:app(本体)や :core、:feature、:library などを指します。
たとえば、
internale 実装例 ▼
// :network モジュール
internal class ApiClient {
fun request() = println("通信中...")
}
このように、外部の :app モジュールには見えないが 外からは NetworkRepository
などの public な窓口だけ使わせる というような場合に有効です。
まとめ
おつかれさまでした。いかがでしたでしょうか!
アクセス修飾子は、つい適当に使ってしまいがちですが、
意識して適切に使い分けることで、コードの可読性や安全性(セキュリティ)を大きく向上させることができます。
ぜひ使いこなして、実装に役立ててください!



技術者としてのキャリアパスを次のレベルへと進めたい皆様、
<未経験からIT・Webエンジニアを目指すなら【ユニゾンキャリア】>
自分の市場価値をさらに向上させてみませんか?
それではまた次回の記事でお会いしましょう!
コメント