- 코틀린은 간결한 문법을 사용하여 문장 끝에 세미콜론을 붙이지 않으며, new 키워드를 사용하지 않고 객체를 생성한다. 그리고 타입추론을 가능케하여 대개 타입을 적지 않아도 된다.
- 변수의 불변과 가변을 구분짓는다. 또한 변수의 선언과정에서 자바와 반대로 이름과 타입순으로 적는다. 이름과 타입 사이에는 콜론(:)이 들어간다.
+val(value) : 불변
+var(variable) : 가변
val name = "brother jun" // 세미콜론이 없으며 타입추론으로 String 타입으로 받아들인다.
var names = "bro jun" // 가변이 가능한 var(variable) 타입, 불변은 val(value)를 사용한다.
name = "brother jun" // error 발생! val 변수는 불변으로 값 할당은 초기 1번만 가능하다.
val Car = Car(name); // new를 사용하지 않고 객체를 생성한다.
val a: String = "bro" // kotlin은 타입과 값의 위치가 자바와 달리 반대이다, String 타입의 a 선언
val b = "bro" // 타입추론으로 String 타입 생략 가능
val c: String // 선언만 할시 타입 생략이 불가하다.
c = "jun"
- 자바와 달리 컴파일 과정에서 널 허용 여부를 검사하여 런타임 오류를 대폭 줄일 수 있다. 널값을 허용하는 경우 타입 뒤에 '?'를 붙인다. 생략되어 있다면 널값을 허용하지 않는다. 또한 타입 뒤에 '!'가 붙어있다면 널 허용 여부에 대한 정보를 포함하고 있지 않는 것이며, 이를 플랫폼 타입이라 한다.
- 코틀린은 자바와 달리 모든 타입을 객체로 표현해 원시타입(int, double등)과 래퍼 클래스를 구분하지 않는다. 컴파일 과정에서 효율적인 타입으로 변환되기 떄문이다. 컬렉션의 타입 인자로 사용된다면 래퍼로, 값이나 변수라면 원시타입으로 말이다.
- 컬렉션 프레임워크를 효율적으로 다룰 수 있도록 스트림API를 지원한다. 스트림의 중간연산과 최종연산을 사용할 수 있다.
- 함수 선언시에도 변수와 마찬가지로 이름과 타입순으로 정의된다.
fun addfun(a: Int, b: Int) : Int {
return a + b
}
// 매개변수 인자도 이름과 타입순이며, addfun의 타입은 Int이다. 함수의 타입을 Unit으로 설정시 반환형 생략이 가능하다.
- if조건문은 동일하게 사용하며 되며 switch문 대신, when문을 사용한다. case 대신, '->' 를 사용한다.(1 -> 실행문장 // 1일 경우 화살표 뒤에 실행할 문장을 기입, else -> 적용되는 케이스가 없을 경우 실행할 문장 ) 또한 for문을 지원하지 않고 foreach문만 지원한다.
- '$'로 변수를 받아 사용한다. Int형 타입의 a값을 출력하고자 할때, '$a'의 방식으로 사용한다.