코틀린 & Java/코틀린인액션 18

Kotlin 범위 관례 인덱스로 원소 접근 Get, Set

범위 관례 인덱스로 원소 접근 Get, Set 콜렉션에서 가장 많이 쓰이는 연산은 인덱스를 이용해 읽고 쓰는 연산 자바에서 배열 원소에 접근할때 [ ] 를 사용하는 것처럼 코틀린의 맵에서도 이를 사용한다. callbackParamMap["success"] = true /** * Allows to use the index operator for storing values in a mutable map. */ @kotlin.internal.InlineOnly public inline operator fun MutableMap.set(key: K, value: V): Unit { put(key, value) } class ExampleUnitTest { @Test fun test() { val list = m..

Kotlin == 비교연산자 오버로딩

비교연산자 오버로딩 equals, compareTo 대신 Kotlin 에서는 == 비교 연산자를 사용할 수 있음 equals == 연산자는 equals 메서드 호출로 컴파일된다. a==b → a?.equals(b) ?: (b==null) val USE_KAKAO_ACCOUNT_LOGIN = env.name == "DEV" // Decompiled static { USE_KAKAO_ACCOUNT_LOGIN = Intrinsics.areEqual(env.name(), "DEV"); } // ---------------------------------- val USE_KAKAO_ACCOUNT_LOGIN = env.name === "DEV" // Decompiled 하면? env.name == "DEV" htt..

Kotlin Plus 산술연산자 오버로딩

연산자 오버로딩 & 기타 관례 코틀린이 지원하는 여러 관례(컨벤션)와 관례의 사용법 코틀린은 자바클래스를 사용하고 있음. 따라서 자바가 특정 인터페이스를 구현하게 할수는 없음 따라서 확장함수를 통해 기존클래스에 새로운 메서드를 추가한다. 이를 통해 기존 자바코드를 바꾸지 않고도 새로운 기능을 부여할수 있다. StringsJVM.kt (kotlin-stdlib) /** * Returns `true` if this string is equal to[other], optionally ignoring character case. * * Two strings are considered to be equal if they have the same length and the same character at the s..

코틀린 원시타입(Kotlin Primitive Type)

코틀린 원시타입원시 타입(Primitive type) : 값이 들어감참조 타입(Reference type) : 객체 위치 값정수의 Collection을 정의하고 싶다자바 : Collection // 원시 타입 값을 감쌀 래퍼 타입을 사용해서 참조 타입을 만듬코틀린 Collection // 원시 타입과 래퍼 타입 구분 없음원시 타입과 참조 타입이 같다면 코틀린은 항상 객체로 표현하나? 놉 효율적인 방식으로 표현됨. 코틀린 Int → 자바 int로 컴파일 자바 원시 타입은 null이 안됨. 따라서 코틀린 int? 경우 자바 Integer로 됨. int aa = null x Integer aa = null o 제네릭 클래스에서 사용하는 경우에는 자바 Integer로 됨. JVM은 제네릭의 타입 인자로 원시 타..

코틀린 타입 종류 Null가능성

타입 시스템코틀린의 타입 시스템은 코드의 가독성을 향상시키는데 도움이되는 몇가지 특성을 새로 제공널 가능성 (nullability)NullPointerException오류를 피할 수 있게 돕기 위한 코틀린 타입 시스템의 특성null에 대한 접근 방법을 실행시점 → 컴파일 시점널이 될 수 있는 타입 (nullable type)타입 시스템이 널이 될수 있는 타입을 명시적으로 지원타입 이름 뒤에 물음표(?)를 명시fun strLenSafe(s: String?) = ... null과 비교하고 나면 컴파일러는 그 사실을 기억하고, 해당 값을 널이 될 수 없는 타입의 값처럼 사용할 수 있다.fun strLenSafe(s: String?) : Int = if(s != null) s.length else 0 자바에서 ..

[Kotlin] 스코프 펑션(Scoepe Function)

스코프 펑션(Scoepe Function) 선택기준스콥펑션은 크게 두가지 기준으로 나눈다.Context Object를 참조하는 방법 (this, it)Return valuelet객체 결과값에 하나 이상의 함수를 호출하는 경우 사용긴 변수명 대신 it 으로 받을수 있다는 장점이 있음. 다만 이경우 run 이 더 좋을수 있음nullable 한 객체에 대해서 unpack 할수 있어 safety call 을 할수 있음runlet과 유사하나 this 로 받는다는 점이 다르다.this 로 받기때문에 context object 를 생략가능해서 간결해진다.let 과 마찬가지로 nullable 객체에 대한 safety call 할수 있다.withrun 처럼 this 로 받는다.run 처럼 safety call 할수 없어..

[Kotlin] 람다에 대해 알아보자(2)

5-3 지연 계산(lazy) 컬렉션 연산map,filter와 같은 컬렉션은 결과 컬렉션을 즉시(eagerly) 생성 시퀀스(sequence)를 사용하면 중간 임시 컬렉션을 사용하지않고도 컬렉션 연산을 연쇄WHAT?????/** * Returns a list containing only elements matching the given [predicate]. * * @sample samples.collections.Collections.Filtering.filter */ public inline fun Iterable.filter(predicate: (T) -> Boolean): List { return filterTo(ArrayList(), predicate) } /** * Returns a list c..

[Kotlin] 람다에 대해 알아보자

람다 (Λ λ)11번째 그리스 알파벳 으로 대문자는 Λ, 소문자는 λ이다. 람다라고 읽으며 영어로는 lambda라고 적는다.프로그래밍 언어 에서 사용되는 개념으로, 익명 함수 Anonymous functions 를 지칭하는 용어이다.고차 함수함수를 인자로 받거나 결과로 반환하는 함수를 고차함수(高次函數)라 한다.람다식은 주로 고차 함수에 인자(argument)로 전달되거나 고차 함수가 돌려주는 결과값으로 쓰인다장점코드의 간결성 : 불필요한 루프문의 삭제가 가능하며, 동일한 함수를 재활용할 수 있는 여지가 커진다.인터페이스 없이 콜백구조를 간단하게 구현할 수 있다.지연 연산을 지원하는 방식 을 통하여 효율적인 퍼포먼스를 기대 → 5.3절5.1.1) 람다 소개// Java btn.setOnClickListe..