클래스와 프로퍼티

public class JavaPerson{
    private final String name;
    private int age;
    
    public JavaPerson(String name, int age){
        this.name = name;
        this.age = age;
    }
    
    public String getName(){
        return name;
    }
    
    public int getAge(){
        return age;
    }
    
    public setName(String name) {
        this.name = name;
    }
    
    public setAge(int age) {
        this.age = age
    }        
}
fun main(){
	p = Person()
	
	println(p.name) // call getter 
	p.name = "name" // call setter
}

class Person constructor(name: String, age: Int){
    val name = name
    var age = age
}

**//constructor 키워드 생략 가능
//클래스 필드 선언과 생성자를 동시에 선언 가능
// 본문 내용이 없으면 body({})를 생략 가능
class Person(val name: String, var age: Int)**

생성자와 init

    public JavaPerson(String name, int age){
        if (age <= 0) {
            throw new IllegalArgumentException(String.format("나이 %s는 1 이상이어야 합니다."), age)
        }
        this.name = name;
        this.age = age;
    }
    
class Person(val name: String, var age: Int){
    init {
        if (age <= 0 ) {
            throw IllegalArgumentException("나이 ${age}는 1 이상이어야 합니다.")
        }
    }
}

constructor(name: String) : this(name, 1)

코틀린에서는 부 생성자 보다 default parameter를 권장함