코틀린이란?
코틀린 플레이그라운드
변수 (Val, Var)
비슷한 세 개념 간단 정리
타입 (문자, 숫자, 데이터)
자바와 100% 호환되면서 더 간결한 언어로 주로 안드로이드 앱 개발에 사용된다고한다. 특히 구글이 안드로이드앱예시 코드들을 모두 코틀린으로 제공하는등 크게 힘을 받고 있는 언어라고한다.
코틀린의 장점
1. 기존 자바 Java 코드와 100% 호환이 된다.
2. 코루틴 : 백그라운드 작업들을 구조화된 동시실행 하는 것
3. 표현력이 높고 간결하다
4. 프로그래밍 실수를 방지하는 기능이 있다. 예) null 포인터 예외
코틀린을 설치하지 않아도 Kotlin 플레이그라운드 에서 실습이 가능하다.(메모리 제한이 있어서 500만회 루프문 같은건 불가능하다)
val : 읽기 전용
var : 변경 가능
println(변수명) : 변수명에 할당된 값을 출력한다.
fun main() {
val value: String = "value111"
var variable: String = "value222"
println(value)
println(variable)
}
플레이그라운드에서 위와 같은 코드를 실행해보자

정상적으로 value111 과 value222가 출력된다.

변경 가능한 변수인 variable에 새로운 값을 넣은뒤 println을 하면 새로 할당 된 값이 출력된다.

하지만 변경 불가능한 변수인 value에 새로운 값을 넣으면 컴파일 도중에 Val cannot be reassigned, Val은 변경될 수 없습니다.라는 에러가 뜨게 된다.
fun main() {
var variable: String? = "value222"
println(variable)
variable = null
println(variable)
}
아까의 코드와 비슷해보이지만 String의 옆에 ?가 붙어있다. 만약 이것을 붙이지 않는다면 Null can not be a value of a non-null type String라는 오류가 뜨게된다. Null은 논-널 타입 스트링의 값이 될 수 없습니다. 타입이 뭔지는 조금 뒤에 설명하겠다.

또한 변수의 타입옆에 ?를 붙이면 null을 할당 할 수 있다.
null은 아무런 값도 없다고 굳이 말해두는 것이다.
null : 변수에 비어있다라는 값이 들어있는 것
undefined : 변수에 아무런 값도 들어있지 않은 것
즉, 아예 비어있는 상자이다.
0 : 변수에 0이라는 값이 들어 있는 것
앞서 설명한 Var,Val이 변수에 할당된 값이 변하느냐? 변하지 않느냐?를 따졌다면 타입은 변수 안에 들어갈 값의 종류를 정하는 것이다.
문자를 저장하는 타입이다.문자는 가나다라마바사같은 한글이나 abcDEF같은 영어 심지어 0123456789같은 숫자도 포함한다.
대신 문자 타입에 1이라는 숫자를 넣었다면 이건 1이라는 글자지 1이라는 숫자가 아님에 주의해야한다.
Char : 한글자만 가능, 작은 따옴표''로 표현함
String : 한글자 이상, 큰 따옴표""로 표현함
fun main() {
val Char: Char = 'a'
val String1: String = "a"
val String2: String = "'abc'"
println("Char : $Char")
println("String : $String1")
println("String : $String2")
}

스트링을 한글자 이상이기 때문에 한글자로도 가능하다, 대신 무조건 큰 따옴표""를 사용해야한다.
숫자가 들어가는 타입이다.
Int : 정수형, 소숫점이 없는 숫자를 의미한다.
Float : 소수점이 존재하는 숫자를 의미한다. 숫자의 뒤에 f를 붙여야한다. (32비트)
fun main() {
val Int : Int = 1
val Float1: Float = 1f
val Float2: Float = 1.0000001f
val Float3: Float = 1.00000001f
println("Int : $Int")
println("Int1 : $Float1")
println("Int2 : $Float2")
println("Int3 : $Float3")
}

똑같이 1이라는 정수를 할당해도 int형에서는 1이 나오며 float형에서는 1.0이라는 값이 나온다.
그리고 float는 32비트의 숫자를 저장하는데 32비트는 저장할 수 있는 숫자의 크기라고 생각하면 된다.
소숫점 아래 7자리 까지는 제대로 출력하지만 8자리 부터는 크기의 한계때문에 1.0으로 저장하고 출력하는 모습을 보여준다.
데이터들을 다루기 위한 타입이다.
List : 이름 그대로 목록으로 데이터를 저장
Set : list와 비슷하지만 중복되는 값이 없는 형식이다.
Map : 데이터를 key:value페어로 저장한다. 쉽게말해 이름과 값들을 나열해 놓는 데이터 형식
fun main() {
val List: List<String> = listOf("one", "이", "3", "3")
val Set: Set<String> = setOf("one", "이", "3", "3")
val Map: Map<String, Int> = mapOf("민수" to 30, "철수" to 25)
println(List)
println(Set)
println(Map)
println(Map["민수"])
}

보다시피 list는 같은 값을 두번 넣어도 그대로 내놓고, set은 같은 값을 두번 넣었지만 한번만 내놓았다.
map은 key값과 value값이 하나로 합쳐져있으며, 키값을 입력해서 밸류값만 따로 출력할 수 도 있다.