목록공부/Kotlin (17)
변명은 만개 결과는 한개
Lambdas 코틀린에서는 기본적으로 람다를 제공하고있음. button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { view.setAlpha(0.5f); } }); 위와같은 java 코드가 setOnClickListener 의 구현해야하는 메소드가 한가지(onClick()) 뿐이기에 아래와 같이 3줄로 줄어들 수 있음 button.setOnClickListener { view -> view.alpha = 0.5f } 또 한번 더, onClick() 메소드가 싱글 파라미터(한가지의 파라미터만을 가지는 메소드) 이기에 it 키워드를 사용하여 아래와 같이 생략 가능함 button.setOnCl..
Control Flow if, else java 와 비슷하다 // 활용1 fun test() { val a = 10 val b = 20 val max = if (a > b) a else b } // 활용2 fun test() { val a = 10 val b = 20 val max: Int val min: Int if (a > b) { max = a min = b } else { max = b min = a } } when 코틀린에는 switch 문이 존재하지 않기에 아래와 같이 when 사용 val a = 10 when (a) { 1, 10 -> // ... else -> // ... } 맨 마지막 else 는 반드시 붙어야 함 in, !in 또한, in 및!in 키워드로 포함, 포함되지 않은 경우 또..
Function Defining functions 리턴값이 없는 경우 fun 함수명(변수): Unit { // Unit 생략 가능 값 처리 } 리턴값이 있는 경우 fun 함수명(변수): 리턴타입 { return 값 } 아래와 같이 한줄로 되어있는 단순한 함수라면 return 의 생략이 가능하며, 유추하기를 통해 리턴타입 또한 생략 할 수 있음 fun getSum(a: Int, b: Int): Int { return a + b } // return 생략 fun getSum(a: Int, b: Int): Int = a + b // 유추하기를 통한 생략 fun getSum(a: Int, b: Int) = a + b Extension Functions 함수를 확장하여 기존에 있던 것처럼 사용할 수 있음. 단, ..
Class 생성자 class 클래스이름 constructor(변수){ } 또한 아래와 같이 다중 생성자를 가질 수 있음 class Sample constructor(val name: String, val arg: Int) { constructor(name: String) : this(name, 0) } class 를 정의함과 동시에 오는 생성자를 primary constructor 라 부르고, 그 이외의 생성자들을 secondary constructor 라 부른다. primary constructor 아래와 같이 constructor 생략 가능하다 class Sample (val name: String, val age: Int) { ... } 자바 생성자와 다르게 변수에 대한 타입을 바로 가질 수 있으며..
비교 메모리의 비교에는 === 사용 val a: Int = 10_000 print(a === a) // 'true' val b: Int? = a val c: Int? = a print(b === c) // 'false' 값의 비교에는 == 사용 val a: Int = 10_000 print(a == a) // 'true' val b: Int? = a val c: Int? = a print(b == c) // 'true' var / val var (mutable) read / write 모두 가능 val (immutable) java 의 final. read 가능하나 write 불가능함 null 자료형 뒤의 ? Nullable! 심지어 safecall 하지 않으면 .length 호출도 안됨 자료형 뒤에 ?..
Kotlin 에서 findViewById 시 // 1 val navView1 = findViewById(R.id.nav_view) as BottomNavigationView // 2 val navView2 = findViewById(R.id.nav_view) // 3 val navView3: BottomNavigationView = findViewById(R.id.nav_view) 위와 같이 세가지 모두 사용 가능함. 단, 첫번째 방법으로 findViewById 시도 시 두번째 방법을 추천함. 사실, apply plugin: 'kotlin-android-extensions' 를 사용하면 findViewById 할 필요도 없음. message.text = "set text" 처럼.
Kotlin 코드와 Decomplie된 Java 코드 Tools > Kotlin > Show Kotlin Bytecode -> Decompile 버튼 클릭시 Kotlin 코드와 그 코드를 Java로 Decompile한 코드를 확인가능 fun main() { println("HelloKotlin!") } import kotlin.Metadata; @Metadata( mv = {1, 1, 18}, bv = {1, 0, 3}, k = 2, d1 = {"\u0000\b\n\u0000\n\u0002\u0010\u0002\n\u0000\u001a\u0006\u0010\u0000\u001a\u00020\u0001¨\u0006\u0002"}, d2 = {"main", "", "HelloKotlin"} ) public ..