[Kotlin] Class 종류 Object / Enum / Data / Sealed

Twaun·2022년 7월 13일
0

Kotlin

목록 보기
6/6

Object Class

  • Singleton Class
    : 오직 한번만 생성되는 클래스, 여러번 생성하려 해도 결국 같은 객체다.
  • 앱 전역에 쓰이는 클래스에 사용한다.
  • Context가 필요할 때는 ApplicationContext를 쓰는 것이 좋다.

Enum Class

  • 열거형 클래스 객체
enum class Color {
    RED, GREEN, BLUE
}
enum class Color(val rgb: Int) {
    RED(0xFF0000),
    GREEN(0x00FF00),
    BLUE(0x0000FF)
}
// when 사용
fun test(color: Color) {
    when(color) {
        Color.RED -> {
            color.rgb
        }
        Color.GREEN -> {}
        Color.BLUE -> {}
    }
}

Sealed Class

  • enum 과 유사하지만 각 확장 제한

Data Class

  • 생성자에 1개 이상의 파라미터가 필요
  • 생성자의 파라미터 선언은 val 또는 var
  • 여러 함수 제공
  • 별도의 객체가 아닌 생성자 모델이라고 볼 수 있다.
data class Person(
    val name : String,
    val age : Int
)

다음과 같이 생성해서 사용한다.

val person1 = Person("Twaun", 28)
val person2 = Person("Minsoo", 25)

다음은 data class에서 제공하는 유용한 함수에 대해서 알아보자. 사실 data class가 좋다고 하는 이유는 기본적으로 사용가능한 이 함수들 덕분이라고 할 수 있다.

Data Class 함수

  • copy()
  • equals()
  • toString()
  • componentsN()

1. copy()

data class 를 복사할 수 있다. 추가로 필드값을 변경해서 복사가 가능하다.

val person = Person("taewaun", 12)
    val person2 = person.copy(age = 15)

2. equals()

'==' 연산자로 두 객체를 비교할 수 있다.

val person1 = Person("Twaun", 28)
val person2 = Person("Minsoo", 25)

println(person1==person2) // false

3. toString()

내부적으로 toString()이 구현되어 있어서 객체 자체를 출력해도 객체 프로퍼티 값들을 확인할 수 있다.

val person = Person("Twaun", 28)
println(person)

//Person(name=Twaun, age=28)

4. componentsN()

data class 각 컴포넌트를 별개로 분해가 가능하다.

val person = Person("Twaun", 28)
val (name, age) = person

println("$name, $age")
// Twaun, 28
profile
Android Developer

0개의 댓글