관리 메뉴

hyeals study

[코틀린] 타입 시스템 (2) - 원시 타입 본문

코틀린

[코틀린] 타입 시스템 (2) - 원시 타입

hyeals 2020. 2. 25. 08:32

* 코틀린에서는 자바와 다르게 원시타입과 래퍼 타입을 구분하지 않음.

 

[원시 타입(primitive type)]

 

- 원시 타입: 이 타입의 변수에는 값이 직접 들어감. ex) int 등

- 참조 타입(reference type): 이 타입의 변수에는 메모리상의 객체 위치가 들어감. ex) String 등

 

* 자바의 경우에는 참조 타입이 필요한 경우 특별한 래퍼 타입으로 원시 타입의 값을 감싸서 사용함.

☞ 하지만 코틀린에서는 원시 타입과 래퍼 타입을 구분하지 않고 항상 같은 타입을 사용함.

 

※ 원시 타입 종류 정리

  • 정수 타입: Byte, Short, Int, Long
  • 부동 소수점 수 타입: Float, Double
  • 문자 타입: Char
  • 불리언 타입: Boolean

[널이 될 수 있는 원시 타입]

 

* 널 참조를 자바의 참조 타입의 변수에만 대입할 수 있어서 널이 될 수 있는 코틀린 타입자바 원시 타입으로 표현할 수 없음.

∴ 코틀린에서 널이 될 수 있는 원시타입자바의 래퍼 타입으로 컴파일 됨.


[숫자 변환]

 

* 코틀린은 한 타입의 숫자를 다른 타입으로 자동 변환 해주지 않음

 

예를 들어 아래와 같은 경우 컴파일 에러가 발생함

 

type mismatch 에러 예시

따라서 아래와 같이 직접 변환 메소드를 호출해야함

 

형 변환 메소드 호출 예시

  • 위의 코드 처럼 코틀린은 모든 원시 타입에 대한 변환 함수를 제공함 (Boolean 제외)

※ 형 변환 함수 종류

  1. toByte()
  2. toShort()
  3. toChar() 등..

[Any 타입]

 

* Any 타입: 자바에서 object가 클래스의 최상위 타입인 것과 마찬가지로 코틀린에서 널이 될 수 없는 타입의 최상위 타입임.

 

* 만약 Any 타입에 널을 포함하는 모든 값을 대입할 변수를 원하면 Any? 타입을 사용하면 됨


[Unit 타입]

 

* 코틀린에서 Unit 타입자바에서 void과 같은 기능을 함

☞ 값을 반환하지 않는 함수의 반환 타입으로 사용함

 

Unit 타입 사용 예시

  • 위와 같이 아무 값도 반환하지 않는 함수의 반환 타입으로 Unit 타입을 사용할 수 있음
  • 위 코드는 fun f() {...} 와 같은 의미임 

<Unit 과 void의 차이>

☞ Unit은 타입 인자로 쓸 수 있지만, void는 타입 인자로 쓸 수 없음

 

* Unit타입에 속한 값은 단 하나임 (Unit)

* Unit타입은 Unit값을 묵시적으로 반환함


[Nothing 타입]

 

* Nothing 타입: 아무 값도 포함하지 않음. 함수의 반환 타입이나 반환 타입으로 쓰일 타입 파라미터로만 쓸 수 있음

→ Nothing 타입의 변수를 선언해도 그 변수에 아무 값도 저장할 수 없기 때문에 아무 의미도 없음

 

 

 

본 게시물은 "Kotlin IN ACTION"을 참고함.

 

Comments