[코틀린] kotlin basic
:rocket:Kotlin
-
Null을 최소화하기 위한 방법들이 적용되있다.
-> 기본적으로 null 초기화를 허용하지 않는다.
-> lateinit var 등이 있지만 최대한 피하는게 좋다. var는 모델을 제외하고선 회피한다.
Kotlin을 사용하는 이유
에러를 줄이기 위함.
자바는 구조적으로 에러가 많이 낳 수밖에 없기 때문.
조금 더 빠르게 개발.
안드로이드의 새로운 기능이 나오면 자바로는 복잡한 방법이 사용될 수 밖에 없다. 코틀린은 코틀린확장함수(KTX)로 쉽게 제공 가능하다.
variable & constant syntax :
var a = "variable
val b = "constant"
val c : Int = 3
// {line:3}처럼 타입을 선언해줄수 있지만, Kotlin은 타입 자동추론시스템이 적용되어있으므로 선호되지 않는 방식.
// 변수(var)에 의한 에러 가능성을 낮추기 위해 변수를 최소화 한다. 상수(val)를 주로 사용하자.
Data type
val str1 :String? = null //가능
val str2 :String = null //불가능
//kotlin에선 error를 피하기 위해 기본적으로 변수에 null이 들어갈 수 없다.
//Type 뒤에 ?가 붙은 타입만이 null이 가능한 타입. 이를 사용하기 위해선 null check가 필요.
Method syntax :
fun work(){}
fun work() = print()
fun work(a : Int, b : Int) : Int = a + b
fun work() : Unit = print()
//{line :1,2}처럼 return 타입을 생략할 수 있다. 선호되는 방식.
//수식처럼 표현도 가능해진다.
// Java의 void는 Unit으로 표현된다.
String calculation :
val name = "tyranno"
val title = "choco"
val str = "${title+name} is my name"
//문자열 결합에 +연산자를 사용하지 않고 ${}를 통해 내부 연산 가능.
### Array & List syntax :
val items1 = arrayOf(1,2,3)
val items2 = arrayListOf(1,2,3)
val items3 = listOf(1,2,3)
//listOf로 만들어진 List는 불변객체로, 원소 변경이 불가능하다.
//arrayListOf로 만들어진 itmes2는 기존 Java의 <code>items2.set(0,0)</code>가 가능하고, items2[0] = 0 으로도 가능하다.
If syntax :
val str = if(x%2==0) "zero" else "left"
//기본적으로 java의 if문과 사용법이 같다. Kotlin에선위처럼 if식?처럼 사용할 수도 있다.
for syntax :
for(i in 0..9){println(i)}
val numbers = listOf{1,2,3}
for(i in numbers){println(i)}
when syntax(alternative to java switch syntax) :
when(x){
1-> print("1입니다")
2-> print("2입니다")
3, 4, 5 -> print("3,4,5중 하나입니다")
in 6..20->print("6부터 20사이의 값입니다")
!in 8..10 ->
else ->
}
//when syntax도 식이기 때문에 값을 리턴한다면 대입이 가능(e.g. val result = when(){}).
Class
class Person(var name:String){
}
//class 정의할때 기본적으로 생성자를 넣어줄수있다.
//public과 같은 접근제한자를 쓸필요 X. 디폴트가 public.
//생성시 new 키워드 안씀.
//java에서 field라고 부르는 것들을 kotlin에선 property라고 부름
//init{}이라는 코드가 존재. 생성자가 호출된 이후에 실행되는 코드 블록.
//함수도 public이 기본이고 명시하지 않는다. private으로 사용할 경우에만 명시한다.
//java에서의 @Override 어노테이션이 kotlin에선 override 키워드로 사용됨.
person.name = "김길동"
//직접 접근하는 것처럼 생겼지만 내부적으로는 getName을 호출한다.
data class
data class Person(val name:String, var age :Int)
//data class는 toString/getter & setter/equals & hashCode를 재정의 한 것으로 본다.
Inheritance , Interface
class MainActivity : AppCompatActivity(), View.OnClickListener{}
//상속받는 클래스의 어떤 생성자가 호출되는지까지 표기되어있다.
//한편, 인터페이스는()를 안붙인다.
확장함수
fun String.myLength() : Int {return this.length}
//Kotlin에선 String이라는 final 클래스에도 상속없이 함수를 추가할 수 있다.
자바와 코틀린의 혼용
상호 호환이 가능. 단, 몇가지 주의점이 있다.
Casting
val textView : TextView = view as TextView
//Use <as> expression.