굥뷰를 햡시댜
[Kotlin] Basic Syntax 본문
(+ Inflearn -> 새차원님의 Kotlin 강좌를 토대로 공부했습니다.)
1. 패키지 정의
- 파일 최상단에 정의해야 합니다.
- 디렉터리와 패키지를 일치시키지 않아도 됩니다.
- ex) 아래와 같이 선언하시면 됩니다.
package my.demo
/* ..... */
2. 함수 정의
- 함수는 'fun' 키워드로 정의합니다.
- ex) fun '함수명'('매개변수 이름': '타입', '매개변수 이름': '타입'): '반환형 타입' 순으로 함수를 선언했습니다.
fun sum(a: Int, b: Int): Int {
return a + b
}
- 함수 몸체가 식(expression)인 경우 return을 생략해서 함수를 작성할 수 있습니다.
- ex) 몸체가 식인 경우 아래와 같이 함수를 작성하시면 됩니다.
- 아래와 같이 작성하게 되면 컴파일러가 알아서 return 타입을 추론해줍니다.
fun sum(a: Int, b: Int) = a + b
- 함수의 return 타입을 따로 명시하지 않는 경우 Unit(Object)로 return 합니다.
- Unit은 void와 같은 역할을 합니다.
- 정리 : 함수의 반환 타입을 쓰지 않으면 디폴트 값으로 Unit이 됩니다.
- ex) 아래와 같이 작성해주시면 됩니다.
//Unit 쓴 경우
fun printKotlin(): Unit {
println("Hello Kotlin")
}
//Unit 안 쓴 경우
fun printKotlin() {
println("Hello Kotlin")
}
3. 지역변수 정의
val | var |
|
|
//val
//잘 선언한 예
val a:Int = 1 //선언과 동시에 할당해줘야함
val b = 2 //타입을 따로 선언하지 않더라도 컴파일러가 b의 타입을 자동으로 Int로 추론해줌
//잘못 선언한 예
val c:Int //컴파일 에러, 초기화가 필요함
c = 11 //컴파일 에러, 읽기 전용
//var
var x = 5
x += 1
5. 문자열 템플릿
- 문자열 보간법(String Interpolation)
- '$' 기호를 이용하여 변수에 직접 접근하여 값을 가져올 수 있다.
- ex) 아래 코드를 보면 $를 이용하여 값을 직접 가져온 것을 확인할 수 있다.
- Kotlin의 강력한 장점중 하나이다. { }를 사용해서 문자열 안에서 문자열을 유동적으로 바꿀 수 있다.
var a = 1
var s1 = "a is $a" //-> s1에는 "a is 1"이 저장됨
a = 2 //a의 값을 2로 바꿔주고
val s2 = "${s1.replace("is", "was")}, but now is $a"
//s1의 "is"를 "was"로 바꿔주고 a의 값을 가져와서
//s2에는 "a was 1, but now is 2"가 저장됨
6. 조건문(if)
- 다른 프로그래밍 언어에서 사용하는 것과 똑같음
- ex) 아래와 같이 활용할 수 있다.
fun maxOf(a: Int, b: Int):Int {
if(a>b) return a
else return b
}
//함수 몸체가 식(expressioin)인 경우
fun maxOf(a:Int, b:Int) = if(a>b) return a else b
7. nullable
- 값이 null일 수 있는 경우 타입에 nullable 마크를 명시해야 함 -> '?'
- ex) '?'는 ?앞의 반환할 타입(Int)이 나올수도 있고 null이 나올수도 있다는 것을 의미함.
fun parseInt(str: String): Int? {
//정수가 아닌 경우 null 리턴
}
- nullable을 사용했으면 항상 null 체크를 해줘야 함.
- ex) 아래와 같이 check
fun printProduct(arg1: String, arg2: String) {
val x: Int? = parseInt(arg1)
val y: Int? = parseInt(arg2)
//null인지 체크해주는 부분
if(x != null && y != null) {
println(x * y)
}
else {
println("either '$arg1' or '$arg2' is not a number")
}
}
8. 자동 타입 반환
- 타입 체크만 해도 자동으로 타입 변환이 됨
- 'is'를 사용
- ex) if(obj is String)
fun getStringLength(obj: Any): Int? { //Any는 Object type으로 최상위 클래스
if(obj is String) {
// -> 자동으로 obj의 타입이 String으로 바뀜
return obj.length
}
return null //obj가 null일 경우 null 반환
}
9. While loop
- 그냥 while문 처럼 사용하면 됨.
10. When expression
- Kotlin의 강력한 기능중 하나임..
- 객체, 정수, String 등등.. 모든 타입에 대해 사용 가능
- ex) 다음과 같이 사용할 수 있음
//함수 몸체가 식(expression)인 경우
fun describe(obj: Any): String =
when(obj) {
1 -> "One"
"Hello" -> "Greeting"
is Long -> "Long"
!is String -> "Not a String"
else -> "Unknown"
}
11. ranges
- 'in' 연산자를 이용해서 숫자 범위 체크 가능
- ex) 예제를 보는게 더 빠르다
//
val x = 3
if(x in 1..10) { //..은 범위를 나타낸다. 여기서는 1부터 10까지를 나타낸다(1과 10 포함)
println("fits in range")
}
12. Collections
- Collections도 in으로 loop열기 가능함
- ex) in으로 loop 실행
val items = listOf("apple", "banana", "kiwi")
for(item in items) { //items에 있는 원소 하나씩 순차적으로 반복
println(item)
}
- in으로 해당 값이 collection에 포함되는지 체크 가능
- ex) 다음과 같이 in으로 해당 값이 싶오..
val items = setOf("apple", "banana", "kiwi")
while {
"orange" in items -> println("juicy")
"apple" in items -> println("apple is fine too")
}
- 람다식을 이용해서 컬렉션에 filter, map등의 연산을 하는 기능
var fruits = listOf("banana", "avocado", "apple", "kiwi"):
fruits
.filter(it.startsWith("a");
.sortedBy{it}
.map{it.toUpperCase()}
.forEach(println(it))
}
'언어 > Kotlin' 카테고리의 다른 글
[Kotlin] Inheritance (0) | 2019.04.24 |
---|---|
[Kotlin] Class (0) | 2019.04.24 |
[Kotlin] Packages, Return and Jumps (0) | 2019.04.24 |
[Kotlin] Control Flow (0) | 2019.04.24 |
[Kotlin] Basic Types (0) | 2019.04.23 |
Comments