들어가며먼저 자바에서 동시성 문제를 해결하기 위한 방법에는 블로킹 방식과 논블로킹 방식 두가지가 존재합니다. 이 글에서는 블로킹 방식의 Syncronized 키워드와 논블로킹 방식의 Atomic 키워드의 성능을 직접 코드를 작성해서 성능의 차이를 확인해 보려 합니다. 이론으로만 Atomic 키워드를 사용하다는 것이 빠르다는 것을 알고 있었기 때문에, 이번 기회를 통해 직접 성능 테스트를 해보며 두 키워드의 성능 차이를 살펴보겠습니다. Syncronized먼저 Syncronized를 썼을때 얼마나 걸리는지 알아 보겠습니다.class CountTest { private static int count = 0; private static AtomicInteger atomicCount = new At..
들어가며 자바 프로그래밍 언어에서 매우 중요하고 널리 사용되는 자료구조 중 하나인 ArrayList의 내부 동작 원리를 깊이 있게 이해하고자, 이 글에서는 ArrayList의 코드를 면밀히 분석하고자 합니다. 우리는 일반적으로 배열의 사용법에 익숙하며, 이로 인해 ArrayList의 복잡한 내부 동작 메커니즘에 대해 깊이 있게 생각해볼 기회가 적었습니다. 이번 기회를 통해 ArrayList가 어떻게 데이터를 저장하고, 접근하며, 관리하는지에 대해 자세히 살펴보며 ArrayList의 효율적인 사용법과 자바 컬렉션 프레임워크의 깊은 이해를 도모할 수 있기를 기대합니다. ArrayList가 구현한 인터페이스 public class ArrayList extends AbstractList implements Li..
불변객체란불변 객체란, 생성된 후 그 상태를 변경할 수 없는 객체를 의미합니다. 이러한 불변 객체의 대표적인 예로 자바에서는 String과 Integer 등이 있습니다. 참조 변수는 Thread-Safe하지 않다불변 객체는 그 상태가 변하지 않기 때문에 여러 스레드에서 동시에 해당 객체를 참조하더라도 동시성 문제가 발생하지 않을 것처럼 보입니다. 하지만 실제로는 참조하는 변수의 동시성 문제로 인해 예상치 못한 동작을 할 수 있습니다. 예시로 불변객체인 Integer 값을 증가시키려는 시도를 했을때, race condition이 발생하는 것을 알 수 있습니다.public class CountingTest { public static void main(String[] args) { Cou..