본문 바로가기
IT/안드로이드 Android

kotlin . 코틀린 기본 배우기 그리고 변수 자료형

by SidePower 2022. 10. 10.

 

안드로이드 앱 개발을 위해 코틀린 기본만 알아볼 거예요.

 

앱 개발하면서 필요한 구문들은 그때그때 익히면 될 거 같아요.ㅋ

 

코틀린에 대한 설명은 인터넷에 많아서 하지 않을 거예요.

자바 코딩 라인을 확 줄이고 java로 할 수 없었던 개발 기능 확장에 좋다고 하네요.

 

코틀린 역사가 얼마 안되다보니 인터넷에 찾아봐도 기본 내용만 있고

심도 깊게 코틀린을 분석해서 가이드하는 자료가 많지 않은 거 같아요.

그리고

코틀린은 안드로이드 앱 개발의 공식 언어지만

멀티플랫폼 기능으로 iOS 애플 앱까지 개발할 수 있고

스프링 프레임워크 등에서도 사용 가능하다고 합니다.

 

이왕 처음 공부하는 거 kotlin 하나만 하면 iOS까지 넘볼 수 있을 거 같네요.ㅋ

 

코틀린 소스를 작성해서 테스트할 수 있는 사이트가 있어요.

소스 작성하고 실행하면 바로 결과를 알려줍니다.

https://try.kotl.in/

 

Kotlin Playground: Edit, Run, Share Kotlin Code Online

 

play.kotlinlang.org

오른쪽 파란색 Run을 클릭하시면 밑으로 실행결과가 바로 표시되네요.

 

 

 Kotlin

 

코틀린 프로그램 소스 파일 확장자는 kt입니다.

소스 파일 이름은 암거나 정하시면 되며

프로그램 기능에 맞게 이름을 정하시면 좋겠죠. ㅋ

aaaa.kt  보다는 Greeting.kt 처럼요.

 

자바는 파일명과 메인 Class 이름이 같아야 되지만

코틀린은 편하게 이름 지으면 되네요.

 

그리고 줄 끝에 세미콜론 [ ; ]이 없어도 됩니다. 

있어도 되고 없어도 된다는 얘긴데요.

컴파일러가 알아서 세미콜론을 자동으로 입력하면서 컴파일한다고 하네요.

 

다른 개발 언어처럼 코틀린의 시작도 main 함수입니다.

fun main() {
    println("Hello, world!!!")
}

 

 변수 선언 키워드

코틀린 변수 선언에 사용되는 키워드는 var과 val 두가지입니다.

var은 변수의 값을 변경할 수 있고

val은 한번 정해진 값은 변경 할수 없습니다. 

java에서 final 변수와 동일하다고 보시면 될 거예요.

 

♣ val 변수 값 변경시 에러 발생
fun main() {
    val str1: String = "안녕하세요."
    str1 = "Hi";
    println("Hello, " + str1)
}
▶결과 : Val cannot be reassigned

♣ var 변수 값 변경시 정상 처리
fun main() {
    var str1: String = "안녕하세요."
    str1 = "Hi";
    println("Hello, " + str1)
}
▶결과 : Hello, Hi

 

 변수 초기화

코틀린 변수는 변수 타입을 적거나 값으로 초기화를 해줘야 됩니다.

변수 선언과 동시에 초기화를 하지 않더라도

변수 사용 전에는 값으로 초기화를 해줘야 됩니다.

var dat1 : Int = 1234
var dat2 : Int
dat2 = 5678
var dat3 = 9012

var dat4 : Char = 'A'
var dat5 = 'B'
var dat6 : Char
dat6 = 'C'

var dat6 : String = "Hello"
var dat7 = "Thank"
var dat8 : String
dat9 = "Good"

 null

코틀린 기본적으로 null safe 언어로써 변수에 null값을 가질 수 없습니다.

하지만 null값을 필요한 경우에는 자료형 뒤에 ?를 기입하면 null을 사용할 수 있습니다.

 

그리고

?가 있는 변수는 null을 가지므로 ?가 없는 변수보다 큰범위라고 생각할 수 있겠죠.

그래서 ?가 있는 변수에 ?가 없는 변수를 대입할 수는 있지만

반대로 ?가 없는 변수에 ?가 있는 변수를 대입하면 오류가 발생합니다.

var dat1 : Int = null  // 오류 Null can not be a value of a non-null type Int

var dat2 : Int? = null // 정상

var dat3 : Int = 123
var dat4 : Int? = null

dat4 = dat3   //정상
dat3 = dat4   //오류 Type mismatch: inferred type is Int? but Int was expected

 

 변수 자료형

숫자형(정수형/실수형) , 문자 , 문자열 , Bool(논리형) , Any가 있습니다.

 

♣ 정수형 
Byte , Short , Int , Long

fun main() {
    var dat1 : Byte;
    var dat2 : Byte;
    
    dat1 = 127
    dat2 = 200  // 숫자 범위 에러 ▶ The integer literal does not conform to the expected type Byte

    var dat3 : Short = 30_000 ▶ 숫자형에 _ 언더바를 붙여 가독성을 좋게 할수 있다.
    var dat4 : Short 
    var dat5 : Int
    var dat6 : Long = 123_456_789_012_345

    dat4 = dat1 + dat3  //에러 ▶Type mismatch: inferred type is Int but Short was expected
    dat5 = dat1 + dat3 // 정상 . Byte와 Short 합은 Int 형의 됩니다.
    println("dat5 : " + dat5)  //정상 ▶ dat4 : 30127

    println("dat6 : " + dat6) //정상 ▶ dat6 : 123456789012345

 정수형에서 Byte + Short + Int 3개 변수를 더하면 Int형으로 지정됩니다.
Byte + Byte → Int
Short + Short → Int
Byte + Short → Int

}


♣ 실수형
Float , Double

fun main() {
    var dat7 : Float = 12.324234633f
    var dat8 : Double = 12.324234333444445555
    var dat9 : Float
    println("dat7 : " + dat7)  //정상 ▶ dat7 : 12.324235
    println("dat8 : " + dat8)  //정상 ▶ dat8 : 12.324234333444446
    dat9 = 10  //에러 ▶ The integer literal does not conform to the expected type Float

    var dat10 : Float = 1.1f + 1.1f + 1.1f + 1.1f + 1.1f + 1.1f + 1.1f + 1.1f
    var dat11 : Float = 1.1f + 1.1f + 1.1f + 1.1f + 1.1f + 1.1f + 1.1f + 1.1f + 1.1f
    println("dat10 : " + dat10)  // ▶ dat10 : 8.8
    println("dat11 : " + dat11)  // ▶ dat11 : 9.900001

}

 실수형 자동 반올림
범위가 넘어서면 반올림을 해서 표현하고 있습니다.
Float 12.324234633f→ 12.324235
Double 12.324234333444445555 → 12.324234333444446

 실수형 오차 발생

변수 dat10과 dat11을 보시면
dat10은 1.1f를 8번 더했기때문에 8.8이 맞조.
근데 dat11은 1.1f를 9번 더해서 9.9가 나와야 정상인데 9.900001가 나옵니다.
이게 무슨 일인가요? ^^;;
원인은 코틀린에서 실수를 표현할때 내부적으로 2진수 0과 1로 표현하면서
소수점이 정확하게 0.1로 떨어지지 않고 0.10000000149........ 처럼 뒷자리 숫자가 많이 남게 됩니다.
이 뒷자리 숫자들이 계속 더해지면서 9.9 뒤에 Float 범위안에 숫자가 생겨서 붙게 되어
9.900001로 된다고 합니다.
웬만하면 실수형은 안쓰는게 좋을거 같아요.^^;;

 

 숫자 자료형의 범위

자료형 변수 size 숫자 범위
bit byte
정수 Byte 8 1 -128 ~ 127
Short 16 2 -32,768 ~ 32,767
Int 32 4 -2,147,483,648 ~ 2,147,483,647
Long 64 8 -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807
실수 Float 32 4   1.175494e-38 ~ 3.402823e+38
Double 64 8   2.225074e-308 ~ 1.797693e+308

 

♣ 문자
Char 이며 1byte 글자 한개를 표현하는 자료형입니다.

var dat4 : Char = 'A'
var dat5 = 'B'
var dat6 : Char
dat6 = 'C'


♣ 문자열
String 이며 연속적인 글자를 표현하는 자료형입니다.

var dat6 : String = "Hello"
var dat7 = "Thank"
var dat8 : String
dat9 = "Good"


♣ 논리형
Boolean 이며 참과 거짓을 표현하는 자료형입니다.
참은 true , 거짓은 false

var dat1 : Boolean = true
var dat2 : Boolean = false


♣ Any
모든 변수를 포함할수 있는 최상위 변수가 Any입니다.
java의 object 타입라고 생각하시면 될거에요.
최상위 변수이기때문에 형변환 없이 모든 변수를 바로 대입할수 있습니다.

var dat1 : Int = 123
var dat2 : Any = dat1

 

코틀린 기본 변수에 대해 알아봤습니다.

 

 

감사합니다.

반응형

댓글