반응형
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에서 object는 클래스 계층의 최상위 타입
- 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 함수, 무한 루프등의 반환 타입
반응형
'Languages' 카테고리의 다른 글
kotlin 산술 연산자 오버로딩 (+, - *) (0) | 2020.05.18 |
---|---|
kotlin의 null 가능성과 collection (0) | 2020.05.07 |
kotlin의 null 가능성 (?. ?: !!) (0) | 2020.05.07 |
kotlin의 수신객체 지정 람다 (with, apply) (0) | 2020.04.26 |
java 함수에 kotlin lambda 식 메소드로 전달하기 (자바 함수형 인터페이스) (0) | 2020.04.26 |