관리 메뉴

Bbaktaeho

Kotlin(코틀린) 4. 변수와 타입 본문

프로그래밍 (Programming)/코틀린 (Kotlin)

Kotlin(코틀린) 4. 변수와 타입

Bbaktaeho 2019. 1. 24. 10:32
반응형

코틀린 변수)

코틀린의 변수는 지역변수이며 전역변수의 개념이 없다.

변수에는 두 가지 형태가 있는데 초깃값을 변경할 수 없는 불변 변수(val)와 변경 가능한 가변 변수(var) 이다.

불변 변수는 상수이며 value를 의미하고 val 키워드로 선언(자바의 final과 동일하다.)

가변 변수는 variable을 의미하며 var 키워드로 선언한다.

모든 변수는 코드에서 실제 사용하기 전에 반드시 한 번 초기화! 되어야 된다. 또한 선언된 타입은 변경할 수 없다.

(변수를 선언과 초기화하는 법 : var(val) 변수명 : 타입 = 값)

예제 코드를 보자.

1
2
3
4
5
6
7
8
9
10
11
var age : Int = 25
val tall : Double = 180.0
val nation : String = "대한민국"
var LivingArea : String = "안양"
val name = "임태호"
 
age = 20
//tall = 190.0
//nation = "일본"
LivingArea = "인천"
//name = "임철수"
cs

여기서 불변 변수는 tall, nation, name 이고 가변 변수는 age, LivingArea 이다. 가변 변수는 초기화 이후 변경이 가능하고 불변 변수는 초깃값으로 상수가 된다. 즉, 변경이 불가능하다.

변수 name의 타입이 생략되었다. 여기서 코틀린의 장점 중 하나인 타입을 추론할 수 있다는 것이다. name의 초깃값인 "임태호" 를 String 으로 추론해낸다. 그리고 name은 "임태호"를 갖는다.

만약 age = 20.1 이 되면 어떻게 될까?

1
2
3
var age : Int = 25
//age = 20.1
//The floating-point literal does not conform to the expected type Int
cs


변수 age는 Int(정수) 타입으로 선언되어 실수 타입을 가질 수 없다. 선언된 타입을 변경할 수 없는 것에 주의하자.

기본 타입)

코틀린의 기본 타입은 자바와 달리 모두 클래스로 정의되어 있다. 전에 예제들을 보면 모든 타입의 첫 번째는 대문자로 되어있는 걸 볼 수 있다. 즉, 클래스로 정의되어 있어서 int가 아닌 Int가 된다. 자바에선 클래스를 사용하려면 객체를 생성해서 사용해야 되는데 코틀린에서는 그런 수고는 하지 않아도 된다. 코틀린 컴파일러가 알아서 처리해주기 때문이다.

정수를 나타내는 기본 타입은 네 가지다.

타입

크기(Bit)

허용 값

Byte

8

-128 ~ 127

Short

16

-32768 ~ 32767

Int

32

-2147483648 ~ 2147483647

Long

64

-9223372036854775808 ~ 9223372036854775807

실수를 나타내는 기본 타입은 두 가지다.

타입

크기(Bit)

허용 값

Float

32

IEEE 754 부동 소수점 수(단 정밀도)

Double

64

IEEE 754 부동 소수점 수(배 정밀도)

문자를 나타내는 타입은 Char 가 있으며 16비트다. 또한, 논리값을 나타내는 타입으로 Boolean 타입이 있다.

기본 타입 변수를 선언할 때 타입을 지정하지 않으면 초기화되는 값을 기준으로 코틀린 컴파일러가 적합한 타입을 추론해준다.(정수는 Int, 실수는 Double)

코틀린에서는 숫자 타입 간의 변환을 자동으로 해 주지 않는다. (자바는 자동으로 해줌)

이럴땐 .toLong() 을 사용하면 가능해진다.

1
2
3
val a : Int = 100
val b : Long = a.toLong()
val c : Long = a + 1L
cs

코틀린에서는 기본 타입 간의 변환을 해 주는 함수를 제공한다.(.to기본타입())

문자열 타입)

문자열 타입은 String형으로 나타낸다.(내부적으로 자바의 String 클래스를 사용)

String타입의 변수는 문자열 값을 갖는 객체를 참조하는 것이므로 변수 자체의 값이 변경된다는 것은 다른 문자열 객체를 참조한다는 의미가 된다.

1
2
var color : String = "녹색"
color = "검정색"
cs

변수 color의 값이 변경된 것처럼 보이지만 내부적으로 변경된 값을 갖는 새로운 String 객체가 메모리의 다른 곳에서 생성되고 그것의 참조를 변수 color가 갖는 것이다. (자바와 동일)

앞에서 얘기한 기본 타입은 String 클래스의 toString()을 호출해서 String 타입으로 변환할 수 있다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
var age = 25
var s : String = ""
= age.toString()
//문자열을 기본 타입으로
var sINT : String = "10"
var sPI : String = "3.14"
var sBOOL : String = "true"
 
var BYTE = sINT.toByte()
var INT = sINT.toInt()
var SHORT = sINT.toShort()
var PI : Double = sPI.toDouble()
var BOOL : Boolean = sBOOL.toBoolean()
cs

문자 타입)

Char 타입이 있다

1
var c : Char = 'a'
cs

다음 코드에 출력값을 생각해보자.

1
2
3
4
var sPI : String = "3.14"
var c : Char = 'a'
= sPI.toCharArray()[1]
println(c)
cs

toCharArray()함수를 사용하면 Char 형 배열로 변환된다. 따라서 배열의 인덱스 1 이므로 두 번째 요소인 '.' 이 출력된다. (여기서 배열에 인덱스는 0부터 시작한다. 즉, 인덱스 0은 가장 첫 번째 요소인 '3'이 된다.)

논리 타입)

Boolean 타입이 있다. true 또는 false 의 값 주 하나이 아야 하며, 그렇지 않은 경우는 예외가 발생하지 않고 false의 값을 갖는 Boolean 타입으로 변환된다.

기본 타입의 리터럴)

literal(리터럴)은 변수 선언 없이 지정한 값 자체를 의미한다.

Long 타입은 L, Float 타입은 F(f), Double 타입은 없다. 실수는 기본적으로 Double 타입으로 간주된다.

16진수는 0X(0x), 2진수는 0B(0b) (8진수는 리터럴을 지원하지 않는다.)

문자열 템플릿)

코틀린에서는 변수 이름 앞에 $ 기호를 붙여 문자열 템플릿을 만들어 사용할 수 있다.

1
2
3
4
5
6
7
8
9
10
11
val age1 = 25
val age2 = "내 나이는 $age1"
val age3 = "5년뒤 내 나이는 ${age1+5}"
println(age1)
println(age2)
println(age3)
//출력
25
내 나이는 25
5년뒤 내 나이는 30
cs


반응형