Kotlin
[새차원 코틀린(Kotlin) 강좌] 3. Basic Syntax 정리
YoungBok
2021. 7. 5. 02:32
728x90
반응형
이번 여름방학에 코틀린(Kotlin)이라는 프로그래밍 언어를 배워보기로 했다. 우선 개념을 배우기 위해 새차원님의 코틀린 유튜브 영상을 참고했으며 이를 바탕으로 내 방식대로 정리해보려고 한다.
출처: https://www.youtube.com/watch?v=zoYXKQImmwg
1. 패키지 정의
- 패키지 정의는 파일 최상단에 위치
- 디렉터리와 패키지를 일치하지 않아도 됨 (Java와 다른점)
package my.demo
import java.util.*
// ..
2. 함수 정의
- 함수는 fun 키워드로 정의
fun sum(a: Int, b: Int): Int {
return a + b
}
- 함수 몸체가 식(Expression)인 경우 return 생략 가능 -> 이런 경우 return type이 추론됨
fun sum(a: Int, b: Int) = a + b
- 리턴할 값이 없는 경우 → Unit(Object)으로 리턴
- Unit: Java에서 void 리턴 역할, 생략 가능
fun printKotlin(): Unit {
println(“hello Kotlin”)
}
fun printKotlin() {
println(“hello Kotlin”)
}
3. 지역 변수 정의
- val : 읽기전용 변수 → 값의 할당이 1회만 가능, Java의 final과 유사
val a: Int = 1 // 즉시 할당
val b = 2 // ‘Int’type 추론 (생략가능)
val c: Int // 컴파일 오류, 초기화가 필요함
c = 3 // 컴파일 오류, 읽기전용
- var : Mutable 변수 → 값을 할당 및 변화시킬 수 있음
val x = 5
x += 1
4. 주석
- Java와 Javascript와 동일함
- // : 한 줄 주석
- /* */ : 여러 줄 주석 (block comment)
- block comment가 Java와 다르게 중첩 허용됨
// 한줄 주석
/* 여러줄
주석 */
/* block comment가
/* 중첩도 가능 */
*/
5. 문자열 템플릿
- String Interpolation (문자열 보간법) ★
val a = 1
// simple name in template:
val s1 = “a is $a” // 변수에 접근해서 직접 가져올 수 있음
a = 2
// arbitrary expression in template:
val s2 = “${s1.replace(”is“, ”was“)}, but now is $a”
더보기
[실행결과] a was 1, but now is 2
※ replace(A, B) : A를 B로 바꾸기(대체)
6. 조건문
fun maxOf(a: Int, b: Int): Int {
if (a > b) {
return a
} else {
return b
}
}
- 조건식으로 사용가능
fun maxOf(a: Int, b: Int) = if (a > b) a else b
7. nullable ★
- 값이 null일 수 있는 경우 타입에 nullable 마크를 명시해야 함
- nullable 타입의 변수를 접근할 때 반드시 null 체크를 해야 함!! -> 그렇지 않으면 컴파일 오류 발생
fun parseInt(str: String): Int? {
// 정수가 아닌 경우 null을 리턴
}
fun printProduct(arg1: String, arg2: String) {
val x: Int? = parseInt(arg1)
val y: Int? = parseInt(arg2)
if (x != null && y != null) { // NULL 체크를 꼭 해줘야 x, y에 접근이 가능해짐!
println(x * y)
} else {
println(“either ‘$arg1’or ‘$arg2’is not a number”) // 직접 접근 가능
}
}
8. 자동 타입 변환
- 타입 체크만 해도 자동으로 타입이 변환됨
fun getStringLength(obj: Any): Int? { // Any: Java에서 object 타입
if (obj is String) { // obj가 String 객체라면?
// ‘obj’가 자동으로 String 타입으로 변환 됨
return obj.length
}
return null
}
- while loop (Java와 거의 같음)
val items = listOf(“apple”, “banana”, “kiwi”)
var index = 0
while (index < items.size) {
println(“item at $index is ${items[index]}”)
index++
}
- when expression (switch문과 비슷함)
fun describe(obj: Any): String
= when (obj) {
1 -> “One“
“Hello” -> “Greeting”
is Long -> “Long”
!is String -> “Not a string”
else -> “Unknown“
}
- ranges
- in 연산자를 이용하여 숫자 범위 체크 가능
val x = 3
if (x in 1..10) { // 1~10 사이에 x가 있는지 확인
println(“fits in range”)
}
- range를 이용한 for loop
for (x in 1..5) {
print(x)
}
- collections
- 컬렉션도 in으로 loop 가능
val items = listof(“apple”, “banana”, “kiwi”)
for (item in items) {
println(item)
}
- in으로 해당 값이 collection에 포함되는지 체크 가능
val items = setof(“apple”, “banana”, “kiwi”)
when {
“orange” in items -> println(“juicy”)
“apple” in items -> println(“apple is fine too”)
}
- 람다식을 이용해서 collection에 filter, map 등의 연산 가능
val fruits = listof(“banana”, “avocado”, “apple”,“kiwi”)
fruits
.filter { it.startsWith(“a”) } // a로 시작하는 값들만
.sortedBy { it }
.map { it.toUpperCase() } // 대문자로 바꾸기
.forEach { println(it) }
728x90
반응형