적시에 방어적 복사본을 만들라 자바는 안전한 언어입니다. 네이티브 메서드를 사용하지 않으니 C, C++ 같이 안전하지 않은 언어에서 흔히보는 버퍼 오버런, 배열 오버런, 와일드 포인터 같은 메모리 충돌 오류로부터 안전합니다. 자바로 작성한 클래스는 시스템의 다른 부분에서 무슨 짓을 하든 그 불변식이 지켜집니다. 메모리 전체를 하나의 거대한 배열로 다루는 언어안에서는 누릴 수 없는 강점입니다. 💡 문제가 발생하는 상황 아래 Period 객체는 생성자에서 유효성 검사를 하고 있습니다. 하지만 main 메서드에서 객체 생성 후에 값을 수정하고 있어 문제가 발생할 수 있습니다. 자바 8 이후로는 Date 클래스 대신 불변인 Instant를 사용하거나 LocalDateTime 또는 ZonedDateTime을 사용..
매개변수가 유효한지 검사하라 메서드와 생성자 대부분은 입력 매개변수의 값이 특정 조건을 만족하기를 바랍니다. 예를 들어 인덱스의 값은 음수여서는 안되고, 객체 참조는 NULL이어서는 안됩니다. 이런식의 제약은 반드시 문서화해야하며, 메서드 몸체가 시작되기 전에 검사해야 합니다. 오류는 가능한 한 빨리 잡아야하며, 오류를 발생한 즉시 잡지 못하면 해당 오류를 감지하기 어려워지고, 감지하더라도 오류의 발생 지점을 찾기 어려워집니다. 💡 매개변수 검사를 제대로 하지 않은 경우 메서드가 수행되는 중간에 모하한 예외를 던지며 실패할 수 있습니다. 더 나쁜 상황은 메서드가 잘 수행되지만 잘못된 결과를 반환하는 상황이 발생할 수도 있습니다. 더 좋지 않은 상황은 메서드는 문제없이 수행됐지만 어떤 객체를 이상한 상태로..
스트림 병렬화는 주의해서 적용하라 주류 언어 중 자바는 동시성 프로그래밍 측면에서 항상 앞서왔습니다. 처음 릴리즈된 1996년부터 스레드, 동기화, wait/notify를 지원했습니다. 자바로 동시성 프로그램을 작성하기는 쉬워지지만 올바르고 빠르게 작성하는 일은 여전히 어려운 작업입니다. 동시성 프로그래밍을 할때는 안전성과 응답 가능 상태를 유지하기 위해 노력해야하며, 병렬 스트림 파이프라인 프로그래밍에서도 다를바 없습니다. 🧨 Stream API의 병렬화에 문제가 있는 경우 아래 예제는 메르센 소수를 20개 생성하는 코드인데 여기서 parallel() 메서드를 호출해서 여러개의 스레드를 활용해 동시성 프로그래밍으로 효율을 높힐 수 있다고 추측할 수 있지만 실제로 1시간이 넘어도 출력하지 못하는 응답 불..
반환 타입으로는 스트림보다 컬렉션이 낫다 원소 시퀀스, 즉 일련의 원소를 반환하는 메서드는 수 없이 많았습니다. 자바 8이전까지는 Collection, Set, List와 같은 컬렉션 인터페이스 또는 Iterable이나 배열을 사용했습니다. 하지만 자바 8이후로 Stream이 등장하며 복잡해졌습니다. for-each 문에서만 사용이 되거나 반환된 원소 시퀀스가 일부 Collcetion 메서드를 구현할 수 없는 경우에는 Iterable 인터페이스를 사용하곤 했습니다. 그리고 반환 원소들이 기본 타입이거나 성능에 민감한 상황이라면 배열을 사용했습니다. 💡 반복을 지원하지 않는 Stream Stream과 Stream의 상위 객체인 BaseStream은 모두 Iterable 인터페이스를 구현하거나 상속하지 않습..
- Total
- Today
- Yesterday
- JDK Dynamic Proxy와 CGLIB의 차이
- spring boot redisson sorted set
- 서비스 기반 아키텍처
- spring boot excel download oom
- space based architecture
- spring boot redisson 분산락 구현
- polling publisher spring boot
- 레이어드 아키텍처란
- microkernel architecture
- redis sorted set
- pipeline architecture
- @ControllerAdvice
- spring boot redisson destributed lock
- redis sorted set으로 대기열 구현
- spring boot poi excel download
- transactional outbox pattern
- java ThreadLocal
- 트랜잭셔널 아웃박스 패턴 스프링부트
- spring boot excel download paging
- spring boot redis 대기열 구현
- 람다 표현식
- 공간 기반 아키텍처
- spring boot 엑셀 다운로드
- 트랜잭셔널 아웃박스 패턴 스프링 부트 예제
- pipe and filter architecture
- transactional outbox pattern spring boot
- 자바 백엔드 개발자 추천 도서
- redis 대기열 구현
- java userThread와 DaemonThread
- service based 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 |