언어(Programming Language)/Kotlin

[Kotlin] 자료형, 변수, 상수 개념 및 사용법

RyanSin 2021. 2. 14. 01:09
반응형

- 개요

안녕하세요. 이번 시간부터 코틀린에 기본 문법에 대해 알아보겠습니다.

 

InteliJ IDEA 개발 환경을 혹시 세팅하지 못하신 분들은 아래 링크를 통해 세팅하고 오시는 걸 추천드리겠습니다.

any-ting.tistory.com/2

 

[Mac] Java 개발 환경 설정(IntelliJ IDEA Community)

- IntelliJ 설치  공식 홈페이지 : www.jetbrains.com/idea/download/#section=mac Download IntelliJ IDEA: The Java IDE for Professional Developers by JetBrains Download the latest version of IntelliJ I..

any-ting.tistory.com

 

만약 나는 코틀린 문법만 공부하고 싶으신 분들은 아래 사이트에 접속하시면 간단한 문법을 작성할 수 있습니다.

play.kotlinlang.org/

 

Kotlin Playground: Edit, Run, Share Kotlin Code Online

 

play.kotlinlang.org

- 개념

코틀린은 자바 언어보다 현대적이며 간결합니다(직접 개발을 했을 때 확실이 느꼈습니다.)

구글이 2019년 5월 Kotlin 언어가 이제 Android 앱 개발자가 선호하는 언어라고 발표된 후 현재 50% 이상의 안드로이드 개발언어는 Kotlin으로 만들어졌습니다. (코틀린으로 안드로이드 개발만 가능하지 않습니다. :>)

 

저 또한 기존에는 자바로 안드로이드 개발을 하다가 코틀린으로 개발을 하면서, "이런 것도 지원하네, 편리한 부분이 많다"라고 많이 느꼈습니다.

 

자바가 C언어를 보안해서 나온 언어라면 코틀린은 자바언어를 보안해서 나온 언어라고 할 수 있습니다.

 

- 자료형 종류

코틀린은 자바에서 사용하는 자료형을 사용합니다. 하지만 다른 것도 지원합니다.

 

  • 정수형 : 숫자로 표현할 수 있는 자료형

    • byte(1byte) : -128 ~ 127 사이의 정수 값 표현 가능
    • short(2byte) : -32,768 ~ 32,767 사이의 정수 값 표현 가능
    • int(4byte) :  -2,147,483,648 ~ 2,147,483,647 사이의 정수 값 표현 가능
    • long(8byte) : -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807 사이의 정수 값 표현 가능 (값이 너무 커서... 정말 큰 정수 값을 표현하지 않으면 잘 사용하지 않는다.)
  • 실수형

    • float(4byte) : 1.4E-45 ~ 3.4028235E38  크기의 소수 값 표현 가능
    • double(8byte) : 4.9E-324 ~ 1.7976931348623157E308 크기의 소수 값 표현 가능
  • 문자

    • char : 문자 하나하나 표현 가능 (ex : '안', '녕', '하', '세', '요')
    • String : 문자 여러 개 표현 가능 (ex : '안녕하세요')
  • 논리형
    • boolean : 참과 거짓을 표현 가능 (ex : true & false)

- Kotlin 1.3 이후로 사용하는 한 자료형 (현재 베타 버전 : 사용 시 주의하세요...)

  • 부호 없는 정수 자료형

    • UByte :  0 ~ 255 범위, 부호 없는 8비트 정수
    • UShort : 0 ~  65535 범위, 부호 없는 16비트 정수
    • UInt : 0 ~ 2^32-1 범위, 부호 없는 32 비트 정수
    • ULong : 0 ~ 2^64-1 범위, 부호 없는 64 비트 정수
  • 모든 타입을 받는 자료형
    • Any : 모든 자료형을 받을 수 있습니다.

기본적인 자료형에 대해 알아봤습니다. 사용방법에 대해 알아보겠습니다.

 

- 변수 상수 개념 및 사용법

변수란? 변수는 "변할 수 있는 수"라고 생각하시면 됩니다.

 

어떤 프로그램을 만들었는데 상황에 따라 값이 적용이 되지 않는다면... 사람이 하나하나 손 보는 거랑 같다고 볼 수 있겠죠?

 

그렇기 때문에 프로그래밍 언어에서는 변수를 사용해서 프로그램을 만든 게 됩니다.

 

상수란? 상수는 변수와 다른 "변할 수 없는 수"라고 생각하시면 됩니다. 

 

코틀린에서는 변수를 선언하는 방식은 두 가지가 있습니다. var & val

 

var : 고정되지 않은 값을 선언할 때 사용(변수)

val : 고정된 값을를 선언할 때 사용(상수)

fun main() {

    var age = 0
    val name:String = "개발이 취미인 사람"

    age = 24
    
    println(age)
    println("이름 : $name")
    
    /**
     * 실행 결과
     * 24
     * 이름 : 개발이 취미인 사람
     */
}

 

위 소스코드를 확인하면 문자열에 String 자료형을 선언을 했다. 하지만 정수형 데이터에는 선언하지 않았습니다.

코틀린에서는 자료형을 지정하지 않아도 컴파일 시 해당 데이터에 타입을 추론해서 컴파일합니다.

 

타입 추론

타입 추론 이란: 변수에 타입을 지정하지 않아도 값에 따라 코틀린에서 컴파일시 해당 변수에 자료형을 알맞게 컴파일하는 기술이다.

 

그렇기 때문에 우리는 변수에 자료형을 작성하지 않아도 됩니다.

 

val 주의사항

val은 값을 재 할당할 때는 에러가 발생한다. 하지만 객체안에 속성은 변경이 가능하다.

 

class 개념은 나중에 배울 것이며, 지금은 val이라는 키워드에 집중해서 코드를 봐야한다.

 

class Hi() {

    var name:String = "Hi라고 해~"

    companion object{
        const val HELLO = "안녕하세요."
    }
}

class Bye() {

    var name:String = "Bye라고 해~"

}


fun main() {

    val hi = Hi();

    println(hi.name)

    //hi에 name 속성 변경
    hi.name = "안녕"
    println(hi.name)

    /**
     * 실행 결과
     * 
     * Hi라고 해~
     * 안녕
     * 
     */
}

Hi Class name 속성을 변경하기 전과 변경 후에 값을 보면 변수에 값이 변경된 걸 알수 있다.

 

val hi 변수에 새로운 Bye 클래스를 할당하면 에러가 발생한다.

 

 val 키워드에 값을 변경하면 에러가 발생하지만 객체 안에 속성을 변경할 때는 에러가 발생하지 않는 것을 알수 있다.

 

하지만 무조건 변경이 불 가능하게 설정하는 방법이 있다.

 

그것은 바로 const 라는 키워드를 사용하는 방법이다.

 

값을 변경하려고 했찌만 동일하게 에러가 발생하는 것을 알수 있습니다.

 

const 키워드를 사용할 때 무조건 val 키워드를 사용해야 한다는 점도 잊지말아주세요. :)

- Nullable 변수 (null 값을 허용)

자바로 개발하다 보면... NullPointExeption... 을 많이 만나게 됩니다.

코틀린에서는 이를 방지하기 위해 null 허용 여부를 선택적으로 프로그래밍할 수 있습니다.

 

fun main() {

    var age:Int? = null
    val name:String = "개발이 취미인 사람"

    age = 24
    
    println(age)
    println("이름 : $name")
    
    /**
     * 실행 결과
     * 24
     * 이름 : 개발이 취미인 사람
     */
}

 

기본 값을 nul로 설정했습니다. age변수는 null을 허용하는 변수입니다.

 

주의 사항

nullable 변수는 값이 null 상태로 연산하게 되면 NullPointExeption을 발생할 수 있습니다...

 

이번 시간에는 기본적인 문법에 대해 알아봤습니다. 다음 시간에는 조건문에 대해 알아보겠습니다. 감사합니다. :)