분류 전체보기(229)
-
[kotlin] inline , noinline, crossline function
inline , noinline, crossline function inline 함수의 인자로 고차함수를 사용한 함수를 전달할 때 inline 을 사용하고, 익명 클래스의 생성 비용을 줄인다 람다를 사용하면 각 함수는 객체로 변환되어 메모리 할당, 가상 호출 단계를 거치는데 이 비용을 줄일 수 있다. Calculator 함수로 예를 들어보겠습니당 fun main() { val f2: Function2 = { a, b -> a + b } println(calculator(4, 5, f2)) } fun calculator(a: Int, b: Int, op: Function2): Int { return op.invoke(a, b) } //출력 9 이 calculator함수를 쭈욱 호출하게 되면 람다식 마다 각..
2021.06.18 -
[kotlin] class, object, companion object
class, object, companion object class 자바의 클래스와같다 object 싱글턴을 간단하게 구현할 수 있게 해준다 object 키워드는 클래스를 정의하면서 객체를 생성합니다. fun main() { val singletonClass = Singleton println(singletonClass.st) println(singletonClass.function()) } object Singleton{ val st = "하하" fun function() = "싱글턴메소드" } //하하 //싱글턴메소드 companion object static 처럼 동작하게 만들어준다 static 과의 차이점은 companion object는 객체이고 변수에 할당할 수 있다(자바는 불가능) compa..
2021.06.17 -
[kotlin] 함수 리터럴 (with receiver)
리시버가 있는 함수 리터럴 fun main() { println(100.lambdaSum(1)) println(100.functionSum(1)) } //lambda(function literal) with receiver val lambdaSum : Int.(Int) -> Int = { other -> plus(other) } //function(function literal) type with receiver val functionSum = fun Int.(it:Int) : Int = this + it //101 //101 위 코드는 리시버를 가지는 함수 타입입니다. 첫번째 함수는 lambdaSum의 타입은 Int.(Int) -> Int 로 사용할 수 있는 함수타입이며, other 를 인자로 받아서 ..
2021.06.17 -
[kotlin] 지연계산과 Lazy 클래스 분석
지연계산이란? 코틀린 언어는 즉시계산언어이다 이에따라 val x : Int = getValue() fun gatValue(): Int { println("Return") return 5 } 위 코드를 실행하면 x를 사용하지 않아도 print문이 실행된다.. 지연계산을 통해 val x : Int by lazy { println("할당") 5 } println(x) // 할당 // 5 위 코드를 실행하면 모든 println(x) 코드를 지우고 실행하면 참조하고 있는 값이 없기때문에 아무 로그도 찍히지 않는다
2021.06.17 -
[Kotlin] 람다 총정리
kotlin Lambda FloatingActionButton fab = findViewById(R.id.fab); fab.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { // Something } }); /** * Interface definition for a callback to be invoked when a view is clicked. */ public interface OnClickListener { /** * Called when a view has been clicked. * * @param v The view that was clicked. */ void onClick(View ..
2021.06.15 -
RecyclerView Item 드래그 앤 드랍(Drag and Drop) 순서 변경
RecyclerView Item 드래그 앤 드랍(Drag and Drop) 순서 변경 예전 listview를 사용했을때.. itemTouchHelper가 없을 시절에는 커스텀 리스트뷰를 만들어 일일히 구현을 했었다 onInterceptTouchEvent, onTouchEvent 에 터치 이벤트를 가로채고.. 터치된 이벤트에 y 좌표를 계산하고 ACTION_DOWN에서 놓은 좌표의 y값을 계산해서 아이템의 순서를 리턴했었다 하지만 이 복잡한 과정들을 RecyclerView 와 ItemTouchHelper가 매우 쉽게 만들어 주었는데 코드를 하나하나 짚어보면서 확인해보자 ItemTouchHelper.CallBack() 먼저 ItemTouchHelper의 콜백 함수를 Implement 하여 움직임이 있을때, ..
2021.06.09