지연 초기화는 신중히 사용하라 지연 초기화란 사용할 필드 및 인스턴스의 초기화 시점을 실제로 그 값이 필요로 할때까지 늦추는 기법입니다. 지연 초기화를 사용하면 값이 쓰이지 않는 시점에 굳이 초기화하지 않아도 되며, 클래스와 인스턴스 초기화 때 발생하는 순환참조 문제도 해결할 수 있습니다. 클래스 혹은 인스턴스 생성시의 초기화 비용은 줄어들 수 잇겠지만, 지연 초기화는 필드에 접근하는 비용은 비싸집니다. 지연 초기화하려는 필드들 중 초기화가 이루어지는 비욜, 실제 초기화에 드는 비용 등에 따라 초기화된 각 필드를 얼마나 빈번히 호출하느냐에 따라 지연 초기화는 오히려 성능을 느리게 만들 수 있습니다. 💡 언제 지연 초기화가 필요할까? 필드를 사용하는 빈도가 낮으며, 필드 초기화하는 비용이 비싼 경우입니다...
스레드 안전성 수준을 문서화하라 한 메서드를 여러 스레드가 동시에 호출하는 경우 그 메서드가 어떻게 동작하냐는 해당 클래스와 이를 사용하는 클라이언트 사이의 계약과 같습니다. 문서화를 제대로 해놓지 않는다면 클라이언트는 추측을 하여 사용할테고 이 추측이 틀린경우 문제가 발생할 수 있습니다. 그렇기 때문에 스레드 안전성을 문서화할 필요성이 있습니다. 💡 스레드 안전성 수준 멀티 스레드 환경에서는 API를 안전하게 사용하기 위해서는 클래스가 지원하는 스레드 안전성 수준을 명확히 명시해야 합니다. 📜 불변(Immutable) 이 클래스의 인스턴스는 마치 상수와 같아서 외부 동기화가 필요 없습니다. Ex) String, Long, BigInteger 📜 무조건적 스레드 안전(unconditionally thre..
wait와 notify보다는 동시성 유틸리티를 애용하라 자바 5에서 도입된 고수준의 동시성 유틸리티가 이전의 wait, notify로 하던 일들을 대신하게 되었습니다. wait와 notify는 사용하기 상당히 까다롭기 때문에 고수준의 동시성 유틸리티를 사용하는게 좋습니다. java.util.concurrent 패키지에는 고수준 유틸리티를 세 범주로 나눌 수 있습니다. 실행자 프레임워크, 동시성 컬렉션, 동기화 장치로 구분할 수 있습니다. 💡 동시성 컬렉션 동시성 컬렉션은 List, Queue, Map과 같은 표준 컬렉션 인터페이스에 동시성을 가미해 구현한 고성능 컬렉션입니다. 높은 동시성을 달성하기 위해 동기화를 각자의 내부에서 수행하며, 동시성 컬렉션에서 동시성을 무력화하는건 불가능하며, 외부에서 락을..
과도한 동기화는 피하라 과도한 동기화는 성능을 떨어뜨리고, 교착상태에 빠질 수 있으며 예측할 수 없는 동작을 유발할 수 있습니다. 💡 응답불가와 안전실패를 피하려면 동기화 메서드나 블럭안에서는 제어권을 클라이언트에게 양도하면 안됩니다. 동기화된 영역안에서는 재정의할 수 있는 메서드를 호출해서는 안됩니다. 클라이언트가 넘겨준 함수(람다)를 호출해서는 안됩니다. 💡 예제 코드 @FunctionalInterface public interface SetObserver { void added(ObservableSet set, E element); } public class ForwardingSet implements Set { private final Set s; public ForwardingSet(Set s..
- Total
- Today
- Yesterday
- spring boot poi excel download
- 레이어드 아키텍처란
- 자바 백엔드 개발자 추천 도서
- 공간 기반 아키텍처
- microkernel architecture
- java userThread와 DaemonThread
- spring boot redisson sorted set
- java ThreadLocal
- spring boot excel download paging
- polling publisher spring boot
- spring boot redisson 분산락 구현
- spring boot 엑셀 다운로드
- JDK Dynamic Proxy와 CGLIB의 차이
- space based architecture
- redis 대기열 구현
- 트랜잭셔널 아웃박스 패턴 스프링부트
- redis sorted set으로 대기열 구현
- spring boot redis 대기열 구현
- service based architecture
- 서비스 기반 아키텍처
- @ControllerAdvice
- transactional outbox pattern spring boot
- transactional outbox pattern
- spring boot redisson destributed lock
- 람다 표현식
- 트랜잭셔널 아웃박스 패턴 스프링 부트 예제
- spring boot excel download oom
- redis sorted set
- pipeline architecture
- pipe and filter architecture
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |