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