static 함수와 변수

Java

public class JavaPerson {
	private static final int MIN_AGE = 1;
	
	public static JavaPerson newBaby(String name);
		return new JavaPerson(name, MIN_AGE);
	}
	
	private String name;
	
	private int age;
	
	private JavaPerson(String name, int age) {
		this.name = name;
		this.age = age;
	}

Kotlin

class Person private constructor(
	private val name: String,
	private val age: Int,
) {
	companion object {
		private val MIN_AGE = 0
		fun newBaby(name: String): Person {
			return Person(name, MIN_AGE)
		}
	}
}
	
	
class Person private constructor(
	private val name: String,
	private val age: Int,
) {
	companion object {
		**private val MIN_AGE = 0 // 런타임시 변수 할당
		private const MIN_AGE = 0 // 컴파일 시 변수 할당**
		fun newBaby(name: String): Person {
			return Person(name, MIN_AGE)
		}
	}
}

fun main() {
	println(Person.newBaby("name1")
}
class Person private constructor(
	private val name: String,
	private val age: Int,
) {
	companion object Factory : Log {
		**private val MIN_AGE = 0 // 런타임시 변수 할당
		private const MIN_AGE = 0 // 컴파일 시 변수 할당**
		fun newBaby(name: String): Person {
			return Person(name, MIN_AGE)
		}
		
		override fun log(){
			println("LOG")
		}
	}
}
 // Java code
Person person = Person.newBaby("A");

// 둘 중 하나만 사용 가능
Person person = Person.Factory.newBaby("A"); // companion object에 이름(Factory)이 있을 경우
Person person = Person.Companion.newBaby("A"); // companion object에 이름이 없을 경우

	companion object Factory : Log {
		**private val MIN_AGE = 0 // 런타임시 변수 할당
		private const MIN_AGE = 0 // 컴파일 시 변수 할당
		
		@JvmStatic**
		fun newBaby(name: String): Person {
			return Person(name, MIN_AGE)
		}
		
		override fun log(){
			println("LOG")
		}
	}