[kotlin] 데이터 클래스(data class)
데이터 클래스란
데이터 클래스란 자바의 DTO와 같은 개념입니다
🟤 자바에서의 DTO
public class User() {
String id;
int age;
public User(String id, int age) {
this.id = id;
this.age = age;
}
//getter & setter 생략
}
해당 클래스는 단순히 데이터를 request받거나 response해주는 클래스이지만
너무 많은 코드를 필요로 하는데요 코틀린에서는 아주 간편하게 만들 수 있습니다.
🟣 코틀린에서의 DTO(data class)
data class User(var Id: String, var Password String)
해당 한 줄로 생성자부터 getter와setter 그리고 canonical methods까지 자동 생성됩니다!
이러한 데이터 클래스를 선언하기 위한 몇가지 조건이 있는데요
- 기본 생성자에는 최소 하나의 파라미터가 있어야 함.
- 기본 생성자의 파라미터는 val or var여만 함.
- 데이터 클래스는 abstract, open, sealed, inner가 되면 안됨.
⚙ Canonical Methods
캐노니컬 메소드는 Any에 선언된 메소드 입니다.
(Any란 자바의 Object처럼 코틀린에서 모든 객체의 조상 객체입니다.)
코틀린의 data class는 다음과 같이 모든 캐노니컬 메소드를 구현하고 있는데요.
- equals(other:Any?): Boolean - 이 메소드는 참조가 아닌 데이터 클래스 간 값의 일치를 비교합니다
- hashCode(): Int - 해쉬코드는 인스턴스의 숫자 표현입니다. hashCode()가 같은 인스턴스에서 여러 번 호출 될 때 항상 동일한 값을 반환해야 합니다. equals()로 비교할 때 참을 반환하는 두 인스턴스는 같은 hashCode()를 가져야만 합니다.
- toString(): String - 인스턴스의 문자열 표현입니다. 데이터 클래스는 멤버 변수의 값을 나열하도록 자동으로 재정의 합니다.
🔍 copy() 메소드
코틀린의 데이터 클래스는 copy() 메소드도 제공하는데요, 해당 메소드는 원하는 파라미터를
오버라이딩 해서 데이터 클래스의 새로운 인스턴스를 생성할 수 있게 합니다.
새로운 인스턴스를 생성하니 깊은 복사라고 할 수 있겠죠?
자바에서 DTO객체를 깊은 복사하려면 여러 작업들이 필요하지만
코틀린은 copy() 메소드로 손 쉽게 깊은복사를 할 수 있습니다!
val oldUser = User("jeongho", 22)
val newUser = oldUser.copy(id = "newJeongho") // 이름만 변경되고 나이는 oldUser에서 복사
📰 디스트럭쳐링Destructuring
코틀린은 디스트럭쳐링을 제공하는데요. 디스트럭쳐링으로 인해 아래와 같이
해당 데이터 객체가 갖고 있는 데이터를 별도의 작업없이 꺼내 올 수 있습니다!
val user: User = User("jeongho", 22)
val (id, age) = user
경우에 따라 사용되지 않는 값은 밑줄(_)로 대체 할 수 있습니다.
val (id, _) = user
Author And Source
이 문제에 관하여([kotlin] 데이터 클래스(data class)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@usa_dev/kotlin저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)