TIL

Lec 09. 코틀린에서 클래스를 다루는 방법

1. 클래스와 프로퍼티

public class JavaPerson {

  private final String name;
  private int age;

  public JavaPerson(String name, int age) {
    if (age <= 0) {
      throw new IllegalArgumentException(String.format("나이는 %s일 수 없습니다", age));
    }
    this.name = name;
    this.age = age;
  }

  public JavaPerson(String name) {
    this(name, 1);
  }

  public String getName() {
    return name;
  }

  public int getAge() {
    return age;
  }

  public void setAge(int age) {
    this.age = age;
  }

  public boolean isAdult() {
    return this.age >= 20;
  }

}
class Person(
    val name: String,
    var age: Int
) {
    init {
        if (age <= 0) {
            throw IllegalArgumentException("나이는 ${age}일 수 없습니다.")
        }
    }
    
    constructor(name: String): this(name, 1)
}

생성자와 프로퍼티

2. 생성자와 init

class Person(
    val name: String,
    var age: Int = 1
)

3. 커스텀 getter, setter

fun isAdult(): Boolean = age >= 20

custom getter

val isAdult: Boolean 
        get() = this.age >= 20
        
val isAdult: Boolean
        get() {
          return this.age >= 20
        }
// name을 get할 때 대문자로 바꿔야 하는 경우
class Person(
    name: String, // custom getter를 위해 생성자에서 val 키워드 제거
    var age: Int = 1
) {

    val name: String = name // 주 생성자에서 받은 name을 불변 프로퍼티 name에 바로 대입
        get() = field.uppercase()
}

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

    val uppercaseName: String 
        get() = name.uppercase()
}

custom setter

var name: String = name
    set(value) {
      field = value.uppercase()
    }