인텔리제이 제품 만든 젯브레인에서 만든 언어
2011년도 최초 공개 후 16년 2월에 정식 1.0 버전 오픈
파일명: .kt
코틀린 플레이그라운드 이용하면 코드 코드 웹에서 테스트 가능
큰 특징
;
안 써도 됨new
안 써도 됨print()
썼던건 println()
으로 한줄 출력''
이 아닌 ""
로 표시Int
, Double
이렇게 앞글자 대문자로 표기변수 선언 방식
: 타입을 변수명 뒤에 배치한다.
val/var 변수명 : 변수타입 = 초기값
가변/불변
val
value 값 = final 과 유사var
variable 변수 val a : Int = 10
// 초기값이 있을 땐 타입 추론해서, 변수 타입 명시 안 해줘도 됨
val a = 10
string template
: $
, ${}
dart와 동일, 문자열은 "" 쌍 따움표로 표기
val name = "bora";
println("my name is $name");
println("my name is ${name}");
null값 허용 여부를 컴파일 단계에서 검사
dart와 거의 동일하며,
dart와 다른 점이 있는 특징이 있을 때만 인용박스를 넣어 설명하겠습니다.
타입 nullable or non-null 선언
```kotlin
// nullable
val name: String? = null
// non-null
val name: String = "bora"
```
.?
null safe operator
var name : String?
...
// null이 아닐 때만 뒷 함수 처리, null 일 경우 null로 반환
name?.toUpperCase()
?:
default 값을 주고 싶을 때
var name:String?
print("${name ?: "bora"}")
dart에선 아래와 같이
??
였지만 kotlin에선 위 처럼?:
로 표시String? name; print('${name ?? 'bora'}');
!!
not-null assertion (null 아니라는 걸 보증 할 때)
fun printFunction(name: String?){
print(name!!);
}
dart에선 아래와 같이
!
였지만 kotlin에선 위 처럼!!
로 표시void printFunction(String? name){ print(name!); }
let{}
null이 아닐 때 다음 코드블럭 {} 수행
: let 함수 안에선 it
키워드로 참조
name?.let{
// 여기 안에선 name 값은 non-nullable해
// 여기 안에서 non-nullable한 name 변수값은 it 으로 접근
println('email: $it')
}
dart에선 없었던 함수이자 기능입니다 🫢
if(name != null){}
함수 대신let{}
으로 사용합니다.
lateinit
초기화 지연 (non-null값인데 초기화 나중에 할 때)
: 수정자를 이용해 나중에 초기화 하도록
lateinit var name: String;
...
name = "bora"
dart
late
와 같습니다.
.isNullOrBlank()
, .isNullOrEmpty()
null 또는 빈값 체크
: nullable 타입에 extension function 제공
var name: String?;
...
// null값에 함수 접근하면 null exception을 냈겠지만, 이 확장 함수는
// null.isNullOrBlank 하면 true 반환
if(!name.isNullOrBlank()){
println("name: $name")
}
as?
타입 캐스팅 안될 때 에러 대신 null 반환
val name = json["name"] as? String
함수 생성 방식
fun 함수_이름 : 함수_타입 {}
fun 함수_이름 (파라미터_이름:파라미터_타입) : 함수_타입 {}
main 함수
fun main () {}
반환 타입
void = Unit
int, double, float, String = Int, Double, Float, String // 앞글자 다 대문자
// 함수 타입 명시
fun function1 : Unit {}
// 함수 타입은 마지막 라인 보고 타입 추론, 생략 가능
fun function1 {}
단일 표현식
: =
로 중괄호{}
감쌀 필요 없음;;
// before
fun test(x:Int, y:Int) :Int {
return x*y
}
// after (단일 표현식)
fun test(x:Int, y:Int) = x*y
가변길이 파라미터
: vararg
키워드로 파라미터 갯수를 가변적으로 받을 수 있음;;!
fun main() {
displayStrings("1")
displayStrings("2", "a", "b")
displayStrings("2", "a", "b", "c", "d")
}
fun displayStrings(vararg messages: String) {
for (message in messages) println(message)
}
다른 파라미터 있는 경우
: 맨 마지막 파라미터로 선언
fun main() {
displayStrings(true, "1")
displayStrings(true, "2", "a", "b")
displayStrings(false, "2", "a", "b", "c", "d")
}
fun displayStrings(isPrint: Boolean, vararg messages: String) {
if(!isPrint) return
for (message in messages) println(message)
}