데이터 클래스(Data Class)와 객체 복사(copy)
데이터 클래스는 데이터를 저장하고 전달하는 용도로 최적화된 클래스이다.
코틀린에서는 data 키워드 하나로 자동으로 여러 편의 기능을 제공한다.
데이터 클래스 기본 선언
이 한 줄로 아래 기능들이 자동 생성된다.
-
toString() -
equals()/hashCode() -
copy() -
componentN()(구조 분해 선언)
데이터 클래스의 주요 특징
| 항목 | 설명 |
|---|---|
| 키워드 | data |
| 목적 | 값 저장 중심 클래스 |
| 생성자 | 반드시 최소 하나의 매개변수 필요 |
| 기본 생성 메서드 | toString, equals, hashCode, copy, componentN 자동 생성 |
| open / abstract 불가 | 상속에는 제한이 있음 (final 클래스) |
데이터 클래스 생성 및 사용 예시
copy() 함수로 객체 복사
데이터 클래스의 핵심 기능 중 하나는 copy() 함수다.
기존 객체의 일부 속성만 변경하여 새 객체를 만들 수 있다.
copy()는 얕은 복사(Shallow Copy)
copy()는 기본 타입(primitive) 은 새로 복사하지만,
참조 타입(reference) 은 주소만 복사한다.
깊은 복사(Deep Copy) 가 필요하다면 직접 구현해야 한다.
구조 분해 선언 (Destructuring Declarations)
데이터 클래스는 componentN() 함수를 자동 생성하기 때문에 구조 분해가 가능하다.
equals()와 hashCode() 자동 생성
equals()는 값 기반 비교,hashCode()는 값에 따라 동일한 해시값을 자동 생성한다.
toString() 자동 생성
객체를 문자열로 표현할 때 보기 좋게 자동으로 변환된다.
데이터 클래스와 일반 클래스 비교
| 구분 | 일반 클래스 | 데이터 클래스 |
|---|---|---|
| 선언 키워드 | class |
data class |
toString() |
수동 구현 필요 | 자동 생성 |
equals() / hashCode() |
수동 구현 필요 | 자동 생성 |
copy() |
없음 | 자동 생성 |
| 구조 분해 | 불가능 | 가능 |
데이터 클래스에서 사용 불가한 문법
-
abstract,open,sealed,inner클래스는 불가능 -
주 생성자에 최소 하나의
val또는var파라미터 필요
실전 예시: 서버 응답 모델
데이터 클래스는 API 응답 객체로 자주 사용된다.
실전 예시: 리스트 비교 및 복사
팁
-
DTO, VO, Model 클래스로 가장 적합하다.
-
copy()를 활용하면 불변 객체(Immutable Object)처럼 다룰 수 있다. -
equals()자동 생성 덕분에 리스트 비교나 Map 키로도 유용하다. -
깊은 복사(Deep Copy)가 필요한 경우, 중첩 데이터 클래스에 대해 수동 구현을 고려하자.

답글 남기기