이번에는
Class, Data Class, Object에 대해 공부해 보려고 합니다.
코틀린의 Class는 자바처럼 작성할 수 있지만
더욱 편리한 문법을 제공합니다.
class Person2(val name : String = "홍길동", val age : Int = 20) {
val isTeen : Boolean
// getter 설정
get() =
age < 20
// constructor(name : String, age : Int) {
// this.name = name
// this.age = age
// }
// 기존 프로퍼티 정의
// var name : String = ""
// var age : Int = 0
}
fun main() {
val p1 = Person2("민호")
val p2 = Person2()
println("${p1.name} : ${p1.age}, isTeen : ${p1.isTeen}")
println("${p2.name} : ${p2.age}, isTeen : ${p2.isTeen}")
- 결과 -
민호 : 20, isTeen : false
홍길동 : 20, isTeen : false
}
1. 생성자 생략 가능
class Name(...)
형태로 작성하게 되면 생성자가 생략이 됩니다.(구현이 되있는 상태) 2. Getter, Setter 자동구현
val
은 Getter만 생성, var
은 Getter, Setter 둘다 생성합니다.get()
set()
필드입니다.Class 정의 부분에 대해
자바와 비교했을때 코틀린은 너무나도 뛰어난 가독성을 보유하고 있기 때문에 코드의 생산성이 올라가게 됩니다.
data class HandSomeGuy(
val name : String,
val age : Int,
val job : String
)
Data Class는 POJO객체를 구현할때 딱좋은 class인거 같습니다.
그래서 보통 DTO 겸 Model 만들때 많이 쓴다고 알고있습니다.
Data Class를 만들게 되면 자동으로 Getter, Setter, toString, hashCode, equals 등 자동으로 만들어주게 됩니다.
진짜 진짜 편리한 기능 같아요
object GameManager {
val title : String = ""
val type : String = ""
}
Object
키워드는 싱글톤을 만들어주는 기능을 합니다.
심지어 Thread-Safe 하게 만들어줘서 대박인거 같습니다.
Java에서는 Thread-Safe하게 하려면 synchronized
키워드를 이용하는데
코틀린은 자동으로 처리해준다!!
class Car(val horsepowers: Int) {
companion object Factory {
val cars = mutableListOf<Car>()
fun makeCar(horsepowers: Int): Car {
val car = Car(horsepowers)
cars.add(car)
return car
}
}
}
fun main() {
// Factory 객체 생략가능
val car = Car.makeCar(150)
val car2 = Car.Factory.makeCar(150)
println(Car.cars.size)
- 결과 -
2
}
object 키워드 활용법은 또있는데 (익명 객체 활용법도 있긴 있음)
companion object 키워드로 static
비스무리하게 사용할 수 있습니다.
(static
과 동일한 기능은 아님!)
Inner Class 형태로 생성이 되게 됩니다.
이것도 마찬가지로 똑같이 싱글톤 형태이기 때문에
단 한번만 메모리에 적재됩니다.
코틀린에서 Class 쓰는법에 대해 공부해봤는데
공부하면 공부할수록 너무 편리한 기능들만 있어서
자바로 못돌아갈것같다....