//생성자 앞에 키워드가 없다면 Field.classPerson(firstName: String, lastName: String, age: Int)//생성자 앞에 var 혹은 val과 같은 키워드가 붙는다면 Property.classPerson(val firstName: String, val lastName: String, val age: Int)//생성은 둘다 똑같은 방법으로 한다.val person =Person("k", "H", 345)val person2 =Person2("k", "H", 345)
//kotlin//Kotlin에서는 이 정도면 끝난다.//프로퍼티로 선언을 하면 내부적으로 알아서 getter, setter를 만들어주기 때문에 보일러플레이트가 사라진다.classPersonKotlin(var firstName: String, var lastName: String, var age: Int)
필드로 만드는 것과 프로퍼티로 만드는 것의 가장 큰 차이는 내부적으로 getter, setter가 만들어지느냐 아니냐의 차이다.
필드로 생성하면 내부적으로 getter, setter가 만들어지지 않는다.
프로퍼티로 선언을 해야지만 내부적으로 getter, setter가 만들어진다. (val은 자바의 final과 같이 불변이므로 내부적으로 getter는 만들어지지만, setter는 만들어지지 않는다.)
public, private, protected 와 같은 접근제한자도 자바에서와 동일하게 사용할 수 있고, 접근제한자만 잘 사용한다면 보일러플레이트들을 많이 제거할 수 있다.
필드를 하나 선언을 하고 그 바로 밑에 get(), set() 함수를 만들어 커스텀 getter, setter를 만들수도 있다.
//kotlinclassPerson {var name: String=""get() =field.toUpperCase() //프로퍼티의 실제 값에 접근해서 가져올때 field. 로 접근한다.set(value) { //set()으로 받아온 값을 value로 표시.field="Name : "+value }var name1: String=""get() {field.toUpperCase()return"aaa" }set(value) {field="Name : "+value }}var person =Person()person.name ="test"println(person.name) //NAME : TESTperson.name1 ="test"println(person.name1) //aaa