4차산업혁명의 일꾼/Java&Spring웹개발과 서버 컴퓨터

자바와 코틀린 차이 및 특징 2 ( map, list , null타입, 타입체크 캐스팅, 따옴표 안에 변수 사용- "${}" 사용)

르무엘 2023. 2. 5. 18:44

1. 컬렉션을 다루는 방법이 편리하고 간단하다.
List 는 mutableListOf로 담아버리고
- listOf로 담은 것을 addAll로 그냥 바로 추가 해버린다.
- joinToString으로 , 같은 구분자 넣기도 편리하고
- list에다가 map을 써서 내부 함수처리도 가능하다.
- lsit에서 노가다로 for문 돌려서 해당 값 찾는 것을 그냥
- list.first(id :"10") 하면 해당 값(이경우 10) 을 찾을 수 있어 간단하다.
- map으로 값을 넣을 때도 mapOf, mutableMapOf 로 넣는다.
map[1]= "hi", map[2]="yo" 이런것을 mapOf( (1 to "hi") , 2 to "yo") 방식으로 입력이 된다.

// 컬렉션 (list, map ,set)
fun main(){

    var list = mutableListOf(1,2,3,4,5)
    list.add(6)
    list.addAll(listOf(7,8,9))

    // listOf 는 add가 불가능
    var list1 = listOf(1,2,3,4,)
    println(list)
    println(list.joinToString(",") )
    // list1.get(0) 보다 그냥 list1[0] 으로 가져옴
    list1[0]

    // map 의 수에다가 10을 곱해 준다
    println(list1.map { it * 10 }.joinToString("/"))

    // id 가 10인것을 찾아줘
    //list1.first{ id :"10"}


    val diverselist = listOf(1,"안녕", 2,"")

    val map = mapOf((1 to "안녕"), 2 to "hello")
    val map1 = mutableMapOf((1 to "안녕"), 2 to "hello")
    map1[3] = "응"
    map1[100] = "하이"
}



2. null 타입에 안전하다.
변수 뒤에 : String 이런식으로 타입쓰고 ?를 넣으야만 null 이 입력되게 처리하고
그 뒤에 null 인 경우 건너뛰어 버린다.( nickname?.length ) 에서 에러 안남

// name =null
// null  을 넣을수는 없고 타입뒤에 ?를 넣어야 null 이 들어간다
var nickname : String? = null
 // 위와 같은 식으로 쓰지 않고 아래와 같이 변수뒤에 ?:  를 붙여서 null일 경우 처리
var result = nickname?: "값이 없음"
// 변수 뒤에 ?를 붙여 null 이면 length 를 처리 안한다
// 변수에 safe하지 않으면 ?를 한다.
val size = nickname?.length

println(result)


3. 타입체크와 케스팅
모든 타입에 허용되는 Any 라는 타입지정을 하고 return 타입을 String으로 하여 체크 가능하다.
- fun check( a:Any) : String { if( a is String) {}else {} }
- dec() 하면 숫자하나 내려간다
(하기 참고 하면 타입체크, 타입캐스트, 스마트한 타입캐스트)

// 타입 체크와 캐스팅
fun main(){

    // 타입체크
    println(check("안녕"))
    println(check(3))
    println(check(true))

    // 캐스팅
    println(cast("안녕"))
    println(cast(3))
    println(cast(true))
    
    // 스마트 캐스팅
    println(smartcast("안녕"))
    println(smartcast(3))
    println(smartcast(true))
}

// 타입체크
fun check(a: Any) : String{
    return if(a is String){
        "문자열"
    } else if(a is Int){
        "숫자"
    }else{
        "몰라요"
    }
}

// 캐스팅
fun cast(a: Any){
    if(a is String){
        (a as String).length
    }
    val result = (a as? String) ?: "실패"
    println(result)
}

fun smartcast(a:Any) : Int{
    return if(a is String){
        a.length
    }else if(a is Int){
        a.dec()
    }else{
        -1
    }
}



4. " " 문장 안에서 ${}를 쓸수 있다. ( jsp 에서 ` ` 방식과 같다.)

// string template
fun main(){

    val a =10
    val name = "안녕"
    val isHigh = true

    println("$a ${name.length} $isHigh")

}
LIST