책정리/Kotlin in Action

[Kotlin] 클래스와 프로퍼티, Enum 클래스 - Java와 비교하기

뽀글보리 2021. 9. 2. 11:58
반응형

[Kotlin] 클래스와 프로퍼티, Enum 클래스 - Java와 비교하기

클래스

코틀린에도 자바에 존재하는 클래스라는 개념이 존재한다 다른 부분은 클래스 선언 및 정의가 조금더 '간단' 하다는 점이다.

class Person(val name: String, var age: Int, val address: String)과 같이 한 줄에 여러 필드를 선언할 수 있다.

프로퍼티

자바에서는 '필드'와 '접근자'를 묶어 프로퍼티라고 부른다. 코틀린에서는 프로퍼티를 기본 기능으로 제공하여 자바의 필드와 접근자 메소드를 완전히 대신한다.
자바에서는 게터와 세터를 제공해야 필드를 접근하고 변경할 수 있다. 코틀린에서는 값을 저장하기 위한 비공개 필드와 세터 및 게터 구현을 제공한다.

class Person(
    val name: String,
    var age: Int,
    var isMarried: Boolean
)

//(1)
val person = Person("BBogle", 24, false)

//(2)
println(person.name)
println(person.isMarried)

//(3)
person,isMarried = true

(1) 자바와 달리 new 키워드를 사용하지 않고 오브젝트를 만들 수 있다.
(2) 프로퍼티 이름을 직접 불러도 코틀린에서 자동으로 게터를 호출하여 필드 값을 읽는다.
(3) 자바 (person.setMarried(false)) 와 다르다 !

커스텀 접근자

다음과 같이 프로퍼트의 접근자를 직접 작성할 수 있다.

class Person(
    val name: String,
    var age: Int,
    var isAdult: Boolean
        get(){
            return age < 20
        }
)

isAdult는 age가 20보다 작은지를 참값을 판단하게 될 것이다.

Enum 클래스

자바에서의 Enum은 특정 상수를 열거하는 용도로 사용이 되었다.

//Java
enum class Status{
    READY, SUBMITTED, CONFIRMED, CANCELED, FINISHED
}

코틀린에서의 Enum은 열거되는 존재가 아니다. Enum 클래스 내부에 프로퍼티나 메소드를 정의할 수 있다. 또한 상수 목록과 메소드 정의 사이에 반드시 세미콜론을 넣어야 한다. (유일하게 코틀린에서 세미콜론이 필수)

//Kotlin
enum class Color(
    val r: Int,
    val g: Int,
    val b: Int
){

    RED(255, 0, 0), GREEN(0, 255, 0), BLUE(0, 0, 255);

    fun rgb() = "#${Integer.parseInt("FF",r)}${Integer.parseInt("FF",g)}${Integer.parseInt("FF",b)}"
}

println(Color.BLUE.rgb())
  • 일반적인 클래스 처럼 생성자와 프로퍼티를 선언한다.
  • enum상수를 정의할 때 그 상수에 해당하는 프로퍼티 값을 지정해야한다.
  • 반드시 상수목록과 메소두 정의 사이에 세미콜론을 넣어야한다.
반응형