Kotlin コンパニオン オブジェクトをいつ、どこで使用するか
Kotlin、Java、C# などのオブジェクト指向プログラミング言語では、メンバーにアクセスするためにクラスのオブジェクトを作成する必要があります。 Kotlin では、次のようになります。
class className{
fun funName() = // code will come here
}
fun main(){
val obj = className()
obj.funName() // calling the function using the class's object
}
ただし、オブジェクトを作成せずにクラスのメソッドにアクセスする方法があります。 そこで Java の static オブジェクトと Kotlin の companion オブジェクトが登場します。
この記事では、companion オブジェクトとそれを Kotlin で使用する方法について学びます。 しかし、その前に、Java の static メソッドの例を見てみましょう。
Java static メソッド
Java では、オブジェクトを作成せずにオブジェクト指向プログラミング アプローチに従うことができます。 static オブジェクトまたはインスタンスを使用してこれを行います。
static キーワードを使用すると、クラス内に静的変数またはメソッドを作成できます。 これらの変数またはメソッドは一定のままであり、初期化後に変更することはできません。
Java での static キーワードの最も重要な用途は、メモリ管理です。 オブジェクトを作成せずに静的変数とメソッドにアクセスできるため、メモリを節約できます。
クラス名の助けを借りて、そのようなメソッドにアクセスできます。
以下の Java プログラムは、同じことを示しています。 このプログラムの cubeNumber() は静的メソッドです。
整数パラメーターを取り、そのキューブを返します。
import java.util.*;
public class Example {
public static void main(String[] args) {
int res = Example.cubeNumber(3);
System.out.println("Cube of 3 is: " + res);
}
public static int cubeNumber(int i) {
return i * i * i;
}
}

ご覧のとおり、cubeNumber() は上記の例の静的メソッドです。 したがって、クラス名を使用して呼び出すことができます。
Kotlin companion オブジェクト
Java には static メソッドがありますが、Kotlin には static はありません。 このような変数を作成する方法はまだありますが、アプローチは異なります。
Kotlin では、キーワード companion オブジェクトを使用してそのようなメソッドを作成します。
キーワード companion は、Java の static キーワードと同じように機能します。 オブジェクトなしで companion キーワードを使用して作成されたメソッドにアクセスできます。
Kotlin での companion オブジェクトの使用を示す例を次に示します。 この例では、Employee クラスを作成します。
次に、companion キーワードを使用して従業員の名前を出力し、クラスのオブジェクトなしでアクセスする関数を作成します。
class Employee {
companion object {
fun printName() = println("Hi, my name is David.")
}
}
fun main(args: Array<String>) {
Employee.printName()
}

関数の名前を省略することもできます。 その場合は、Companion という名前を使用できます。
Kotlin companion オブジェクトはいつ使用する必要がありますか?
Kotlin companion オブジェクトを使用する最良のシナリオは、クラスのオブジェクトの状態に干渉しない場合です。 これは、クラス自体の外部からアクセスする必要がある純粋な関数または最終値を使用している場合、Kotlin companion オブジェクトを使用できることを意味します。
ただし、オブジェクトがクラスのオブジェクトの状態に干渉する場合は、companion オブジェクトを使用しないことをお勧めします。 これは、使用すると多くのエラーが発生する可能性があるためです。
Kailash Vaviya is a freelance writer who started writing in 2019 and has never stopped since then as he fell in love with it. He has a soft corner for technology and likes to read, learn, and write about it. His content is focused on providing information to help build a brand presence and gain engagement.
LinkedIn