-
(1분 읽기) Kotlin Class vs Data Class의 생성자 완벽 비교 🚀Android 개발/개념 & 기초 2025. 3. 2. 00:19
Kotlin에서 Class와 Data Class는 생성자(Constructor)를 사용하지만 의미와 역할이 미묘하게 달라!
이 차이를 정확히 이해하면 면접 질문에서도 당황하지 않고 답변할 수 있어! 😎
🔥 Class에서 생성자란?
- 객체가 생성될 때 호출되는 초기화 함수
- 초기 값을 설정하고 프로퍼티를 초기화해
- 기본 생성자(Primary Constructor)와 보조 생성자(Secondary Constructor)로 나뉨
class Person(val name: String, var age: Int) { // 초기화 블록 init { println("초기화: 이름은 $name, 나이는 $age") } // 보조 생성자 constructor(name: String) : this(name, 0) { println("보조 생성자 호출: 이름만 설정") } }
✅ Class 생성자의 특징
- Primary Constructor는 클래스 헤더에 선언
- init 블록을 사용해 초기화 로직 작성 가능
- Secondary Constructor는 constructor 키워드를 사용하며 **this()**로 Primary Constructor 호출해야 함
- 기본 생성자를 명시하지 않으면 디폴트 생성자가 자동으로 생성
🔥 Data Class에서 생성자란?
- Primary Constructor만 사용 가능 (보조 생성자 사용 불가)
- 자동으로 프로퍼티가 val 또는 var로 생성돼
- equals(), hashCode(), toString(), copy() 등의 기본 메서드가 자동 생성
data class User(val name: String, var age: Int)
✅ Data Class 생성자의 특징
- Primary Constructor만 허용되며 Secondary Constructor 사용 불가
- val 또는 var로 선언된 프로퍼티만 데이터 클래스의 주 생성자에 포함돼
- 자동 생성 메서드
- equals() ➡️ 값을 비교 (깊은 비교)
- hashCode() ➡️ 해시코드 자동 생성
- toString() ➡️ User(name=홍길동, age=25)처럼 문자열 출력
- copy() ➡️ 객체 복사 및 값 변경
- componentN() ➡️ 구조 분해 문법 지원
fun main() { val user1 = User("홍길동", 25) val user2 = user1.copy(age = 30) println(user1) // User(name=홍길동, age=25) println(user2) // User(name=홍길동, age=30) val (name, age) = user1 println("$name, $age") // 홍길동, 25 }
❓ 같은 의미인가?
아니! 👎
- Class의 생성자는 객체 초기화 및 커스터마이징에 더 유연함
- Data Class의 생성자는 데이터 저장 및 비교를 위한 자동 메서드 제공
- Data Class는 **VO(Value Object)**나 **DTO(Data Transfer Object)**에 최적화돼 있어
🚀 면접 질문 완벽 답변하기!
"Class에서 생성자는 객체가 생성될 때 호출되는 초기화 함수로, Primary Constructor와 Secondary Constructor가 있습니다. Primary Constructor는 클래스 헤더에 선언되며 init 블록을 통해 초기화할 수 있고, Secondary Constructor는 constructor 키워드로 선언해 Primary Constructor를 호출합니다. 반면, Data Class에서는 Primary Constructor만 사용하며 자동으로 equals(), hashCode(), toString(), copy() 같은 메서드가 생성됩니다. 또한 Data Class는 주로 VO나 DTO처럼 데이터를 저장하고 비교하는 용도로 사용됩니다. 따라서 Class는 커스터마이징이 필요한 경우에, Data Class는 데이터 저장과 비교가 필요한 경우에 적합합니다."
구분 Class 생성자 Data Class 생성자 타입 Primary & Secondary Constructor Primary Constructor만 사용 초기화 방식 init 블록, this() 사용 Primary Constructor에서 자동 초기화 메서드 자동생성 X equals(), hashCode(), toString(), copy() 등 사용 목적 커스터마이징, 복잡한 초기화가 필요한 경우 VO, DTO, 데이터 저장 및 비교가 필요한 경우 구조 분해 X componentN() 메서드로 구조 분해 지원 가독성 및 유지보수 복잡한 초기화 로직으로 인해 코드가 길어질 수 있음 간결한 데이터 저장 및 비교용 클래스 작성 가능
💡 언제 사용해야 할까?
- Class는 복잡한 초기화 로직이나 여러 생성자가 필요한 경우 사용
- Data Class는 데이터 저장 및 비교가 필요한 VO, DTO에서 사용
🏆 결론!
- Class 생성자는 초기화 커스터마이징과 복잡한 로직이 필요한 경우!
- Data Class 생성자는 데이터 저장 및 비교가 필요한 경우!
- 상황에 맞는 선택으로 코드 가독성과 유지보수성을 높이자! 🚀
이제 Class와 Data Class의 생성자 차이를 완벽하게 이해했지?
면접에서 질문이 나와도 자신 있게 대답할 수 있을 거야! 😎
꼭 필요한 개념이니 완벽하게 이해하고 실무에서도 유용하게 활용해보자! 🚀'Android 개발 > 개념 & 기초' 카테고리의 다른 글
(1분 읽기) XML이란? 📚 (0) 2025.02.26 (1분 읽기) JSON이란? 📚 (1) 2025.02.23 (1분 읽기) 안드로이드에서 도메인 모델과 데이터베이스 Entity 🤔 (0) 2025.02.18 (1분 읽기) Parcelable이 뭐야? 🤔 (2) 2025.02.17 (1분 읽기) Serializable이 뭐야? 🤔 (0) 2025.02.17