Kotlin - Classes

2023. 4. 23. 19:01·📘 Backend/Kotlin

💡 코틀린에서 다양한 클래스를 다루는 법

목차

  • Data Class
  • Enum Class
  • Sealed Class, Sealed Interface
  • 정

💡 Data Class

클래스 뒤에 data 키워드를 붙여주면 아래 항목들이 포함된 클래스가 만들어진다.

  • builder
  • equals
  • hashCode
  • toString

계층간의 데이터를 전달하기 위한 DTO (Data Transfer Object)

  • 데이터 (필드)
  • 생성자와 Getter
  • equals, hashCode, toString
data class PersonDTO(
    val name: String,
    val age Int
)

💡 Enum Class

추가적인 클래스르 상속받을 수 없다.

인터페이스는 구현할 수 있으며, 각 코드가 싱글톤으로 이루어져 있다.

enum calss Country(
    val code: String
) {
    KOREA("KO")
    AMERICA("US")
}

when 키워드는 Enum Class나 Sealed Class와 함께 사용할때 더욱 진가를 발휘한다.


자바 코드 예시

코드가 많아지게 된다면 else 로직 처리에 대한 애매함이 있다

// Java
private static void handleCountry(JavaCountry country) {
    if (country == JavaCountry.KOREA) {
        // 대충 로직
    }

    if (country == JavaCountry.AMERICA) {
        // 대충 로직
    }
}

코틀린 코드 예시

컴파일러가 country의 모든 타입을 알고있어, 다른 타입에 대한 로직(else)을 작성하지 않아도 된다.

Enum에 변화가 있으면 알 수 있다.

private fun handleCountry(country: Country) {
    when (country) {
        Country.KOREA -> TODO()
        Country.AMERICA -> TODO()
    }
}

💡 Sealed Class, Sealed Interface

컴파일 타임때 하위 클래스의 타입을 모두 기억한다.

즉, 런타임때 클래스 타입이 추가될 수 없다.

하위 클래스는 같은 패키지에 있어야 한다.

추상화가 필요한 Entity or DTO에 sealed class를 활용한다.


Enum과 다른점

  • 클래스를 상속받을 수 있다.
  • 하위 클래스는 멀티 인스턴스가 가능하다.

상속이 가능한 추상 클래스를 만들되, 외부에서는 이 클래스를 상속받지 못하게 하는 클래스 예시

sealed class HyundaiCar(
    val name: String,
    val price: Long
) {

    class Avante : HyundaiCar("아반떼", 1_000L)
    class Sonata : HyundaiCar("소나타", 2_000L)
    class Granduer : HyundaiCar("그랜저", 3_000L)
}

💡 정리

  • Data Class는 equals, hashCode, tosTring을 자동으로 생성해준다.
  • Enum Class는 Java와 동일하지만 when과 함께 사용하면 큰 장점이 있다.
  • Sealed Class 역시 when과 함께 사용하면 큰 장점이 있다.
저작자표시 (새창열림)

'📘 Backend > Kotlin' 카테고리의 다른 글

Kotlin - More Functions  (0) 2023.04.27
Kotlin - Array & Collections  (0) 2023.04.23
Kotlin - 중첩 클래스  (0) 2023.04.23
Kotlin - Object  (0) 2023.04.23
Kotlin - Extension Function  (0) 2023.04.23
'📘 Backend/Kotlin' 카테고리의 다른 글
  • Kotlin - More Functions
  • Kotlin - Array & Collections
  • Kotlin - 중첩 클래스
  • Kotlin - Object
신건우
신건우
조용한 개발자
  • 신건우
    우주먼지
    신건우
  • 전체
    오늘
    어제
    • 분류 전체보기 (422)
      • 📘 Frontend (71)
        • Markup (1)
        • Style Sheet (2)
        • Dart (8)
        • Javascript (12)
        • TypeScript (1)
        • Vue (36)
        • React (2)
        • Flutter (9)
      • 📘 Backend (143)
        • Java (34)
        • Concurrency (19)
        • Reflection (1)
        • Kotlin (29)
        • Python (1)
        • Spring (42)
        • Spring Cloud (5)
        • Message Broker (5)
        • Streaming (2)
        • 기능 개발 (5)
      • 💻 Server (6)
        • Linux (6)
      • ❌ Error Handling (11)
      • 📦 Database (62)
        • SQL (31)
        • NoSQL (2)
        • JPQL (9)
        • QueryDSL (12)
        • Basic (4)
        • Firebase (4)
      • ⚙️ Ops (57)
        • CS (6)
        • AWS (9)
        • Docker (8)
        • Kubernetes (13)
        • MSA (1)
        • CI & CD (20)
      • 📚 Data Architect (48)
        • Data Structure (10)
        • Algorithm (8)
        • Programmers (17)
        • BaekJoon (5)
        • CodeUp (4)
        • Design Pattern (4)
        • AI (0)
      • ⚒️ Management & Tool (8)
        • Git (7)
        • IntelliJ (1)
      • 📄 Document (10)
        • Project 설계 (6)
        • Server Migration (3)
      • 📄 책읽기 (2)
        • 시작하세요! 도커 & 쿠버네티스 (2)
      • 🎮 Game (4)
        • Stardew Vally (1)
        • Path of Exile (3)
  • 블로그 메뉴

    • 링크

      • Github
    • 공지사항

    • 인기 글

    • 태그

      GStreamer #Pipeline
      Lock #Thread #Concurrency
      React #Markdown
    • 최근 댓글

    • 최근 글

    • hELLO· Designed By정상우.v4.10.0
    신건우
    Kotlin - Classes
    상단으로

    티스토리툴바