728x90
기초 구문
간단히 훑어보는 정도로 생각하면 편하다.
패키지 정의
패키지는 소스파일의 처음에 위치해야 한다.
package my.demo
import java.util.*
함수 정의
가장 기본적인 형태
fun sum(i: Int, j: Int): Int{
return i+j
}
expression body를 사용하고 리턴 타입을 추론
fun sum(i: Int, j: Int) = i + j
의미 없는 값을 리턴하는 함수
fun sum(a: Int, b: Int)/*: Unit*/{
println("---")
}
Unit리턴 타입은 생략 가능하다
로컬 변수 정의
val a: Int = 1 // 특시 할당 (Immutable)
val a = 1 // 타입추론
val a: Int //초기화를 하지 않으면 타입 필요
a = 1 //이후 할당
var b = 5 //Mutable
b = 6
문자열 템플릿 사용
println("$t ${sum(3, 4)}")
단순 변수의 값을 가져오려면 중괄호가 필요 없지만 식을 쓰기 위해선 중괄호를 넣어줘야 한다.
조건식 사용
기본 사용법은 다른 언어와 동일하지만 식처럼 사용할 수 있다.
fun test(a: Int, b: Int) = if(a>b) a else b
Null체크
null이 가능할 때는 반드시 레퍼런스를 명시적으로 nullable로 표시해야 한다
fun parseInt(str: String): Int?{ //정수를 리턴하지 않으면 null을 리턴한다고 할 때
...
}
nullable 한 값을 리턴할 때 반드시 null체크를 해줘야 한다.
타입 검사와 자동 변환 사용
is연산자는 식이 타입의 인스턴스인지 검사한다.
fun getStringLength(obj: Any): Int?{
if(obj !is String) return null //문자열이 아닌지 검사
//obj를 자동으로 String으로 변환
return obj.length
}
다음도 가능
fun getStringLength(obj: Any): Int?{
if(obj is String && obj.length > 0) //우변에서 obj를 자동으로 String으로 변환
return obj.length
return null
}
for, while, when, in은 뒤에 나올 흐름 제어 파트에서 자세히 다룰예정
이디엄(관용구)
DTO생성
data class Customer(val name: String, val email: String)
데이터 클래스로 생성하면 다음 기능을 가진 Customer클래스를 제공한다.
- getter, setter
- equals
- hashCode
- toString
- copy
- 모든 프로퍼티에 대한 component1(), component2(),...
데이터 클래스를 쓰게 되면 스프링에서 DTO생성 시 기본 메서드 5가지를 롬복을 통해 선언할 필요 없이 자동 제공해준다.
함수 패러미터의 기본 값
fun foo(a: Int = 0, b: String = ""){}
list Filtering
val pos = list.filter{ x -> x > 0 }
더 짧게 표현
val pos = list.filter{ it > 0 }
if not null 축약
val files = File("Test").listFiles()
println(files?.size)
if not null and else 축약
val files = File("Test").listFiles()
println(files?.size ?: "empty")
null이면 문장 실행
val values = ...
val email = values["email"] ?: throw IllegalStateException("email is missing")
null이 아니면 실행
val values = ...
value?.let{
...//null 이 아닌 블록 실행
}
null이 아니면 null가능 값 매핑
val value = ..
val mapped = value?.let { transformValue(it) } ?: defaultValueIfValueIsNull
식을 리턴
fun transform(color: String): Int{
return when(color){
"RED" -> 0
"GREEN" -> 1
"BLUE" -> 2
else -> throw IllegalArgumentException("Invalid color param value")
}
}
fun foo(param: Int){
val result = if(param == 1){
"One"
} else{
"Other"
}
}
단일식 함수
fun transform(color: String): Int = when (color) {
"RED" -> 0
"GREEN" -> 1
"BLUE" -> 2
else -> throw IllegalArgumentException("Invalid color param value")
}
728x90
'코틀린' 카테고리의 다른 글
타입 체크와 캐스트(is, as) (1) | 2023.01.30 |
---|---|
기본타입 (1) | 2023.01.30 |
스코프 함수 (0) | 2022.07.24 |
16. 코루틴 기본 (0) | 2022.06.13 |
15. 인라인 함수 (0) | 2022.06.13 |