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
- 트랜잭셔널 아웃박스 패턴 스프링 부트 예제
- spring boot redisson sorted set
- 자바 백엔드 개발자 추천 도서
- 공간 기반 아키텍처
- polling publisher spring boot
- microkernel architecture
- java userThread와 DaemonThread
- pipeline architecture
- @ControllerAdvice
- spring boot redisson 분산락 구현
- 서비스 기반 아키텍처
- transactional outbox pattern
- transactional outbox pattern spring boot
- redis sorted set
- space based architecture
- 람다 표현식
- service based architecture
- spring boot redisson destributed lock
- redis 대기열 구현
- 트랜잭셔널 아웃박스 패턴 스프링부트
- spring boot 엑셀 다운로드
- spring boot excel download oom
- redis sorted set으로 대기열 구현
- JDK Dynamic Proxy와 CGLIB의 차이
- spring boot poi excel download
- java ThreadLocal
- pipe and filter architecture
- 레이어드 아키텍처란
- spring boot excel download paging
- 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 | 31 |