이번에는
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 쓰는법에 대해 공부해봤는데
공부하면 공부할수록 너무 편리한 기능들만 있어서
자바로 못돌아갈것같다....