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