[Kotlin] Scope function (let, run, with, apply, also) 정리

코틀린 표준 라이브러리는 객체 컨텍스트 내에서 코드 블럭을 실행하는 것이 유일한 목적인 함수들을 포함하고 있다. 이 함수들을 람다식을 이용해서 호출하면 일시적인 범위(scope)가 생성되는데, 이 범위 내에서는 이름이 없어도 객체에 접근할 수 있다. 이 함수들을 Scope Function(범위 지정 함수)이라 부르며, let, run, with, apply, also 5가지가 존재한다.

Function selection

자세히 보기

RecyclerView: Cannot call this method in a scroll callback.

Pagination 구현을 위해 리사이클러뷰에 OnScrollListener를 추가하여 마지막 아이템에 도달하면 프로그래스바가 포함된 아이템을 제거 후, notifyItemRemoved(position) 메서드를 통해 Adapter에 데이터의 변경을 알리는 코드를 작성하였다.

따로 에러가 발생하지는 않았지만 로그창에 스크롤 콜백에서 해당 메서드를 호출할 수 없다는 아래와 같은 메시지가 표시되었다.

자세히 보기

[Kotlin] 최상위 함수와 프로퍼티

최상위 함수

객체 지향 언어인 자바에서는 모든 코드를 클래스의 메소드로 작성해야 한다. 하지만 실제 코드를 작성하면 어느 한 클래스에 포함시키기 어려운 코드가 많이 생긴다. 중요한 객체는 하나뿐이지만 그 연산을 객체의 인스턴스 API에 추가해서 API를 너무 크게 만들고 싶지 않은 경우가 있다.

자세히 보기

[Java] fail-fast vs weakly consistent iterator

자바 컬렉션 프레임워크에서 Map 인터페이스와 관련된 내용을 찾다보면 fail-fast와 fail-safe iterator에 대한 내용이 자주 보인다.

이 주제는 Concurrency(동시성)과 관련이 있는데, Map의 대표적인 구현 클래스인 HashMap의 요소를 for-each문 내부에서 변경할 경우 ConcurrentModificationException을 던지는 것을 한번쯤은 경험해봤을 것이다. 이 예외를 처음 경험한게 코딩테스트 도중이었기에 적잖이 당황했던 기억이 있기에 이번 기회에 정리하고자 한다.

자세히 보기