TIL

아이템 33 생성자 대신 팩토리 함수를 사용하라

Companion 객체 팩토리 함수

interface MyList<T> {
	// ...
	companion object {
		fun <T> of(vararg elements: T): MyList<T>? {
			// ...
		}
	}
	// ...
}
abstract class ActivityFactory {
	abstract fun getIntent(context: Context): Intent
	
	fun start(context: Context) { /* */ }
	
	fun startForResult(activity: Activity, requestCode: Int) { /* */ }
}

class MainActivity: AppCompatActivity() {
	// ...
	companion object: ActivityFactory() {
		override fun getIntent(context: Context): Intent = 
			Intent(context, MainActivity::class.java)
	}
}

// 사용
val intent = MainActivity.getIntent(context)
MainActivity.start(context)
MainActivity.startForResult(activity, resultCode)

확장 팩토리 함수

fun Tool.Companion.createBigTool( /*...*/ ): BigTool {
	// ...
}

톱레벨 팩토리 함수

가짜 생성자

A() // 생성자
a() // 톱레벨 함수
List(4) { "User$it" } // [User0, User1, User2, User3]
public inline fun <T> List(size: Int, init: (index: Int) -> T): List<T> 
	= /* ... */

팩토리 클래스의 메서드