1. Kotlin 기초 - 멘탈모델

val name: String = "Hope" // null 불가능
val name: String? = null // nullalbe
val value = if(condition) "A" else "B"

// 심지어 try-catch 도 expression
val result = try {
	pareInt(input)
} catch (e:Exception){
	0
}

// when 도 expression
val message = when (status){
	"active" -> "활성"
	"inactvie" -> "비활성"
	else -> "알 수 없음"
}
val name = "Hope" //val 은 불변

var count = 0
count = 1 // 가능.
// 타입을 명시할 수 있으나,
val name: String = "Hope"
val age: Int = 3

// 대부분 생략 가능하고, 컴파일러에서 추론 가능
val name = "Hope"
val age = 3
val price = 10000L
val rate = 3.14

fun add(a:Int, b: Int) = a+ b // Int 반환
// 파라미터에 이름 붙이기
fun createUser(
    name:String,
    email:String,
    age: Int = 0,
    isActive: Boolean = true // 기본값
){
println("$name, $email, $age, $isActive")
}

// 함수호출 시, 이름으로 전달 가능
createUser(name="Hope", email="hope@daangn.com")
// 기존 클래스에 함수 추가

fun String.isEmail(): Boolean {
   return this.contains("@")
}

fun Int.toWon(): String {
   return "${this}원"
}

// 사용
val email = "hope@daangn.com"
println(email.isEmail()) // true
fun printLengt(obj: Any){
   // null 체크후 자동 캐스팅 
	if (obj is String){
		println(obj.length)
	}
}

fun process(value: String?){
   // null 체크 후, non-null 로 자동변환
	if(value != null){
		println(value.length)
	}
}
data class User(
    val id: Long,
    val name: String,
    val email: String
)

val user1 = User(1, "Hope", "hope@daangn.com")