목록전체 글 (97)
변명은 만개 결과는 한개
null 처리방법 Null 처리 자바 (기본적으로)null을 허용한다 Annotation 으로 @NonNull, @Nullable 지정 가능 public void set(@NonNull String a, @Nullable String b) { // ... } Annotation을 사용할 수 있으나 아래 코드 또한 사용 가능 set(null, null); 코틀린 (기본적으로)null을 허용하지 않음 null을 명시적으로 나타내기 위해서 ?을 추가해야한다 자바와 달리 IDE 에서 null을 사용할 수 없음을 즉시 알려줌 fun set(a: String, b: String?) { // ... } null을 허용하지 않은 변수인 a 에 null을 대입하면 IDE 단에서 즉시 오류가 발생함. 아래와 같은 코드 사..
Return, Jumps, This Expression Jump Expression return 반환할 때 break 빠져나갈때 continue 특정 조건에 대해서만 처리하지 않을 때. 이러한 jump expression을 label 과 함께 사용했을때 어떻게 달라지는지 확인 Label 정의 정의할 때 : name@ 사용할 때 : @name Break and Continue Labels loop@ for (i in 1..100) { for (j in 1..100) { if (j > 10) break@loop print(j) } println() } println("end") output: 12345678910end Return at Labels vak ints = mutableListOf(1, 2, 0,..
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" 처럼.