코틀린 & Java 44

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..

[Kotlin] Open Class란?

Open Class란? -java에서는 상속의 재 정의를 방지하기 위해 final을 사용합니다. -kotlin에서는 반대로 상속의 재 정의를 허용하기 위해서 open을 사용합니다. open클래스의 open함수가 있다면, 이는 상속을 받아 재 정의가 가능한 형태가 제공됩니다. //v()는 재 정의가 가능하고, nv()는 재 정의가 불가능한 형태. open class Base{ open fun v(){ print("ABC") } fun nv(){} }

코틀린 & Java 2022.10.25

[Kotlin] Object Class란?

Object Class란? 코틀린에는 static keyword가 없기 때문에 java의 static 개념을 코틀린에서 어떻게 표현해야 하는지 살펴보겠습니다. -싱글턴을 정의하는 방법 -동반객체 companion object를 이용한 팩토리 메서드 구현 -무명클래스(익명 클래스)의 선언 위 세가지를 object란 keyword를 이용해서 표현. 싱글턴(Singleton) 코틀린에서는 object를 이용하여 클래스를 정의함과 동시에 객체를 생성할 수 있습니다. object Payroll{ val allEmployes = arrayListOf() fun calculateSalary(){ } } object로 선언하면 클래스 선언과 동시에 객체가 생성됩니다. Payroll.allEmployes.add(Pers..

코틀린 & Java 2022.10.25