쏭식
Ssongcode;
쏭식
전체 방문자
오늘
어제
  • 분류 전체보기 (106)
    • JAVA (21)
      • Basic (21)
    • Kotlin (14)
      • Basic (14)
    • Android (64)
      • Basic (24)
      • JETPACK (30)
      • Compose (8)
      • 파고들기 (2)
    • Project (4)
    • etc (3)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • 배열
  • Android
  • 메소드
  • AAC
  • Room
  • DataBinding
  • 코딩테스트
  • 코틀린
  • 변수
  • 기초100제
  • Jetpack
  • 코드업100제
  • 코테
  • mvvm
  • 자료구조
  • 상속
  • compose
  • 알고리즘
  • ViewModel
  • 백준
  • 프로젝트회고
  • livedata
  • Adapter
  • 컴포즈
  • 자바
  • 객체지향
  • Kotlin
  • 코틀린코테
  • workmanager
  • 리사이클러뷰

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
쏭식

Ssongcode;

Kotlin/Basic

[Kotlin/Basic] 코틀린에서의 Type

2022. 7. 21. 23:59

1. 변수의 타입

    val number1 = 4
//    val number2 : Long = number1    //Type mismatch
    //자바에서는 명시적으로 더 큰 타입으로 변경이 되었지만 코틀린에서는 안됨.
    //따라서 toLong() 을 붙여줘야함
    val number2 : Long = number1.toLong() //자바에서는 암시적으로 가능했지만
    //코틀린에서는 명시적으로 적어주어야함

    println(number1 + number2)

자바에서는 Int와 Long을 더해주면 암시적으로 더 큰 타입으로 변경되어 연산이 가능했다.

하지만 코틀린에서는 불가능하다!! ㅠㅠ

 

따라서 위의 코드와 같이 Int와 Long을 더해주려면 .toLong을 붙여주어 number1를 Long타입으로 변경해주어야한다.

 

그럼 만일 number2가 null을 허용하는 변수라면 어떻게 될까?

    val number3 : Int? = 3
    //만일 number3이 null이 될 수 있는 ?형태라면
//    val number4 : Long = number3.toLong()
    //이렇게 에러가 발생함. 따라서 safecall과 Elvis를 활용하여 null일 때 방지를 해주어야함
    val number4 : Long = number3?.toLong() ?: 0L //이런식으로

number3는 null값을 허용할 수 있는 Int? 형태이다.

주석처리된 코드를 보면 단순히 number3.toLong()을 하면 코틀린에서 자동적으로 null을 허용할 수 있는 값이여서

에러처리가 된다.

 

따라서 전 강의에서 배웠던 safe call 과 Elvis를 활용하여 null일 때를 방지해주어야한다!!!

2. 타입캐스팅

fun pritnAgeIfPerson(obj: Any){
    /*
    is는 자바에서의 instanceof obj가 person이면 true를 반환
    as Person은 (Person)이와 같음, 하지만 이는 생략가능
    만일 is not을 의미로 사용하려면 !is 사용해주면 됨
     */
    if(obj is Person){
        val person = obj as Person  //obj가 Person이면 Person으로 타입캐스팅이 됨
        println(person.age)
    }
}

자바에서는 instanceof를 통해 비교해주었고, 그 값이 true일 경우 (Person)obj 를 통해 타입캐스팅을 해주었다.

코틀린에서는 instanceof가 is로 대체되고, (Person)으로 타입캐스팅했던 것이 as Person으로 대체된다!!

 

하지만 이 때 주의할 점이 있다. 만일 obj값이 지금은 null이 허용이 안되지만 Any?형태로 null이 허용될 때는

마찬가지로 NPE에러를 방지하기 위해서 다음과 같은 작업이 필요하다!

fun pritnAgeIfPerson1(obj: Any?){
    /*
    위와 같은 코드인데, 만일 obj가 null이 될 수 있는 코드라면
    당연히 null이 들어오면 NPE에러가 발생할 것이다.
    따라서 as?를 붙여줌으로써 person이 null이 될 수 있다는 것을 표현해주고
    person이 null이니까 person?.age로 이 값이 null이 될 수 있다는 것도 표현해준다.
     */
    if(obj is Person){
        val person = obj as? Person //null이 됨
        println(person?.age)
    }
}

Any? 로 인해 obj가 null이 될 수 있기 때문에 obj as? Person 형태로 적어주어야 하고,

이는 person이 null이 될 수 있다는 뜻도 되기 때문에 person?.age로 적어주어야 NPE에러를 방지할 수 있다!!

 

**

Any는 자바에서의 Object와 같음!!

any자체로는 null을 포함할 수 없어 any?로 표현해야함

 

unit은 자바에서의 void와 동일한 역할

 

Noting은 함수가 정상적으로 끝나지 않았다는 사실을 표현하는 역할

ex) 예외를 반환하는 함수/무한루프 함수

**

 

등 문자열을 다루는 방법들

//string interpolation
val person = Person("윤성식", 100)
val log = "제 이름은 ${person.name}"

val str = """
    ABC
    EFG
    ${person.name}
""".trimIndent()
//이렇게 하면 엔터가 자동적으로 출력됨

val str1 = "ABCDE"
println(str1[1])
//

 

 

 

GitHub - SsongSik/Kotlin_Java_Practice: Practice kotlin grammar compared to Kotlin and Java.

Practice kotlin grammar compared to Kotlin and Java. - GitHub - SsongSik/Kotlin_Java_Practice: Practice kotlin grammar compared to Kotlin and Java.

github.com

 

저작자표시 (새창열림)

'Kotlin > Basic' 카테고리의 다른 글

[Kotlin/Basic] 코틀린에서의 예외처리  (0) 2022.08.13
[Kotlin/Basic] 코틀린에서의 반복문  (0) 2022.07.27
[Kotlin/Basic] 코틀린에서의 제어문  (0) 2022.07.25
[Kotlin/Basic] 코틀린에서의 연산자  (0) 2022.07.22
[Kotlin/Basic] 들어가며, val/var 차이, 코틀린에서의 null  (0) 2022.07.20
    'Kotlin/Basic' 카테고리의 다른 글
    • [Kotlin/Basic] 코틀린에서의 반복문
    • [Kotlin/Basic] 코틀린에서의 제어문
    • [Kotlin/Basic] 코틀린에서의 연산자
    • [Kotlin/Basic] 들어가며, val/var 차이, 코틀린에서의 null
    쏭식
    쏭식

    티스토리툴바