Performance, Correctness, Refactoring
getters,setters를 만들고 equals(), hashCode(), toString(), copy() 등을 재정의 해줘야 하는데 코틀린에서는 data class Customer(val name: String, val email: String)으로 끝.object를 통해 싱글톤 지원object a {
val a = "ss"
}null포인트 가능성을 줄여줌
null을 넣어서 null포인트 처리 x
var a: String
a = null //컴파일 에러
val a: String? = null
print(a.length()) //컴파일 에러 - null일수도 있으니
하이브리드 언어 = oop + 함수형 프로그래밍
KMP
나는 크로스 플랫폼이 아니라 네이티브 개발자이다
코틀린이 원하는 세상 - 멀티 플랫폼 세상
ultimate
community
한 프로젝트는 여러개의 모듈이있고 그안에는 리소스파일,폴더,파일들이 있다(물리적구조)
패키지(논리적구조)
package 안적으면 디폴트 패키지로 적용
코틀린 - 폴더구조와 패키지명을 일치시키지 않아도됨 (패키지 이름만 같으면됨)
패키지안에서는 변수, 함수 ,클래스 그냥 다 공유가능( 패키지 다르면 못씀 )
그럴땐 import해서 써야함
코틀린은 클래스명과 파일명이 일치하지 않아도됨
하나의 파일에 여러개 클래스 넣어도 됨
kotlin에서 표현식(expression)은 변수, 연산자로 구성되어 단일 값을 리턴하는 코딩표현을 의미
val sum:Int
sum = 21 + 27
---
evenOrOdd = if(randomValue % 2 == 0) "짝수" else "홀수
프로그래밍에서 문장은 수행 할 작업을 나타내는 명령형 프로그래밍언어의 가장 작은 독립된 실행 형 요소
val sum = 21 + 27 ----> 문장
val evenOdd = if(randomValue % 2 == 0) "짝수" else "홀수“ ------> 문장
fun sum(a: Int, b: Int) = a + bUnit(Object)로 리턴함. (Unit은 java에서 void 리턴 역할, Unit 생략가능)fun a: Unit {
println("aaa")
}val(value) : 읽기전용, 값 할당이 1회만 가능, java final과 유사, Assign-once변수
val a: Int = 1 //즉시할당
val b: = 2 //type추론
val c: Int //컴파일 오류 - 초기화필요
c = 3 //컴파일 오류 - 읽기전용
var(variable) : Mutable 변수, 값 변함, Mutable변수
// : java와 같음
/* */ (block comment) : java와 다르게 중첩 가능
/*ㅁㄴㅇ
/* ㅁㄴㅇㅁㄴㅇㄴ*/
*/
문자열 보간법 (String Interpolation)
var a = 1
val s1 = "a is $a"
a = 2
val s2 = "${s1.replace("is","was")}, but now is $a"
fun maxOf(a:Int, b: Int) = if (a>b) a else b가능하면 캐션 마크로 선언하지마, null이 아니도록 프로그래밍
리턴값이 정수가 아니면 null리턴 시키기.
fun a(str:String): Int? {
//정수가 아닌 경우 null을 리턴
}
nullable 타입의 변수를 접근할 때는 반드시 null체크를 해야함. 그렇지 않으면 컴파일 오류 발생
val x: Int? = number
if(x != null){ //nullable타입 변수니까
}
else{
}
타입 체크만 해도 자동으로 타입 변환이 됨
fun a(b:Any): Int? {
if(b is String){ //b가 String이라면?
//b가 자동으로 String타입으로 변환됨
return b.length
}
return null
}
java의 switch case랑 비슷한데 다름. when은 모든게 지원됨
when(a){
1 ->
"a" ->
is Long ->
!is Long ->
else ->
}
in연산자를 이용해 숫자 범위 체크
val x = 3
if(x in 1..10){
}
range를 이용한 loop
for(x in 1..5){
}
컬렉션도 in으로 loop가능
val items = listOf("a","b","c")
for (item in items){
print(item)
}
in으로 해당값이 collection에 포함 되나 체크 가능
val items = setOf("a","b","c")
when {
"e" in items -> print("good")
}
람다식을 이용해 컬렉션에 filter, map등의 연산 가능
items.filter { it. startsWith("a")}
.sortedBy { it }
.map { it.toUpperCase() }
.forEach { println(it) }