Data Class
ํด๋์ค ์ค ๋ฐ์ดํฐ๋ง์ ๊ฐ๋ ํด๋์ค
์ ์ฝ์ฌํญ
primary constructor (default constructor)๋ฅผ ์ ์ธํด ์ฃผ์ด์ผํ๋ค.
๊ทธ ์ธ์๋ 1๊ฐ ์ด์์ด์ด์ผ ํ๋ฉฐ, ๋ชจ๋ Property์ฌ์ผ ํ๋ค. ( var ํน์ val )
abstract, open, sealed, inner ๊ฐ ์๋์ด์ผ ํ๋ค.
์ฅ์
์ปดํ์ผ๋ฌ๊ฐ ์๋์ผ๋ก equals(), hashcode(), copy(), toString() ๋ฉ์๋๋ฅผ ์์ฑํด์ค๋ค.
componentN() ํจ์๋ฅผ ์ ๊ณตํ๋ค. (Destructuring)
๋ฐ์ดํฐ์ ๋ํด ์ ๊ฒฝ์ฐ์ง ์๊ณ ๋ก์ง์๋ง ์ง์คํ ์ ์๋ค.
//java
public class JavaPerson {
private String firstName;
private String lastName;
private int age;
public String getFirstName() { return firstName; }
public void setFirstName(String firstName) { this.firstName = firstName; }
public String getLastName() { return lastName; }
public void setLastName(String lastName) { this.lastName = lastName; }
public int getAge() { return age; }
public void setAge(int age) { this.age = age; }
@Override
public boolean equals(Object o) {
if (this == o) {
return true;
}
if (o == null || getClass() != o.getClass()) {
return false;
}
JavaPerson that = (JavaPerson) o;
if (age != that.age) {
return false;
}
if (firstName != null ? !firstName.equals(that.firstName) : that.firstName != null) {
return false;
}
return lastName != null ? lastName.equals(that.lastName) : that.lastName == null;
}
@Override
public int hashCode() {
int result = firstName != null ? firstName.hashCode() : 0;
result = 31 * result + (lastName != null ? lastName.hashCode() : 0);
return result;
}
}
//ํ...
//Kotlin์์์ data class ์์ฑ. class ํค์๋ ์์ data๋ฅผ ๋ถ์ธ๋ค.
data class DataClassPerson(val firstName: String, val lastName: String, val age: Int)
๊ฐ-๊ฒฐ
val person = Person("k", "H", 345)
val person1 = Person("k", "H", 345)
val dataClassPerson = DataClassPerson("k", "H", 345)
val dataClassPerson1 = DataClassPerson("k", "H", 345)
println(person == person1) //false, ๋๋ฑ์ฑ ๋น๊ต๋ฅผ ์ํด equals()๋ฅผ ์ฌ์ ์ ํด ์ค ํ์๊ฐ ์๋ค.
println(dataClassPerson == dataClassPerson1) //true, ๊ฐ์ด ๋ค ๊ฐ๊ณ ์ปดํ์ผ๋ฌ๊ฐ ๋ด๋ถ์ ์ผ๋ก equals()๋ฅผ ๋ง๋ค์ด ์ฃผ๊ธฐ ๋๋ฌธ์.
println(dataClassPerson.hashCode()) // ex) -1043107127
println(dataClassPerson1.hashCode()) // ex) -1043107127, ๊ฐ์ ๊ฐ์ด ๋์จ๋ค.
println(person.toString()) //Main$Person@76ed5528
println(dataClassPerson.toString()) //DataClassPerson(firstName="k", lastName="H", age=345)
//๋ด๋ถ์ ์ผ๋ก toString()์ ๋ง๋ค์ด์ฃผ๊ธฐ ๋๋ฌธ.
๊ธฐ๋ณธ์ ์ผ๋ก Property ๋ค๋ง ๋ง๋ค์ด ์ฃผ๋ฉด ๋๊ณ , ๊ทธ ์ธ์ ์ปค์คํ ํ๊ฒ Function ์ด๋ผ๋์ง Method ๋ผ๋์ง ์ด๋ค ์ํ๋ฅผ ํ์ํด ์ฃผ๋ ค๋ฉด ๊ทธ๊ฒ๋ค๋ง ๋ณ๋๋ก ๊ตฌํํด ์ฃผ๋ฉด ๋๋ค.
data class Person(val firstName: String, val lastName: String, val age: Int)
val person = Person("k", "H", 345)
println(person.component(1)) //k
println(person.component(2)) //H
println(person.component(3)) //345
//์ปดํฌ๋ํธ๋ฅผ ๊ฐ์ง๊ณ ์ด๋ฐ์์ผ๋ก ๊ฐ์ ธ์ค๋ ๊ฒ์ Destructuring์ด๋ผ๊ณ ํ๋ค. ์์ฑํ๊ฒ์ 1๊ฐ์ฉ 1๊ฐ์ฉ ์ชผ๊ฐ๋ ๊ฒ.
//Destructuring์ ํ๋ฉด ๊ฐ๊ฐ ํ๋๊ฐ ๋ณ์๊ฐ ๋๋๊ฒ์ด๊ณ ๊ฐ๊ฐ ์ ๊ทผํ ์๊ฐ ์๋ค.
val (firstName, lastName, age) = person
println(firstName)
println(lastName)
println(age)
//copy()
//data class์์ ์ผ๋ถ์ ๋ฐ์ดํฐ๋ง ๋ณ๊ฒฝํด์ ๋ณต์ฌํ๊ณ ์ถ์๋ ์ฌ์ฉํ๋ค.
val copyPerson = person.copy(age = 19) //age์ ๊ฐ๋ง ๋ฐ๋ ๋ฐ์ดํฐํด๋์ค.
println(copyPerson) // Person(firstName=k, lastName=H, age=19)
Last updated