반응형
[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상수를 정의할 때 그 상수에 해당하는 프로퍼티 값을 지정해야한다.
- 반드시 상수목록과 메소두 정의 사이에 세미콜론을 넣어야한다.
반응형
'책정리 > Kotlin in Action' 카테고리의 다른 글
[Kotlin in Action] 애노테이션과 리플렉션 (0) | 2021.11.23 |
---|---|
[Kotlin in Action] 컬렉션과 배열, (MutableCollection, 자바와의 관계) (0) | 2021.10.21 |
[Kotlin in Action] 코틀린의 원시 타입, Any, Unit, Nothing 타입 (0) | 2021.10.21 |
[Kotlin] 함수와 변수 - Java와 비교하기 (0) | 2021.09.02 |
[Kotlin] 코틀린이란? 왜 코틀린을 사용할까? (0) | 2021.08.27 |