본문 바로가기

java3

싱글톤과 플라이웨이트 패턴 플라이웨이트 패턴과 싱글톤 패턴은 모두 객체 생성을 최적화하는 구조적 디자인 패턴입니다. 그러나 두 패턴의 목적과 구현 방법, 사용 시점 등에 차이가 있습니다. 목적 플라이웨이트 패턴: 여러 개의 객체를 공유하여 메모리 사용을 최소화하고 성능을 개선하는 것이 목적입니다. 객체의 내부 상태는 불변(immutable)적이어야 하며, 내부 상태가 동일한 객체는 공유됩니다. 싱글톤 패턴: 전체 시스템에서 단 하나의 객체만 생성하여 사용하는 것이 목적입니다. 모든 클라이언트는 동일한 객체 인스턴스에 접근합니다. 구현 방법 싱글톤 패턴: 객체를 생성하는 생성자를 private으로 선언하여 외부에서 직접 객체를 생성할 수 없도록 합니다. 객체를 생성하는 정적 메서드를 제공하고, 이 메서드에서 객체가 이미 생성되어 있.. 2023. 3. 13.
CPU L1, L2 캐시와 자바 volatile 캐시는 프로세서 내부에 있는 빠른 메모리로, 일반적으로 L1 캐시와 L2 캐시가 있습니다. L1 캐시는 프로세서 코어에 직접 연결되어 있으며, L2 캐시는 코어들 사이를 공유하는 공유 버스에 연결되어 있습니다. 캐시는 메모리보다 훨씬 빠르지만 용량은 작습니다. 반면에, 메모리(RAM)는 CPU보다 느리지만 용량이 크기 때문에, 프로그램에서 사용하는 데이터를 모두 캐시에 저장할 수 없습니다. 때문에, 프로그램이 변수를 읽거나 쓸 때, 해당 변수의 값을 캐시에서 읽어오거나 캐시에 저장할 수도 있습니다. 자바에서 volatile 키워드는 이러한 캐시와 메모리의 동기화를 보장하는 역할을 합니다. volatile 키워드가 붙은 변수는, 쓰기가 발생하면 해당 변수의 값을 바로 메모리에 써넣습니다. 또한, 다른 코어.. 2023. 2. 18.
deep copy, shallow copy, String, Heap, Stack, Immutable, mutable 깊은 복사와 얕은 복사를 공부하려면 immutable과 mutable에 대해 정확히 알고 있어야 한다. mutable : 변할 수 있는 immutable : 변할 수 없는 1. 얕은 복사는 스택 메모리의 주소값을 복사 시킨다. mutable 객체일 경우 실제 데이터는 Heap영역에 저장된다. 그래서 스택영역의 메모리를 복사하는 얕은 복사일 경우에는 원본 데이터가 바뀌기 때문에 주의가 필요하다. 2. 깊은 복사는 힙 메모리의 데이터 까지 복사하기 때문에 Collection 프레임워크에 해당하는 구현체를 복사할 경우에 사용하면 좋다. mutable 객체는 배열, 리스트, 딕셔너리 ( 맵 ), 객체 등 다양한 종류가 있고, 스택에 힙 메모리의 주소가 저장되며 힙 메모리에 실제 데이터가 저장된다. immutab.. 2023. 2. 10.