【正社員】還元率83%【フリーランス】マージン一律5万円で案件をご紹介させていただきます。 詳細はこちら

【Android】<Kotlin>アクセス修飾子まとめ!public / private / protected / internal の違いを徹底解説

【Android】<Kotlin>アクセス修飾子まとめ!public / private / protected / internal の違いを徹底解説
すだ

みなさまこんにちは〜!
メモリアインクのすだです。

今回は、たまに迷いがちな 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エンジニアを目指すなら【ユニゾンキャリア】
を通じて、
自分の市場価値をさらに向上させてみませんか?

それではまた次回の記事でお会いしましょう!

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

弊社テックブログをご愛読いただきありがとうございます。
当テックブログを運用している株式会社メモリアインクは、
【正社員】還元率83%
【フリーランス】マージン一律5万円で案件のご紹介
と、エンジニアの皆様に分かりやすい形で稼げる仕組みを構築し提供させていただいております。

コメント

コメントする

目次