인프런 최태현님의 코틀린 강의를 토대로 정리했습니다
변수명: 데이터타입
형태
var
: 변경 가능한 변수
val
: 변경 불가능 (final)
타입을 명시적으로 안써줘도 상관없다
자바처럼 Primitive Type
과 Wrapper Type
을 구분하지 않는다
null
이 들어갈 수 있는 변수는 타입 뒤에 ?
를 붙인다fun testMethod(name: String?) // name의 타입은 String이지만 뒤에붙은 '?'로 null이 될수있음을 의미
{
}
코틀린은 null
검사에 매우 엄격하다
코드 상단에서 null
검사를 한번이라도 했다면 해당 값은 non-null
로 판단한다
코드 상단에서 nullable
한 변수라고 선언했는데 null
체크를 하지 않았다면 에러
해당 변수가 null
인지 판단하는 Safe Call
만약 해당 변수가 null
이라면 그대로 null
반환
fun testMethod(name: String?){ // name의 타입은 String이지만 뒤에붙은 '?'로 null이 될수있음을 의미
println(name?.length) // name이 null이 아니라면 name의 length를 구한다. null이라면 null그대로 출력
}
Elvis 연산자
fun testMethod(name: String?){
println(name?.length ?: 0) // "?:" 앞의 값이 null 이라면 뒤에있는 값을 반환. name이 null이라면 0을 출력, null이 아니라면 name의 길이 출력
}
null
값 아님 보증 !!
nullable
하다고 선언했지만, null
체크를 안하더라도 null
아님을 보증하며 컴파일시 에러가 나지 않는다fun testMethod(name: String?){ // name은 nullabel하다고 선언
println(name!!.length) // null값 아님이 보증되어 가능
println(name.length) // 에러
}
Any
: 자바의 Object
역할. 하지만 null
을 표함하지 않아 null
포함을 위해 Any?
로 표현
Unit
: 자바의 void
역할. 함수형 프로그래밍에서 단 하나의 인스턴스만 갖는 타입을 의미
Nothing
: 함수가 정상적으로 끝나지 않음을 의미. 무조건 예외를 반환하는 함수, 무한루프 함수 등
자바에서 String
값을 가져오기 위해 str.charAt(0)
을 사용했었지만, 코틀린에서는 배열처럼 str[0]
처럼 사용
자바에서 객체끼리의 주소를 비교하기위해 ==
를 사용하고, 코틀린에서는 ===
을 사용한다
자바에서 객체 값을 비교하기 위해 .equals
를 사용하고, 코틀린에서는 ==
을 사용한다
in
: sql문에서 사용하듯 값이 컬렉션에 포함되어있는지 확인
!in
: 컬렉션에 포함되어있지 않은지 확인
a..b
: a부터 b까지의 범위 객체를 생성