본문 바로가기
Programming/Kotlin

[Kotlin 뿌시기] (1) 변수와 자료형

by 드가보자 2023. 12. 23.

c++에 관해서는 조금 공부를 했었는데, Python이나 java등 다른 언어에 대해서는 정말 암것도 모른다 ㅋㅋㅋ 

이번에 kotlin이라는 언어를 겁 없이 배워보고 싶어서 조금씩 공부하는 내용을 적어가려고 한다. 

잘못된 부분이 있다거나, 추가적으로 알려주고 싶은 내용이 있다면 댓글 달아주시면 감사하겠습니다^_^


1. 변수 

 

Kotlin에서는 변경이 가능한 변수, 변경이 불가능한 변수 2가지로 나뉘게 된다. 

변경이 가능한 변수는 variable의 앞 자를 따서 var 키워드로 정의를 하고, 

변경이 불가능한 변수는 value의 앞 3자를 따서 val 키워드로 정의를 한다. 

 

var school = "학교" 이런식으로 정의하는 것이다, 

school은 var이기 때문에 나중에

school="초등학교"

school="중학교" 이렇게 변화시키는게 가능한데 c++에서는 되지만 Kotlin에서 안되는 것이 하나 있더라. 

 

선언과 할당을 동시에 해주어야 한다는 것인데

var school

school ="학교" 이렇게 처리하는게 안된다는거다. 무조건 같이 해주어야한다. 

 

아마 Type을 체크하지 못해서 메모리 할당을 제대로 못하기 때문이지 않을까 싶다. 

 

그리고 변수를 나타낼 때 일종의 규칙(convention)이 있는데 

value의 경우는 대문자로 적고, 단어 단어 사이의 구분을 _ 로 

variable 경우 소문자로 적되, 단어의 시작 한 음절만 대문자로 적는 암묵적인 룰이 있다고합니다 ㅋㅋㅋ 

 

phone number를 variable 스타일로 적으면 PhoneNumber 가 되는 것이고, value Style로 적으면 

PHONE_NUMBER 이렇게 적어주는 것이다. 

 

// 1. var 변수 선언
var Change = 100 
println(Change)

Change=300
println(Change)

// 2. val 변수 선언

val CHANGE_NO = 100
println(CHANGE_NO)
//CHANGE_NO=200  => val can't be reassigned

 

Change라는 변수에 100 값을 할당하고 출력한다, 100이 나올 것이다.

Change의 값을 300으로 바꾸고, <= 바꾸는데 문제 없다 Variable이기도 하고 Integer Type도 맞기 때문에 

 

2번 째로 val CHANGE_NO에 100을 할당하고 출력해보면 100이 잘 나온다

다만 해당 변수의 값을 200으로 바꾸려고 시도한다면 

val의 값을 reassigned 할 수 없다는 Error 메세지가 출력되게 된다. 

 


2. 자료형

정수형 Byte (1Byte)
Short (2 Byte)
Int (4 Byte)
Long (8 Byte)
실수형 Float (4byte)
Double (8byte)
논리형 boolean (True or False)
문자형 Char
하나의 문자열만 포함
문자열형 여러 글자

 

정수형 (Default = Int)

 

우선 Byte -> Long으로 갈 수록 표현할 수 있는 정수의 범위가 다르다. 

Byte는  ( -128 ~ +127) , Short는 ( -32768 ~ + 32767) Int , Long 은 더 넓은 범위 표현이 가능하다. 

 

여기서 1 Byte는 8 bit 로 8개의 0과 1의 숫자로 표현이 가능하다. 

첫 숫자는 + -를 나타내는 부호일 것이고, 그래서 2^7 = 128 , 즉 -128부터 127까지 표현 가능한 것이다. 

 

실수형(Default = Double)

 

소수점이 있는 수들을 나타낼 때 사용하는 자료형이다. 

Float와 Double이 있으면 Type을 지정해주지 않았을 때는 Default로 Double이 선택된다. 

 

논리형(Boolean)

 

그냥 c++에서 흔히 쓰는 true, false를 나타내는 bool이다. 별 내용이 없다

 

문자형(Character)

 

하나의 글자를 담을 수 있는 자료형이다. 문자형과 문자열형은 '' , ""로 구분을 하는데

똑같은 A  문자 하나를 'A'로 표현하면 Type은 문자형이고, "A"로 표현하면 Type은 문자열 형이다. 

그리고 Char(문자형)은 하나의 글자만 되기 때문에 'AB' 이런식으로 처리하면 Error 발생한다. 

 

문자열형(String)

 

여러 글자 혹은 한 글자도 표현 가능하다. 대신 "" 로 처리만 해주면 된다. 

 

 

여기서 이제 우리가 Compiler한테 Type을 알려주는 형식은 다음과 같다.

[var / val] [변수명] : [자료형] = [값]

ex ) var cash : Int = 100 
var real : Boolean = true 

 

그리고 특이한 기능이 하나 더 있는데 바로 숫자 Count할 때이다.

val BigNumber : Int = 1142312321312323
// 이렇게 큰 숫자를 할당하고 싶은데, 도저히 얼만지 가늠이 안된다. 
// 그래서 끊어 읽고 싶은 부분에 _ 처리를 해줘도 별 문제 없다.
val BigNumber : Int = 1_142_312_321_312_323

 

이렇게 해도 아무 문제 없어서 한국인들한테는 가독성이 많이 좋아진다 ㅋㅋㅋㅋ

 

// 변수를 자료형과 함께 서언하는 방법
// => val/var 변수명 : type = 값
// 타입은 생략할 수 있는데, 코틀린이 마음대로 정함. 아마도 INT로 할거임.
val byteInt: Byte = 10
val shortInt: Short = 10
val integerInt: Int = 10
val LongInt: Long = 10

//val wrongByte:Byte=10000
//the integer literal does not conform to the expected type Byte <== Error 발생
// Byte가 표현할 수 있는 범위보다 큰 수를 넣어버러셔 에러 발생.

//val wrongByte:Byte="안녕하세요?"
//error: type mismatch: inferred type is String but Byte was expected

val floatNumber: Float = 10.0f // float의 경우에는 할당하는 값 뒤에 f를 붙여줘야한다.
//안붙이면 아래 Error 발생
//error: the floating-point literal does not conform to the expected type Float

val DoubleNumber: Double = 10.0 // Double의 경우에는 할당하려는 값 뒤에 아무것도 붙이지 않아도 된다.
//val DoubleNumber1 : Double = 10 // 10과 10.0은 같지만 .을 찍어서 실수형이라는 것을 표현해야한다.


// 타입 추론
val number1 = 10 // 얘는 Int가 된다.
val number2 = 10.0 // 얘는 Default가 Double이 된다.

// 논리형
val yes: Boolean = true
val no: Boolean = false

// 문자형
val text1: Char = 'A'
//val text2:Char = 'AA' => error: too many characters in a character literal ''AA''
//val text3:Char = "A" //error: type mismatch: inferred type is String but Char was expected

// 묹자열형
val text4: String = "안녕하세요"
val text5: String = "안"

// 팁
// 타입을 선택할 때는 가장 작은 타입을 선택하는 것이 좋다.
// 실제로는 대부분 그냥 Int를 사용한다...

// 변수명
// val val : Int =10 -> 코틀린에서 선점해서 사용하고 있는 키워드는 변수명으로 사용할 수 없다.

 

읽어 주셔서 감사합니다 ~

'Programming > Kotlin' 카테고리의 다른 글

[Kotlin 뿌시기](5) 흐름제어  (0) 2023.12.27
[Kotlin 뿌시기](4) 메소드  (1) 2023.12.27
[Kotlin 뿌시기](3) 연산자  (1) 2023.12.26
[Kotlin 뿌시기](2) Null  (0) 2023.12.24