Learn about classes, properties and data classes and then rewrite the following Java code to Kotlin:
public class Person {
private final String name;
private final int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
}
Afterward, add the data modifier to the resulting class. The compiler will generate a few useful methods for this class: equals/hashCode, toString, and some others.
class Person
fun getPeople(): List<Person> {
return listOf(Person("Alice", 29), Person("Bob", 31))
}
fun comparePeople(): Boolean {
val p1 = Person("Alice", 29)
val p2 = Person("Alice", 29)
return p1 == p2 // should be true
}
data class Person (
val name: String,
val age: Int
)
fun getPeople(): List<Person> {
return listOf(Person("Alice", 29), Person("Bob", 31))
}
fun comparePeople(): Boolean {
val p1 = Person("Alice", 29)
val p2 = Person("Alice", 29)
return p1 == p2 // should be true
}
관련된 데이터 여러 개를 클래스로 묶어서 이용하려는 클래스를 보다 편하게 이용하기 위해서 data 클래스
를 사용한다.
자바 코드에서 Person
클래스는 한 번 생성된 이후에는 name
과 age
값을 변경할 수 없도록 private final
제어자를 이용하여 만들었다.
코틀린으로 바꿔서 작성할 경우 val
키워드를 이용하여 작성해주면 된다.
변수 선언법
val
: 불변 변수로, 값의 읽기만 허용되는 변수(Value)var
: 가변 변수로 값의 읽기와 쓰기가 모두 허용되는 변수(Variable)data class
일반 클래스와 data 클래스의 다른점은 class 앞에 data
예약어가 붙는다.
data 클래스 생성 조건
data 클래스 생성시 컴파일러가 자동으로 생성해주는 것들
주 생성자
: 선언된 모든 프로퍼티를 파라미터로 가지는 생성자equals()
: 객체의 모든 프로퍼티를 비교하여 두 객체가 같은지 확인하는 메서드hashCode()
: 객체의 해시 코드를 반환하는 메서드toString()
: 객체의 내용을 문자열로 반환하는 메서드componentN()
: 객체의 프로퍼티를 개별적으로 반환하는 함수들copy()
: 객체를 복사하면서 일부 프로퍼티를 변경할 수 있는 메서드