[Kotlin]data class

dada·2021년 8월 27일
0

Kotlin

목록 보기
10/14
post-thumbnail

data class

왜 써야됨?

  • 자바에서 POJO(Plain Old Java Object) 클래스는 '오래된 방식의 간단한 자바 오브젝트'라는 뜻이다. 자바가 가지고 있는 객체 지향의 장점을 끌어올리기 위해서 POJO를 지향해야 한다고 한다.
  • 하지만, 이를 위한 자바 코드를 보면 비즈니스 로직을 갖고 있지 않으면서도 너무 많은 코드를 필요로 한다
  • 따라서 코틀린에서는 이러한 데이터만을 다루는 클래스를 쉽게 구현하기 위해서 제공하는 간편한 문법이 'data class'다.
//이 자바코드가 아래 코틀린 한줄로 바꿀 수 있다
public class Person {
    String name;
    int age;
    String gender;
    
    public Person(String name, int age, String gender) {
        this.name = name;
        this.age = age;
        this.gender = gender;
    }
    
    // getter & setter 생략
}

어떻게 써야됨?

data class 클래스이름(var 변수1, var변수1){}

  • 생성자, getter&setter, canonical methods까지 알아서 생성해줌

  • data class를 활용하기 위해서는 다음의 제한 사항

    • 기본 생성자에 최소 하나의 파라미터가 있어야 함.
    • 기본 생성자의 파라미터는 val이나 var이어야 함.
    • 데이터 클래스는 abstract, open, selaed, inner가 아니어야 함.
data class Person(var name: String, var age: Int, var gender: String)

그밖에도 지원하는 것

Canonical Methods copy메소드 디스트럭쳐링(Destructuring)

  • Canonical Methods?
    캐노니컬 메소드는 Any에 선언된 메소드 (Any는 자바의 Object처럼 코틀린에서 모든 객체의 조상이 되는 객체이다.) 따라서 코틀린의 모든 인스턴스가 갖고 있는 메소드를 뜻한다.

  • 코틀린의 data class는 모든 캐노니컬 메소드를 올바르게 구현하고 있다.

    • equlas(other: Any?): Boolean - 일반 클래스는 equlas()호출하면 인스턴스의 주소값을 비교하지만이 메소드는 참조가 아니라 데이터 클래스 간 값의 일치를 비교한다.
    • hashCode(): Int - 해쉬코드는 인스턴스의 숫자 표현이다. hashCode()가 같은 인스턴스에서 여러 번 호출될 때 항상 동일한 값을 반환해야 한다. equals()로 비교할 때 참을 반환하는 두 인스턴스는 같은 hashCode()를 가져야만 한다.
    • toString(): String - 일반 클래스는 toString()호출하면 인스턴스의 주소값을 반환하지만, 데이터 클래스는 이를 멤버 변수의 값을 나열하도록 자동으로 재정의 한다.

  • copy메소드
    • 코틀린의 데이터 클래스는 copy() 메소드를 통해 원하는 파라미터를 오버라이딩해서 데이터 클래스의 새로운 인스턴스를 생성할 수 있게 함
      즉, 얕은 복사와 깊은 복사 중에서도 깊은 복사에 해당하는 copy임
val student = Member("jihee", 28)
val student1 = student.copy(name = "gilbog")  // 이름만 gilbog로 바꾸고 나이는 student에서 복사

  • 디스트럭쳐링(Destructuring)
    • 하나의 인스턴스를 여러 개의 변수로 분리하는 것
fun main (args:Array<String>) {
    val student: simple = simple("김연아", 21)
    var (name, age) = student
    name="박지성"
    println(student.name) //김연아
}

참고
https://readystory.tistory.com/85
정리블로그

profile
'왜?'라는 물음을 해결하며 마지막 개념까지 공부합니다✍

0개의 댓글