Languages

kotlin의 원시타입 (int, boolean, any)

!쪼렙조햄 2020. 5. 7. 11:30
반응형

6.2 코틀린의 원시 타입

6.2.1 원시 타입 : Int, Boolean

  • java
    • 원시타입
      • int 등
      • 값이 직접 들어간다
    • 참조타입
      • String 등
      • 메모리 상의 객체 위치가 들어간다
    • 참조 타입이 필요한 경우, wrapper type을 이용해서 원시 타입을 감싸서 사용한다
  • kotlin
    • 원시타입, 참조 타입을 구분하지 않는다
    • 숫자 타입 등 원시타입의 값에 대해 메소드를 호출할 수 있다

6.2.2 널이 될 수 있는 원시 타입 : Int?, Boolean?

  • java 에서 kotlin 변수 사용
    • 널이 될 수 있는 코틀린 타입은 자바 원시 타입으로 표현할 수 없다
  • 자바의 래퍼 타입으로 컴파일된다
  • 제네릭 클래스
    • 래퍼타입을 사용
    • val listOfInts = listOf(1,2,3)
      • 래퍼인 Integer 타입으로 이뤄진 리스트

6.2.3 숫자 변환

// Error : type mismatch 컴파일 오류 발생
val i = 1
val l : Long = i
// 직접 변환 메소드 호출해야함
val i = 1
val l : Long = i.toLong()
  • kotlin은 숫자를 다른 타입으로 자동 변환하지 않는다
    • 결과 타입이 허용하는 범위가 원래 범위보다 넓은 경우에도 자동 변환은 불가능하다
val x = 1
val list = listOf(1L, 2L)
x in List
// false
x.toLong() in list
//true
  • kotlin에서 여러 숫자 타입을 사용할때는 각 변수를 명시적으로 변경해주기
  • 숫자 리터럴을 사용하면 변환 함수를 사용하지 않아도 된다

6.2.4 Any, Any? : 최상위 타입

  • java : object, kotlin : any
    • java에서 object는 클래스 계층의 최상위 타입
      • 참조 타입은 object 를 정점으로 하는 계층에 포함
      • 원시타입은 계층에 들어있지 않다
    • kotlin 에서 any는 모든 널이 될 수 없는 타입의 조상타입
  • java.lang.object에 있는 메소드는 any 에서 사용할 수 없다
    • 타입 캐스트 하여 사용

6.2.5 Unit 타입 : 코틀린의 void

  • kotlin unit : java void
    fun f() : Unit {~~~}
  • kotlin unit 함수 java 에서 오버라이드 하는 경우
    • 제네릭 함수를 오버라이드 하지 않으면 void로 컴파일 된다
  • kotlin 의 unit과 java의 void 는 다르다
    • unit은 모든 기능을 갖는 일반적인 타입이다
    • unit을 타입 인자로 쓸 수 있다

6.2.6 Nothing 타입 : 이 함수는 결코 정상적으로 끝나지 않는다

  • fail 함수
    • 테스트 라이브러리들은 fail (특별한 메세지가 들어있는 예외)를 던져서 테스트를 실패시킨다
  • 무한 루프를 도는 함수도 정상적으로 끝나지 않는다
  • Nothing
    • fail 함수, 무한 루프등의 반환 타입
반응형