Serialization을 구현할지는 신중히 결정하라 어떤 객체를 직렬화하기 위해서는 클래스 선언부에 implements Serializble만 덧붙이면 됩니다. 너무 쉽게 적용할 수 있지만 사실 큰 책임이 따릅니다. 💡 Serializable을 구현하면 릴리스한 뒤에는 수정하기 어렵습니다. 직렬화를 하게되면 직렬화된 바이트 스트림 형태도 하나의 공개 API가 됩니다. 그래서 이 직렬화된 클래스가 널리 퍼진다면 그 바이트 스트림도 영원히 지원해야 하는 것입니다. 커스텀 직렬화 형태를 설계하지 않고 자바의 기본 방식을 사용한다면 직렬화 형태는 기존 구현 방식에 영원히 묶여버립니다. 이렇게 된다면 기본 직렬화 형태에서는 클래스의 private, package-private 인스턴스 필드들마저 API로 공개되..
자바 직렬화의 대안을 찾으라 💡직렬화(Serialization)란? 객체를 직렬화하여 전송 가능한 형태로 만드는 것을 의미합니다. 자바의 I/O 처리는 정수, 문자열, 바이트 단위의 처리만 지원하기 때문에 복잡한 객체 또는 데이터를 외부 자바 시스템에서도 사용할 수 있도록 바이트 형태로 데이터를 변환하는 기술을 직렬화라고 부릅니다. 시스템적으로는 JVM 메모리에 상주하고 있는(힙 또는 스택) 객체 데이터를 바이트 형태로 변환하는 기술입니다. 직렬화에서는 java.io.ObjectOutputStream 패키지가 사용되며, 스트림에 객체를 출력하는 역할을 하며 ObjectOutputStream 객체의 writeObject 메서드는 객체를 직렬화한 후에 스트림으로 보내는 기능을 합니다. 💡역직렬화(Deseri..
지연 초기화는 신중히 사용하라 지연 초기화란 사용할 필드 및 인스턴스의 초기화 시점을 실제로 그 값이 필요로 할때까지 늦추는 기법입니다. 지연 초기화를 사용하면 값이 쓰이지 않는 시점에 굳이 초기화하지 않아도 되며, 클래스와 인스턴스 초기화 때 발생하는 순환참조 문제도 해결할 수 있습니다. 클래스 혹은 인스턴스 생성시의 초기화 비용은 줄어들 수 잇겠지만, 지연 초기화는 필드에 접근하는 비용은 비싸집니다. 지연 초기화하려는 필드들 중 초기화가 이루어지는 비욜, 실제 초기화에 드는 비용 등에 따라 초기화된 각 필드를 얼마나 빈번히 호출하느냐에 따라 지연 초기화는 오히려 성능을 느리게 만들 수 있습니다. 💡 언제 지연 초기화가 필요할까? 필드를 사용하는 빈도가 낮으며, 필드 초기화하는 비용이 비싼 경우입니다...
스레드 안전성 수준을 문서화하라 한 메서드를 여러 스레드가 동시에 호출하는 경우 그 메서드가 어떻게 동작하냐는 해당 클래스와 이를 사용하는 클라이언트 사이의 계약과 같습니다. 문서화를 제대로 해놓지 않는다면 클라이언트는 추측을 하여 사용할테고 이 추측이 틀린경우 문제가 발생할 수 있습니다. 그렇기 때문에 스레드 안전성을 문서화할 필요성이 있습니다. 💡 스레드 안전성 수준 멀티 스레드 환경에서는 API를 안전하게 사용하기 위해서는 클래스가 지원하는 스레드 안전성 수준을 명확히 명시해야 합니다. 📜 불변(Immutable) 이 클래스의 인스턴스는 마치 상수와 같아서 외부 동기화가 필요 없습니다. Ex) String, Long, BigInteger 📜 무조건적 스레드 안전(unconditionally thre..
- Total
- Today
- Yesterday
- transactional outbox pattern
- 트랜잭셔널 아웃박스 패턴 스프링 부트 예제
- space based architecture
- 트랜잭셔널 아웃박스 패턴 스프링부트
- redis 대기열 구현
- redis sorted set
- spring boot 엑셀 다운로드
- java ThreadLocal
- service based architecture
- spring boot redis 대기열 구현
- 레이어드 아키텍처란
- transactional outbox pattern spring boot
- @ControllerAdvice
- spring boot excel download paging
- spring boot redisson destributed lock
- microkernel architecture
- 공간 기반 아키텍처
- polling publisher spring boot
- java userThread와 DaemonThread
- JDK Dynamic Proxy와 CGLIB의 차이
- 람다 표현식
- 서비스 기반 아키텍처
- spring boot redisson 분산락 구현
- spring boot poi excel download
- redis sorted set으로 대기열 구현
- spring boot redisson sorted set
- pipeline architecture
- spring boot excel download oom
- 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 |