kotlin에 있는 data, enum, object는 언뜻보면 매우 닮았다. 그 차이를 잘 모르겠음.
근데 똑같고 비슷할거면 굳이 세 개의 특별한 클래스로 나누지 않았겠지?
그 차이를 알아보자...
1. data class
- data를 '가지고 있기' 위해서 사용한다.
- 따라서 toString(), equals(), hashCode(), copy() 같은 함수를 자동으로 제공한다.
- [Use case] data model이나 DTO를 사용하고 싶을 때
data class User(val id: Int, val name: String)
val user1 = User(1, "Alice")
val user2 = user1.copy(name = "Bob") // Easy to clone with slight changes
2. enum class
- 상수 집합이 있을 경우 사용한다
- 각 상수는 properties와 함수를 가질 수 있다.
- 상태값을 표현할 때 String이나 Int를 사용하는 것보다 enum을 사용하는 게 안전하다.
- [Use case] 한정된 옵션이 필요한 경우게 사용한다. (status, type, direction)
enum class Status {
SUCCESS,
ERROR,
LOADING
}
fun handleStatus(status: Status) {
when (status) {
Status.SUCCESS -> println("Success")
Status.ERROR -> println("Error")
Status.LOADING -> println("Loading")
}
}
3. object class
- 싱글톤이다 (인스턴스가 하나만 생성된다)
- 함수, 상수, 업데이트된 상태를 가지고 있을 수 있다. (can hold)
- 익명 객체나 객체 표현에 사용할 수 있다.
object Logger {
fun log(message: String) {
println("LOG: $message")
}
}
Logger.log("App started") // No need to create instance
Enum을 사용 | object를 사용 | |
상수 집합을 가지는 경우 사용한다 | 유틸이나 config를 위한 1개의 인스턴스만 필요한 경우 사용한다 | |
type-safe states | Enum이 좋음 | object는 type safe하지 못함 |
behavior per constant | Enum은 엔트리마다 개인 메서드를 가질 수 있음 | Object has one shared behavior |
shared state, config | enum은 부적합 | object는 싱글톤에 적합 |
class와 object의 fun사용
'【 개발 이야기 】' 카테고리의 다른 글
[intelliJ] kotlin이 구성되지 않았습니다. (0) | 2025.04.11 |
---|---|
spring이 아닌 일반 kotlin 프로젝트에 직접 gradle 추가하기 (feat... kotlin fun 함수 실행버튼 없음) (1) | 2025.04.11 |
[Spring] ClientResponse 인터페이스 (bodyToMono) feat... 비동기... (0) | 2025.04.04 |
14자, 20자 날짜 포맷 (1) | 2025.03.31 |
[Intellij] 외부 라이브러리 직접 추가하기 (2) | 2025.03.28 |