++ 변수 ++
- Int, Short, Long, Double, Float, Byte, Boolean : 기초 타입 객체
- Char, String : 문자와 문자열
String 타입의 데이터는 문자열을 큰따옴표(“)나 삼중 따옴표(“””)로 감싸서 표현 String Pool이라는 공간에 구성
- 코틀린의 표현식은 $기호
ex) $a 혹은 중괄호 이용 ${a+2}
- Any : 모든 타입 가능, 들어오는 데이터에 제약을 받지 않음
- Unit : 반환문이 없는 함수, 자바의 반환형 void 와 비슷 (기본형)
++ for 구문 ++
- of 예약어 : 반복 가능한 객체(iterable)를 순회
- in 예약어 : 객체의 모든 '열거할 수 있는 속성들'을 순회
++ null ++
- null을 허용한 변수 검사
- NPE(NullPointerException) : 사용할 수 없는 null인 변수에 접근하면서 발생하는 예외
- 코틀린에서는 기본적으로 null을 허용하지 않는다.
- 하지만 자바기반이므로 융통성을 발휘해 변수형 선언 뒤에 ?를 붙이면 null을 허용해줌
val a: Int? = null
var b: String? = null
- Int형과 Int?형은 형이 다르다!!! 들어가는 값의 형태만 같을 뿐, 저장공간은 다름!
세이프 콜과 엘비스 연산자를 활용해 null을 허용
str1?.length ?: -1
- 삼항연산자의 간략화
- .length가 조건도 되고 참일경우에도 해당되는것. -1은 거짓일때 반환하는 것!
fun someFun() {
var data1: Int = 10
var data2: Int? = null
data1 = data1 + 10
data1 = data1.plus(10)
}
- null 대입 가능
- 객체의 메서드 이용 가능
package com.example.p14
val a1: Byte = 0b00001011
val a2: Int = 123
val a3: Short = 123
val a4: Long = 10L
val a5: Double = 10.0
val a6: Float = 10.0f
val a7: Boolean = true
val a: Char = 'a'
/*
if (a == 1) {
}*/
fun main() {
var str11: String = "Hello"
var str2 = "World"
var str3 = "Hello"
println("str === str2: ${str11 === str2}")
println("str === str3: ${str11 === str3}")
}
package com.example.p15
fun main() {
fun sum(no: Int): Int {
var sum = 0
for(i in 1..no) {
sum += i
}
return sum
}
val name: String = "kkang"
println("name: $name, sum: ${sum(10)}, plus: ${10+20}")
}
package com.example.`p15-2`
fun main() {
var a = 1
val str1_15 = "a = $a"
val str2_15 = "a = ${a+2}"
println("str1 : \"$str1_15\", str2 : \"$str2_15\"")
}
package com.example.p16
val data1: Any = 10
val data2: Any = "hello"
class User
val data3: Any = User()
val data1_2: Unit = Unit
fun som(): Unit {
println(10 + 20)
}
fun some() { // 반환타입 생략
println(10+20)
}
fun main() {
som()
some()
}
package com.example.p17
fun main() {
var str1 : String = "Hello Kotlin"
//str1 = null // null을 허용하지 않으므로 오류 발생
var str2 : String? = "Hello Kotlin"
str2 = null
println("str1: $str1")
println("str2: $str2")
}
package com.example.p18
fun main() {
var str1 : String? = "Hello Kotlin"
str1 = null
// 조건식을 통해 null 상태 검사
val len = if(str1 != null) str1.length else -1
println("str1: $str1 length: ${len}")
}
package com.example.p19
fun main() {
var str1: String? = "Hello Kotlin"
str1 = null
println("str1: $str1 length: ${str1?.length ?: -1}") // 세이프 콜과 엘비스 연산자
}
++ 코틀린의 자료형 변환 ++
- 기본형을 사용하지 않고 참조형만 사용
- 서로 다른 자료형은 변환 과정을 거친 후 비교
- 변환 메서드의 이용(toDouble과 같은)
- 표현식에서 자료형의 자동 변환
++ 변환 메서드의 종류 ++
- toByte: Byte
- toLong: Long
- toShort: Short
- toFloat: Float
- toInt: Int
- toDouble: Double
- toChar: Char
++ 코틀린에서의 등호 ++
- 값만 비교하는 경우 : ==
- 값과 참조 주소를 비교할 때 : ===
- 코틀린에서는 참조형으로 선언한 변수의 값이 -128~127 범위에 있으면 캐시에 그 값을 저장함
**?가 붙은 형은 객체형이기 때문에 기본형과 차이를 두어야 한다.
package com.example.p20
val a: Int = 1
// val b: Double = a // 자료형 불일치
// val c: Int = 1.1 // 자료형 불일치
val b: Double = a.toDouble() // 변환 메서드 사용
// (: Any)가 생략되어 있는 것. Any는 기본형이니까~
val result = 1L + 3 // Long + Int -> result 는 Long
package com.example.p22
val a: Int = 128
val b: Int = 128
val a2: Int = 128
val b2: Int? = 128
fun main() {
println(a == b)
println(a === b)
println()
println(a2 == b2)
println(a2 === b2)
}
**** 다시 체크하기..
val a2: Int? = 128
val b2: Int = 128
물음표를 반대로 체크하면 또 원래 개념대로 출력이 나온다...
package com.example.p23
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
}
++ 스마트 캐스트 ++
- 구체적으로 명시되지 않은 자료형을 자동 변환
- 값에 따라 자료형을 결정
- Number형은 숫자를 저장하기 위한 특수한 자료형으로 스마트 캐스됨
++ is 키워드 ++
- is키워드로 검사
if( num is Int) {,,,} => num형이 Int 형일 때
++ Any ++
- 자료형이 정해지지 않은 경우
- 모든 클래스의 뿌리
- Int나 String은 Any형의 자식 클래스
- Any는 언제든 필요한 자료형으로 자동변환(스마트 캐스트)
package com.example.p24
fun main() {
var test: Number = 12.2
println("$test")
test = 12
println("$test")
test = 120L
println("$test")
test += 12.0f
println("$test")
}
package com.example.p25
fun main() {
val num = 256
if(num is Int) {
print(num)
} else if(num !is Int) {
print("Not a Int")
}
}
package com.example.p27
fun main() {
var a: Any = 1
a = 20L
println("a: $a type: ${a.javaClass}")
}
- Any형 a는 1로 초기화될 때 Int형이 됨
- Int형이였던 a는 변경된 값 20L에의해 Long이 됨
- a의 자바 기본형을 출력하면 long이 나옴
package com.example.p28
fun main() {
checkArg("Hello")
checkArg(5)
}
fun checkArg(x: Any) {
if(x is String) {
println("x is String: $x")
}
if(x is Int) {
println("x is Int: $x")
}
}
'Mobile > Kotlin' 카테고리의 다른 글
[Kotlin] #6 : 상속과 클래스 230217 (0) | 2023.02.20 |
---|---|
[Kotlin] #5 : 객체지향 프로그래밍 230216 (0) | 2023.02.17 |
[Kotlin] #4 : 예외처리 230216 (0) | 2023.02.16 |
[Kotlin] #3 : 기본 연산자, 비트 연산자, 변수와 함수, 반복문, 조건문, 람다식 230213 (0) | 2023.02.15 |
[Kotlin] #1 : 기본 설정, 기초문법 230210 (0) | 2023.02.10 |
댓글