728x90
Data Class
- DTO 클래스
- 데이터(필드)
- 생성자와 getter
- equals, hashCode
- toString
- data 키워드를 붙여주면 아래 메서드 해결
- equals, hashCode
- toString
- 여기에 named argument 까지 활용하면 builder pattern을 쓰는 것 같은 효과도 있다.
- 자바에서도 JDK16부터 record class를 도입하긴 했다.
data class Person(
private val name: String,
private val age: Int
)
Enum Class
- 특징
- 추가적인 클래스를 상속받을 수 없다.
- 인터페이스는 구현할 수 있으며, 각 코드가 싱글톤이다.
enum class Country(
val code: String
) {
KOREA("KR"),
AMERICA("US"),
;
}
- when은 Enum Class 혹은 Sealed Class와 함께 사용할 경우에 진가를 발휘한다.
- 자바의 경우 코드가 많아지게 되고, if else 의 로직 처리에 대한 애매함이 생긴다.
private static void handleCountry(JavaCountry country) {
if (country == JavaCountry.KOREA) {
// 로직 처리
}
if (country == JavaCountry.AMERICA) {
// 로직 처리
}
}
private fun handleCountry(country: Country) {
when (country) {
Country.KOREA -> TODO()
Country.AMERICA -> TODO()
}
}
- 장점
- 가독성
- 컴파일러가 country의 모든 타입을 알고 있어서 다른 타입에 대한 로직(else)를 작성하지 않아도 된다.
- Enum에 변화가 있으면 알 수 있다.
Sealed Class, Sealed Interface
- 상속이 가능하도록 추상클래스를 만들고 싶은데, 외부에서는 이 클래스를 상속받지 않았으면 좋겠을 때, 하위 클래스를 봉인하자는 개념에서 만들어진 클래스이다.
- 특징
- 컴파일 타임 때, 하위 클래스의 타입을 모두 기억한다.
- 즉, 런타임 때, 클래스 타입이 추가될 수 없다.
- 하위 클래스는 같은 패키지에 있어야 한다.
- Enum과 다른 점
- 클래스를 상속받을 수 있다.
- 하위 클래스는 멀티 인스턴스가 가능하다.
- 추상화가 필요한 엔티티 혹은 DTO에 sealed class를 활용할 수 있다.
- 자바 JDK17에서도 sealed class가 추가되었다.
728x90
'Language > kotlin' 카테고리의 다른 글
배열과 컬렉션 다루기 (0) | 2023.05.23 |
---|---|
Enum, Sealed Class - 공통점, 차이점 정리 (0) | 2023.05.23 |
중첩 클래스 다루기 (0) | 2023.05.22 |
object 키워드 다루기 (0) | 2023.05.22 |
접근 제어 다루기 (0) | 2023.05.22 |