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