문법 공부를 본격적으로 시작했다.
인텔리제이로 공부를 시작하는데, 커뮤니티버전에서 explorer에서 자꾸 프로젝트가 사라지기 시작했다..
project constructure에서 module import 등등 다해봤는데 안되서,삽질을 엄청했지만 결국 해결실패..
인텔리제이 얼티메이트 한달무료버전으로 하니까, 그런 버그 없이 잘되었따. 우선 한달은 이걸로 버티고, 나중에 고치자
우선 인텔리제이 단축키부터 공부를 했다.
치다보니까 같은단어를 일일히 드래그하거나, 키패드로 움직이기가 너무 귀찮다..
드래그한 같은 단어선택 : control(^) + G
드래그한 같은 단어찾기 : command + G
정렬 : option + command + L
한줄복사: command + D
// Person클래스
package chap02.section1
import com.example.edu.Person as User
fun main() {
val user1 = Person("Kildong", 30)
val user2 = User("asdf", 23)
println(user1.name)
println(user1.age)
println(user2.name)
println(user2.age)
}
class Person(val name:String, val age: Int)
// Val-Var
package chap02.section2
fun main() {
// val number = 10;
// var language = "Korean";
// val secondNumber: Int = 20
// language = "English"
//
// println("number: $number")
// println("language: $language")
// println("secondNumber: $secondNumber")
var a = 1;
val str1 ="a = $a"
val str2 = "a = ${a + 2}"
println("str1: \"$str1\", str2: \"$str2\"")
val special = "\"hello\", I have \$15"
val special2 = "${'"'}${'$'}9.99${'"'}"
println(special)
println(special2)
val num = 10
val formattedString = """
var a = 6
var b = "Kotlin"
println(a + num) // num의 값은 $num
""".trimIndent()
println(formattedString)
val user: Username = "Hyunbong"
println("user: $user")
}
typealias Username = String
// Null Check
fun main(){
var str1 : String? = "Hello Kotlin"
str1 = null
println("str1: $str1 length: ${str1?.length}")
// println("str1: $str1 length: ${str1!!.length}")
val len = if(str1 != null) str1.length else -1
println("str1: $str1 length: ${str1?.length ?: -1}")
}
코틀린의 자료형은 참조형 자료형을 사용한다.
코틀린은 겉으로는 참조형을 사용하는 것 같지만, 컴파일 과정을 거치면 참조형이 기본형으로 변경된다.
코틀린 컴파일러가 자동으로 최적화를 수행하는 것이다.
따라서 코틀린에서는 기본형을 사용해야 할지 참조형을 사용해야 할지 고려할 필요 없이 참조형만 사용하면 된다.
// 형변환 - 자료형 비교
package chap02.section3
fun main() {
val a: Int = 128
val b = a
println(a === b) // 자료형이 기본형인 int형이 되어 값이 동일하므로 true
val c: Int? = a
val d: Int? = a
val e: Int? = c
println(c == d) // 값의 내용만 비교하는 경우 동일하므로 true
println(c === d) // 값의 내용은 같지만 참조 주소를 비교해 다른 객체(주소다름) 이므로 false
println(c === e) // 값의 내용도 같고 참조된 객체도 동일(주소동일)하므로 true
/**
* 자바는 가능
* int a = 1;
* double b= a;
*/
/**
* val z: Int = 1 // Int형 변수 a를 선언하고 1을 할당
* val x: Double = z // 자료형 불일치 오류 발생
* val x: Double = z.toDouble() // 형변환 해줘야함
* val y: Int = 1.1 // 자료형 불일치 오류 발생
*/
}
코틀린은 자바와 다르게, 자동형변환이 되지 않는다. 자료형 불일치 오류가 발생한다.
// 스마트 캐스트
package chap02.section3
fun main() {
val num = 256
if (num is Int) {
println(num)
} else if (num !is Int) {
println("Not a IntÏ")
}
val x: Any
x = "Hello"
if (x is String) {
println(x.length) // x는 자동적으로 String으로 스마트 캐스트
}
// y가 null 이면 형변환을 할수없기에, 에러를 뱉는다.
// 물음표를 붙여 예외발생을 막는다.
val y = null
val s: String? = y as? String
println(s)
}
// Any형 변수의 변환
// Any형으로 인자를 받는 함수 만들기
package chap02.section3
fun main() {
var a: Any = 1;
a = 20L;
println("a: $a type: ${a.javaClass}")
checkArgs("Hello")
checkArgs(5)
}
fun checkArgs(x: Any) {
if(x is String) {
println("x is String: $x")
}
if(x is Int) {
println("x is Int: $x")
}
}
package chap02.section4
fun main() {
var num1 = 10
var num2 = 10
val result1 = ++num1
val result2 = num2++ // 먼저 num2의 값을 대입 후 증가
println("result1: $result1")
println("result2: $result2")
println("num1: $num1")
println("num2: $num2")
/**
* result1: 11
* result2: 10
* num1: 11
* num2: 11
*/
}'Kotlin' 카테고리의 다른 글
| Android Jetpack Compose 초기초 시식 (0) | 2023.11.10 |
|---|