반응형
이 포스팅에서 작성하는 내용은 자바 개발자를 위한 코틀린 입문 에서 발췌하였습니다.
https://inf.run/BpYf
1. Object
- object: 싱글톤 생성 키워드
- static 이라는 키워드가 없고, companion object 라는 키워드를 이용해서 Java의 static 처럼 사용할 수 있다.
- 이를 동반객체라고 하며, 이 동반 객체는 객체로 취급된다. (객체에 이름을 설정하거나, 상속, 구현 받을 수 있다.)
- Java 에서 companion object 이용 시, @JvmStatic 을 사용해야 한다.
fun main() {
Person.Create.newBaby("baby")
Person.newBaby("baby2")
println(Singleton.num)
Singleton.num = 2_000
println(Singleton.num)
}
class Person private constructor(
var name: String,
var age: Int
){
// static 이라는 키워드가 없고, companion object 로 사용해야 함
// = 동반객체. 동반객체는 객체로 여겨진다.(객체에 이름을 설정하거나, 상속, 구현받을 수 있음)
companion object Create{
// const :
private const val MIN_AGE = 1
@JvmStatic // Java 에서 companion object 이용 시, @JvmStatic 을 사용해야 한다.
fun newBaby(name: String): Person{
println("응애")
return Person(name, MIN_AGE)
}
}
}
// 싱글톤 클래스 정의
// object: 싱글톤 생성 키워드
object Singleton {
var num: Int = 1_000
}
익명 클래스의 경우, object : 타입 { } 으로 표현할 수 있다.
fun main(){
// 익명 클래스의 경우, object : 타입 { } 으로 표현할 수 있다.
eatSomething(object : Eatable {
override fun eat() {
println("냠냠")
}
override fun drink() {
println("꿀꺽")
}
})
}
private fun eatSomething(eatable: Eatable){
eatable.eat()
eatable.drink()
}
2. 중첩 클래스
- 참고) Java에서는 중첩 클래스에 대한 위험성(메모리 누수, 디버깅, 직렬화 제한 등)으로 추천하지 않고, static 중첩 클래스를 권장한다.
- Kotlin에서는 기본적으로 바깥 클래스를 참조하지 않는다.
- 만약, 중첩 클래스에서 바깥 클래스를 참조하고 싶다면 inner 키워드 사용해야 한다. (권장 X)
- this@바깥클래스
class Company(
val address: String,
val department: Department
) {
// 중첩 클래스 사용 예(기본적으로 바깥 클래스를 참조하지 않음)
// 만약 바깥 클래스를 참조하고 싶다면 inner 키워드 사용 ( 가르킬 때는 this@바깥클래스. 권장 X)
class Department(
private var name: String
)
}
3. data class
data class 를 사용하면, equals(), toString(), hashCode(), builder() 를 자동으로 생성해준다.
data class PersonDto(
private val name: String,
private val age: Int
)
4. Enum Class
Enum Class 를 when 키워드와 함께 사용 시, 편리하게 사용 가능하다.
fun handleMonth(month: Month) {
// when 을 이용해서 간편하게 Enum 을 사용할 수 있다.
when(month) {
Month.JANUARY -> {
println("1월입니다")
}
Month.FEBRUARY -> {
println("2월입니다")
}
Month.MARCH -> {
println("3월입니다")
}
}
}
enum class Month(
private val code: String
){
JANUARY("Jan"),
FEBRUARY("Feb"),
MARCH("Mar");
}
4. Sealed Class / Sealed Interface
- 컴파일 타임 때, 하위 클래스의 타입을 모두 기억하여 런타임 시 클래스 타입이 추가될 수 없도록 한다.
- 하위 클래스 작성 시, Sealed Class는 같은 패키지에 있어야 한다.
반응형
'BE > Kotlin' 카테고리의 다른 글
[Kotlin] Lambda Expression (0) | 2023.03.10 |
---|---|
[Kotlin] Collection, 확장/중위함수 (0) | 2023.03.08 |
[Kotlin] 클래스, 상속, 접근제어자 (0) | 2023.03.04 |
[Kotlin] 조건문, 반복분, 예외처리 (0) | 2023.02.24 |
[Kotlin] 변수, 타입 사용 방법 (0) | 2023.02.22 |