ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Kotlin] 기본타입(Primitive Types)
    Kotlin 2024. 9. 28. 08:14
    728x90
    반응형

    안드로이드쪽으로 변경해보고자 코틀린으로 진행하는 안드로이드 개발 과정을 듣고 있다

    기본이 탄탄해야 나중에 편하니까 배운 것들을 정리해보고자 한다

    참고로 나는 자바스크립트 + 타입스크립트를 주력으로 해왔는데 코틀린 배우면서 뭔가 타입이 더 상세하고 많다고 생각했다

    아무래도 주력언어였던 자바스크립트와 비교해서 적어놓을듯(그래야 기억하기 쉬워서ㅎ)

     

    1. 변수

    var : 변경가능한 변수를 선언할 때 사용

     

    참고로 var로 선언된 변수는 나중에 값을 할당할 때 타입을 명시해주어야 한다!!

    ex :

    var name: String

    name = "hanna"

     

    val : 변경 불가능한 변수를 선언할 때 사용. 처음 한 번만 초기값을 할당할 수 있음

    코틀린 공홈에서도 val을 사용하는 것을 권장하고 있다

    https://play.kotlinlang.org/byExample/01_introduction/03_Variables

     

     

    2. 기본 타입

    코틀린에서는 기본 타입도 객체에 속한다

     

    1) Number 

    type size(byte) min ~ max value
    Byte -128 ~ 127 (0을 포함하니까 127까지)
    Short -32768 ~ 32767 
    Int -2,147,483,648 (-2^31) ~ 2,147,483,647 (2^31 - 1)
    Long -9,223,372,036,854,775,808 (-2^63) ~ 9,223,372,036,854,775,807 (2^63 - 1)

     

    연산가능한 기본 타입은 Number classf를 부모로 가진다

    큰 타입으로 자동변환된다 (ex: Long + Int -> Long)

    L이라는 접미사를 붙이면 Long 타입을 명시적으로 나타낸다(ex: var onLong = 1L // type은 Long)

     

    2) Unsigned integer 

    type size(byte) min ~ max value
    UByte 0 ~ 255
    UShort 0 ~  65,535
    UInt 0 ~ 4,294,967,295 (2^32 - 1)
    ULong 0 ~ 18,446,744,073,709,551,615 (2^64 - 1)

     

    음수(부호가 있음)없이 0부터 시작하는 타입(그래서 unsigned...)

     

    3) Floating-point 

    type size(byte)
    Double 8
    Float 4

    둘 다 부동소수점을 나타내는 타입이다

    double이 float보다 두 배의 정밀도를 가진다

    f혹은 F를 붙이면 Float 타입을 명시적으로 나타낸다 (ex: oneFloat = 11.00f)

     

    4) String

    type size(byte)
    Char 2 (Unicode 표현)

    문자 하나를 나타낼 때 사용(''로 감싸서 사용)

    CharRange = 'a'..'z'로 범위를 나타낼 수 있음

     

    5) Boolean

    type value
    Boolean true, false

     

     


     

    그런데 코틀린은 기본 타입에 속하는 number나 string, boolean 등이 기본적으로 객체인데, 자바스크립트도 기본 타입들에 메소드를 사용할 수 있지 않나?라는 생각이 들었다.

    근데 분명히 모던자바스크립트 읽을 때는 immutable한 값이라고 했는데 뭐지;

    평소에 그냥 아무 생각없이 사용했는데 갑자기 궁금해서 찾아보았다

     

    https://ko.javascript.info/primitives-methods#ref-580

     

    원시값의 메서드

     

    ko.javascript.info

    https://developer.mozilla.org/ko/docs/Web/JavaScript/Data_structures#%EC%9B%90%EC%8B%9C_%EA%B0%92primitive_values

     

    JavaScript의 타입과 자료구조 - JavaScript | MDN

    모든 프로그래밍 언어에는 내장된 자료구조가 존재하지만, 보통 그 내용은 언어마다 다릅니다. 이 글에서는 JavaScript에서 사용할 수 있는 내장 자료구조와 그 속성에 대해 알아보겠습니다. 그러

    developer.mozilla.org

     

    원시타입(string, number, boolean, symbol)을 객체처럼 사용한다면 원시타입에 따라 일시적으로 '원시 래퍼 객체(object wrapper)'가 생성되고, 해당 객체의 메소드나 속성들을 사용할 수 있게 된다고 한다.

    이렇게 사용된 메소드나 속성들이 최종적으로 리턴하는 값을 리턴하고 일시적으로 생성된 원시 래퍼 객체는 삭제된다고 한다.

    이렇게 일시적으로 '원시 래퍼 객체'를 만드는 일은 자바스크립트 엔진이 자동적으로 하기 때문에 개발자가 사용자가 딱히 뭘 할 필요는 없다.

    예를 들면 const exampleStr = "STRING"이라는 문자열이 할당되고(원시타입)

    이에 toLowerCase()라는 메소드를 사용한다면 자바스크립트 엔진이 해당 타입에 맞는 원시 래퍼 객체를 만들어 해당 메소드에 접근하고,

    메소드를 실행한 후 새로운 문자열이 반환된다. 그리고 만들어졌던 원시 래퍼객체는 삭제되고 리턴된 새로운 문자열만 남게되는 것이다

    const exampleStr = "STRING"
    exampleStr.toLowerCase() // 'string'

     

     

    이에 반해 코틀린은 기본 타입도 모두 객체이다

    그래서 자바스크립트처럼 원시타입값을 객체로 만드는 작업없이 바로 메소드나 속성(프로퍼티)을 호출할 수 있다

     


    갑자기 자바스크립트까지 또 살펴보게 되었는데 코틀린 재밌는거같다 ㅋㅋㅋ

    그리고 몰랐던 부분도 알게되어서 좋다 ㅎ

    반응형
Designed by Tistory.