https://developer.android.com/studio?hl=ko
https://github.com/code-with-joyce/must_have_android
- 간결함: 기능이 다양한 표준 라이브러리를 제공해 상용구 코드를 적게 작성하면서도 아이디어를 풍부하게 표현할 수 있다.
- 더 안전한 코드: 널 포인터 예외와 같은 일반적인 프로그래밍 실수를 방지하는 다양한 장치를 제공한다.
- 호환성: 자바와 100% 호환되므로 자바로 작성된 코드도 자유롭게 사용할 수 있다. 반대로 자바 환경에서도 코틀린을 아무 문제 없이 사용할 수 있다.
- 구조화된 동시 실행: 코틀린 코루틴을 사용하면 비동기 코드를 쉽게 사용할 수 있다. 코루틴을 이용하면 네트워크 호출, 로컬 데이터 액세스에 이르는 백그라운드 작업을 효과적으로 간단히 구현하고 관리할 수 있다.
println("Hello world")
val pi : Double = 3.14 // val 변수명 : 자료형
println(pi)
val name = "gil-dong" // 형추론 (String)
println(name)
var age = 21
println(age)
age = 25
println(age)
val numByte : Byte = 100
val numShort : Short = 20
val numInt : Int = 1 // 자료형 생략 가능
val numLong : Long = 2L // 자료형 생략 가능
val numDouble : Double = 3.2 // 자료형 생략 가능
val numFloat : Float = 3.2f // 자료형 생략 가능
val char : Char = 'H' // 자료형 생략 가능
val string1 : String = "Hi, This is String" // 자료형 생략 가능
val isTrue : Boolean = true // 자료형 생략 가능
val stringArray : Array<String> = arrayOf("apple", "banana", "grape")
println(stringArray[0])
val intArray = arrayOf(1,2,3) // 자료형 생략
println(stringArray[0]) // apple
println(intArray[2]) // 3
// 명시적 형변환
val score = 100 // Int 형
println(score.javaClass)
println(score.javaClass.kotlin)
val scoreString = score.toString() // String 형
val scoreDouble = score.toDouble() // Double 형
println(scoreDouble) // 100.0
println(scoreDouble.javaClass.kotlin) // 100.0
// 산술연산
println("${a} + ${b} = ${a + b}")
println("${a} - ${b} = ${a - b}")
println("${a} * ${b} = ${a * b}")
println("${a} / ${b} = ${a / b}")
println("${a} % ${b} = ${a % b}")
// 관계연산
println("${a} > ${b} : ${a > b}")
println("${a} < ${b} : ${a < b}")
println("${a} >= ${b} : ${a >= b}")
println("${a} <= ${b} : ${a <= b}")
println("${a} == ${b} : ${a == b}")
println("${a} != ${b} : ${a != b}")
// 논리연산
val b1 = true
val b2 = false
println("${b1} and ${b2} : ${b1 and b2}")
println("${b1} && ${b2} : ${b1 && b2}")
println("${b1} or ${b2} : ${b1 or b2}")
println("${b1} || ${b2} : ${b1 || b2}")
println("! ${b1} : ${! b1}")
// 마이너스 값에 대한 나머지 연산시 부호를 따라감. 자바와 같음.
println("${a} % ${b} = ${a % b}")
val a2 = -7
println("${a2} % ${b} = ${a2 % b}")
// 두 객체가 메모리 상에서 동일한 위치를 가리키는지 확인
println("${a} === ${b} : ${a === b}")
val c = a
println("${a} === ${c} : ${a === c}")
// 두 객체가 메모리 상에서 서로 다른 위치를 가리키는지 확인
println("${a} !== ${b} : ${a !== b}")
println("${a} !== ${c} : ${a !== c}")
fun printAge(age : Int) : Unit {
println(age)
}
printAge(15)
fun printAge2(age : Int) {
println(age)
}
printAge2(15)
fun addNum(a : Int, b: Int) : Int {
return a + b
}
println(addNum(200, 400)) // 600
fun minusNum(a : Int, b : Int) = a-b
println(minusNum(minusNum(1000, 200), 100)) // 700
val price = 3000
val tax = 300
val originalPrice = "The original price is $price"
val totalPrice = "The total price is ${price + tax}"
println(originalPrice) // The original price is 3000
println(totalPrice) // The total price is 3300
val numRange : IntRange = 1..5
println(numRange.contains(3)) // true
println(numRange.contains(10)) // false
val charRange : CharRange = 'a'..'e'
println(charRange.contains('b')) // true
println(charRange.contains('z')) // false
// for 문
for (i in 1..5) {
println(i) // 1, 2, 3, 4, 5
}
for (i in 5 downTo 1) {
println(i) // 5, 4, 3, 2, 1
}
for (i in 1..10 step 2) {
println(i) // 1, 3, 5, 7, 9
}
val students = arrayOf = arrayOf("jun-gi", "jun-su", "si-u", "yeon-seo", "jun-seo")
for(name in students) {
println(name)
}
for((index,name) in students.withIndex()) {
println("Index : $index Name : $name")
}
// while 문
var num = 1
while(num < 5) {
println(num)
num++
}
// 리스트
val numImmutableList = listOf(1,2,3)
numList[0] = 1
val numMutableList = mutableListOf(1,2,3)
numMutableList[0] = 100 // 첫 번째 요소를 1에서 100으로 변경
println(numMutableList) // [100, 2, 3]
println(numMutableList[0]) // 100
println(numMutableList.contains(1))
println(numMutableList.contains(2))
// 셋
val immutableSet = setOf(1,1,2,2,2,3,3)
println(immutableSet)
val mutableSet = mutableSetOf(1,2,3,3,3,3)
mutableSet.add(100)
mutableSet.remove(1)
mutableSet.remove(200)
println(mutableSet)
println(mutableSet.contains(1))
// 맵
val immutableMap = mapOf("name" to "junsu", "age" to 13, "age" to 15, "height" to 160)
println(immutableMap)
val mutableMap = mutableMapOf("돈까스" to "일식", "짜장면" to "중식", "김치" to "중식")
mutableMap.put("막국수", "한식")
mutableMap.remove("돈까스")
mutableMap.replace("김치", "한식")
println(mutableMap)