코틀린은 자바를 보완하기 위해서 만들어진 언어 - 자바와 완전한 호환성
안드로이드 first언어로 선정되었다.
fun sum(a: Int, b: Int) : Int){
return a+b
}
fun sum(a: Int, b:Int) = a+b
return type을 명시해준다. 2번째 함수는 표현식으로 작성한 함수이다.
두개의 sum함수가 같은 기능!
val a: Int = 1
val b = 2
val c = 3.14
val d: String
코틀린에서는 타입추론이 가능하다.
d처럼 초기화를 안하면 error가 난다.. (null 때문에)
val e:String?
var d: String = "초기화" 이렇게 초기화를 해줘야된다.
val 은 두번초기화 할수가 없고 var로 해야지 여러번 초기화해줄수있다.
정수형 : Byte, Short, Int, Long
실수형 : Float , Double
char
String
Boolean Boolean? = null 뒤에 ?가 붙어있으면 null,True,Flase가 가능핟.
등이 있고 자바에있는 type들과 호환이 된다.
for (i in 1..5){
println(i)
}
for (i in 6 downTo 0 step 2) {
println(i)
}
for (i in 1..5 step 3){
println(i)
}
val numberList = listOf(100,200,300)
for (number in numberList){
println(number)
}
순서대로 출력값은 1 2 3 4 5 // 6 4 2 0 // 1 4 // 100 200 300 이다
1..5 은 1~5 의 range를 뜻한다.
downTo - 위에서부터 아래로
step - 2의 간격으로
코틀린도 index 0번째다.
untill - 0~untill 10 이라고 하면 0부터 10전까지
var max:Int
if (a>b){
max =a
}else{
max = b
}
val max = if(a>b){
print("choose a ")
a
}else{
print("choose b")
b
}
밑의 if문은 표현식으로 표현한 것이다.
switch 문 대신 when 문이 있다.
when(x){
1 -> print("x ==1")
2 -> print("x ==2")
else->{
print("1,2,가 아닙니다")
}
}
when (X){
0,1-> print("x는 0이나 1")
else-> print("다른것들")
}
when (x){
in 1..10-> print("x는 1부터 10 범위안에 있음")
!in 10..20 -> print("x는 10부터 20범위안에 없음")
}
when (x){
is Int -> print("x는 int형이다"
}
이런식으로 사용가능
코틀린에서는 null safe 한 코드를 쉽게 작성할수있다.
val b:Int? = 100
b?.sum() -> b가 null인경우에 실행하지 않는다.
val c: Int = 100
c.sum() -> 애초에 nullsafe함
코드를 좀더 읽고싶게 해주는 것 ex) let run with apply also
객체를 초기화할때 사용함 코틀린에서는 this생략가능
val person = Person().apply{
firstName = "abd"
lastName ="etf"
}
코틀린에서는 이런식으로 쓰인다
Person person = new Person();
person.firstName = "abd";
person.lastName = "etf;
객체가 파라미터를 통해서 전달 람다의 입력값으로 전달 it으로 전달
Random.nextInt(100).also{
print("getRandomInt() 생성됨 $it")
}
value를 생략하고 출력가능
디버깅하는 용도로드 쓰임
val number: Int?
val sumNubmerStr = number?.let {
"${sum(10,it)}"
}
null이 아닌객체에서 람다를 실행할때 사용
code block의 실행결과가 반환된다.
위와같이 number가 null이 아닐때만 let뒤의 문장이 실행이된다!
val person = Person()
with(person){
work()
sleep()
println(age)
}
person안의 객체 함수나 변수를 with으로 사용할수있다.(한번에)
val result = service.run {
prot = 8080
query()
}
run함수는 어떤값을 계싼하거나 객체구성과 결과계산이 한번에있을때 유용하게 쓰인다.
5가지의 scope 함수들 실제로 써봐야지 감이잘올거같다!
data class Object(val s:String) 와 같이 선언
코틀린에서는 getter 와 setter보다 객체에 직접 접근해서 쓴다.
코틀린이 함수형 언어에 가까운 특징을 가지고있기때문에
함수에 함수를 전달하고 전달된 함수에서 함수를 실행시킬수있다.
ex) button.setOnClickListener { } 와같이 쉽게 구현가능
nullsafe 한 코드를 사용하기 위해서 non-null Type으로 변수를 선언한다. 하지만 초기값이 없는 변수를 선언할때 lateinit을 사용한다.
lateinit var lateinitNumber: Int -전역변수로 선언
나중에 초기화를 안해주면 실행이되지 않는다.
lazy init은 나중에 사용이될때 선언해줄때 쓰인다.
val lazyNumber : Int by lazy{
100
}
사용하기 전까지 lazyNumber 변수에 100이 할당되지 않음
View를 나중에 할당할때 많이쓰인다.
이 외에도 여러가지가 있다! 예전에도 따로 코틀린 기본적인 것들을 공부했었는데 요즘 개발하면서 너무 주먹구구식으로 개발하는거같아서 패스트캠퍼스에서 kotlin강의를 구매해서 보기로했다...
돈주고 강의듣기 진짜 싫었는데..
꾸준히해보자