티스토리 뷰

※ 이해와 학습을 위해 원본 코드의 추가/수정이 있을 수 있습니다.

※ 인프런 강의: 개복치개발자님의 [입문편] 안드로이드를 위한 코틀린(Kotlin) 문법의 학습 기반으로 작성했습니다.

※ InterviewBit Kotlin 설명을 참고합니다.

※ 정보의 공유 사회(https://ddolcat.tistory.com/) 설명 및 예제를 참고합니다.

※ Programize(http://learning.coreref.com/www.programiz.com/kotlin-programming) 설명 및 예제를 참고합니다.

※ Udemy The Complete Android 12 & Kotlin Development Masterclass 설명 및 예제를 참고합니다.


  • Kotlin 데이터 타입

  • 자료형의 타입 자체를 출력하기
println(변수::class.java.simpleName)
  • 변수의 keyword

- val: immutable(변경 불가능)

- var: mutable(변경 가능)

  • 자료형의 선언
//변수명 : 자료형
val test1 : Int
val test2 : String
  • 자료형 변환하기
fun main(){
    // 정수형을 문자형으로
    val test9: Int = 1234
    val test10 = test9.toString()
    println(test10::class.java.simpleName)

    // 문자형을 정수형으로
    val test11 : String = "1234"
    val test12 = Integer.parseInt(test11)
    println(test12::class.java.simpleName)
}

결과
=========================
String
int
  • generic
// 제네릭(generic)
// 컴파일시에 타입 체크를 할 수 있다
// 타입 캐스팅이 필요 없다

fun main() {
   val box1 = Box(10)
   println(box1.value)
   println(box1.value::class.java.simpleName)
   
   val box2 = Box("10")
   println(box2.value)
   println(box2.value::class.java.simpleName)
   
   val box3 = testFun(10)
   println(box3)
   println(box3::class.java.simpleName)
   
   val box4 = testFun("10")
   println(box4)
   println(box4::class.java.simpleName)
}

class Box<T>( test : T ){
    var value = test
}

fun <T> testFun( a: T ) : T {
    return a
}

결과
=====================
10
Integer
10
String
10
int
10
String
  • Any/is/as
// Any
// 이름처럼, 아무거나 할 수 있는 느낌?
// 모든 아이들을 포함하는 조상같은 친구?
// 
// is와 as
// is -> 맞나? 확인 (데이터 타입을 비교할 때)
// as -> type casting -> 타입 변경/체크
fun main() {
   var str1 : String = "abc"
   println(str1)
   //str1 = 123
   //println(str1)
   // 타입 에러가 남 : The integer literal does not conform to the expected type String
   //var str2 : Any = "abc"
   //println(str2)
   //str2 = 123
   //println(str2)
   
   var str3 : Any = "abc"
   if(str3 is String){
       println("This is string")
   } else{
       println("This is not string")
   }
   
   var str4 : Any = "abc"
   
   when(str4){
       is Int -> { println("This is Int")}
       is String -> { println("This is String")}
       else -> { println("This is else")}
   }
   
   var str5 : String = "abc"
   var str6 : String = str5 as String
    
   println(str6)
   
   //var str7 : Int = 1
   //var str8 : String = str7 as String
   //println(str8)
   // 아래 에러 발생
   /*
   Exception in thread "main" java.lang.ClassCastException: class java.lang.Integer cannot be cast to class java.lang.String (java.lang.Integer and java.lang.String are in module java.base of loader 'bootstrap')
 at FileKt.main (File.kt:40) 
 at FileKt.main (File.kt:-1) 
 at jdk.internal.reflect.NativeMethodAccessorImpl.invoke0 (:-2) 
   */
   
   var str9 : String? = "abc" as? String
   println(str9)
}

결과
============================
abc
This is string
This is String
abc
abc
  • 지연 초기화 (lateinit/lazy)
fun main() {
	
    // 변경 가능
    lateinit var lateString : String
    
   	//println(lateString)
   	/* 실행시 아래 에러 출력됨
   	Exception in thread "main" kotlin.UninitializedPropertyAccessException: lateinit property lateString has not been initialized
 	at FileKt.main (File.kt:3) 
 	at FileKt.main (File.kt:-1) 
	at jdk.internal.reflect.NativeMethodAccessorImpl.invoke0 (:-2)
    */
    
    // 만약 서버에서 데이터를 받아오는 일이 필요할 때
    // 서버에서 받아온 데이터를 넣어두고 싶은데
    // 미리 변수를 선언해놓고 나중에 서버에서 값을 받아와서 넣어줄 때 주로 사용
     
    lateString = "변경된 스트링"
    println(lateString)
    
    // lazy
    // 값을 사용할 때만 들어가주도록
    // 변경 불가
    
    val lazyString : String by lazy {
        println("이 친구가 만들어질 때 프린트")
        "lazyTestString"
    }
    
    println(lazyString)
}

결과
=====================
변경된 스트링
이 친구가 만들어질 때 프린트
lazyTestString
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2025/08   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31
글 보관함