[Java] fail-fast vs weakly consistent iterator

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

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

자세히 보기

[디자인 패턴] 추상 팩토리 패턴(Abstract Factory Pattern)

추상 팩토리 패턴은 매우 복잡하고 기괴한 패턴으로 오해 받지만 실제로는 매우 간단합니다. 팩토리 메서드 패턴을 이해했다면 금세 이해하게 될 것인데, 추상 팩토리는 팩토리들의 팩토리이기 때문입니다. 팩토리가 다른 클래스를 생성할 수 있는 함수 또는 클래스이고, 추상 팩토리는 팩토리를 생성하는 클래스입니다.

위의 설명을 이해하였더라도 여전히 추상 팩토리 패턴의 사용법이 무엇인지 궁금해 할 것입니다. 실제로 추상 팩토리의 주요 용도는 프레임워크, 특히 스프링 프레임워크가 될 것입니다. 이 프레임워크는 추상 팩토리 개념을 사용하여 어노테이션과 XML 파일에서 컴포넌트를 생성합니다. 그러나 프레임워크를 직접 만드는 것은 꽤 지루할 수 있으므로 이 패턴이 매우 유용한 또 다른 예시인 전략 게임을 살펴보겠습니다.

자세히 보기

Meaning of 'emit' in Android Jetpack Compose

Android Jetpack Compose의 공식 문서에서는 emit이라는 단어가 빈번히 등장합니다. emit은 _방출하다, 내보내다_라는 의미를 지니고 있는데 컴포저블에서 내보낸 UI를 누가 처리하는지, 애초에 내보낸다는 표현을 왜 쓰게 되었는지에 대해 명확한 설명이 없어 궁금증을 자아냅니다.

그래서 stackoverflow에 What is the exact meaning of ‘emit’ in Android Jetpack Compose?라는 질문을 올렸고 Composables.kt 내부의 소스 코드에 그에 대한 답이 있다는 것을 알게 되었습니다.

자세히 보기