Kotlinの可視性修飾子を完全ガイド!public・private・internalの意味と使い分けを初心者向けに解説
生徒
「Kotlinでよく見るpublicとかprivateって何ですか?書かなくても動くこともあるし、混乱してます…」
先生
「それは“可視性修飾子”といって、コードの中で何がどこから見えるかをコントロールするためのものなんです。」
生徒
「なるほど。じゃあどうやって使い分ければいいんですか?」
先生
「それでは、Kotlinのpublic・private・internalの使い方と違いについて、順番に学んでいきましょう!」
1. 可視性修飾子とは?
Kotlinでプログラムを書くとき、「どこからそのクラスや関数が見えるのか」を決める仕組みがあります。それが可視性修飾子(Visibility Modifiers)です。
小さなサンプルで考えると分かりやすいです。もし、すべての情報が丸見えになってしまうと、外部から勝手に使われたり、名前がかぶったりして混乱の原因になります。
そこで「公開するもの」と「隠すもの」を選べるようにして、必要な場所だけに見えるようにするのが可視性修飾子の役割です。
class Box {
val publicData = "だれでも見えるよ" // public扱い
private val secret = "ないしょ" // クラスの外からは見えない
}
このように、同じクラスの中でも「見えるもの」と「見えないもの」を分けられます。特にプログラムが大きくなるほど、この考え方がとても大切になります。
Kotlinでよく使う可視性修飾子は次の3つです:
- public(パブリック):どこからでも見える
- private(プライベート):そのクラスやファイルの中だけで見える
- internal(インターナル):同じモジュールの中なら見える
「公開したい場所だけに見せる」。たったこれだけで、コードはぐっと安全で読みやすくなります。
2. publicの使い方と特徴
publicは「誰からでも見えてOK!」という意味です。
実はKotlinでは、publicは省略可能で、何も書かないと自動的にpublicになります。
public class Person(val name: String) {
public fun sayHello() {
println("こんにちは、$nameです")
}
}
fun main() {
val p = Person("さくら")
p.sayHello()
}
こんにちは、さくらです
このように、他の場所から自由に呼び出せるのがpublicです。
3. privateの使い方と特徴
privateは「自分だけで使いたい」関数や変数に使います。外からは見えなくなります。
クラスの内部だけで動かしたい処理をprivateにしておくことで、誤って他の場所から使われるのを防げます。
class Calculator {
private fun add(a: Int, b: Int): Int {
return a + b
}
fun showSum() {
println(add(5, 3))
}
}
fun main() {
val calc = Calculator()
calc.showSum()
// calc.add(5, 3) はエラーになります
}
8
add()関数はprivateなので、Calculatorの外からは見えません。
4. internalの使い方と特徴
internalは「同じモジュール内なら見えてOK!」という意味です。
モジュールとは、アプリを構成する部品のようなもので、プロジェクトが分かれている場合に「その中だけで使える」範囲を決めるのがinternalです。
internal class InternalClass {
fun message() {
println("このクラスはモジュール内で使えます")
}
}
たとえば、Androidアプリで「ひとつの機能を作るモジュール」などがある場合、internalで外部との境界を作ることができます。
5. それぞれの可視性修飾子の比較まとめ
Kotlinのpublic・private・internalの違いを一覧で見てみましょう。
| 修飾子 | アクセスできる範囲 | 用途 |
|---|---|---|
public |
どこからでも | 広く使ってほしい機能 |
private |
クラスまたはファイル内 | 内部でのみ使いたい処理 |
internal |
同じモジュール内 | モジュール内で共有したい処理 |
6. クラスだけでなく関数や変数にも使える!
可視性修飾子は、クラスだけでなく、関数・変数・プロパティなど、さまざまな場所に使えます。
class Sample {
private val secret = "ひみつ"
fun showSecret() {
println(secret)
}
}
fun main() {
val s = Sample()
s.showSecret()
// s.secret は見えないのでエラーになります
}
ひみつ
外部から見られたくない情報をprivateにして守ることで、安全なコードになります。
7. なぜ可視性修飾子が大切なの?
すべてpublicにしてしまうと、誰でも好き勝手にそのコードを呼び出せてしまい、バグやトラブルの元になります。
必要なものだけを公開し、それ以外はprivateやinternalで隠すことで、安全でわかりやすいプログラムが書けるようになります。
「見せるもの」と「隠すもの」を意識することは、プログラミングでとても大事な考え方です。
まとめ
Kotlinにおける「可視性修飾子」は、クラスや関数、変数が「どの範囲からアクセスできるか」を明確にするための重要な機能です。この記事では、Kotlinでよく使われる3つの可視性修飾子である public、private、internal を中心に、それぞれの役割や違い、実践的な使い方について詳しく解説しました。
まずpublicは、特に指定がなければ自動的に適用されるデフォルトの修飾子で、他のクラスやモジュールからも自由にアクセスできる公開状態です。共有ライブラリや、どこからでも使いたい関数に適しています。
一方、privateはクラス内やファイル内のみにアクセスを制限するため、外部に触れてほしくないデータやロジックを隠すのに役立ちます。たとえば、計算処理や内部状態を管理する変数などに使うと安全性が高まります。
そしてinternalは、モジュール単位での可視性を制御します。複数の機能に分割されたプロジェクト構成において、特定のモジュール内だけで共有したいコードに対して使うことで、他モジュールからの不要なアクセスを防げます。
可視性修飾子は、ただの構文的なキーワードではなく、「このコードは誰に見せたいのか」「どこまで使わせたいのか」という設計の意図を表す手段です。Kotlinの可視性制御を適切に使いこなすことで、チーム開発でもバグの予防や保守性の向上につながります。
また、Kotlinではクラスだけでなく、関数、プロパティ、ローカル変数にも可視性修飾子をつけることができるため、きめ細やかなアクセス制御が可能です。とくに、変数をprivateにしつつ、外部から読み取り専用でアクセスさせたい場合は、getterのみpublicにするなどの柔軟な設計も可能です。
実際の開発では、まずすべてprivateから始めて、必要に応じてinternalやpublicに切り替えていく「最小公開の原則」を守ると、コードの安全性と拡張性がぐっと高まります。
参考:Kotlinでの可視性修飾子の基本構文
public class MyClass {
private val hiddenValue = 10
internal fun internalMethod() { println("内部モジュールだけで使う") }
public fun show() { println("これはどこからでも使える") }
}
Kotlinの可視性修飾子は、Androidアプリ開発やサーバーサイド開発でも頻繁に使われる基礎文法です。適切に活用することで、より安全で読みやすいコードを書くことができます。とくに初心者のうちは、privateをしっかり使って「隠す設計」に慣れることが、良い習慣になります。
可視性修飾子の設計は、小さなコードでも、大きなプロジェクトでも品質に大きな差を生むポイントです。この機会にしっかり理解しておきましょう。
生徒
「やっとpublicとprivateの違いがわかってきました。今までは何となく書いてました…」
先生
「それは良かったです!可視性修飾子をしっかり使い分けることは、品質の高いコードを書くためにとても大切ですよ。」
生徒
「internalの使いどころは少し難しそうですね。どんなときに使えばいいんですか?」
先生
「たとえば、Androidアプリでモジュールごとに機能を分けている場合など、他のモジュールには見せたくないけど、同じモジュール内では共有したい処理にinternalを使うといいですね。」
生徒
「なるほど。じゃあ、基本はprivateで隠しておいて、必要に応じてinternalやpublicにすればいいんですね!」
先生
「その通りです!“最小限だけ見せる”という意識を持つだけで、ぐっと安全で保守しやすいコードになりますよ。」