19 Jun 2023 Java
분산 락(Distributed Lock)을 이용해 동시성 제어하기
분산 락
기존 이전 포스트에서 설명한 Datebase Lock과는 다른 방식으로 작동을 한다.
락을 거는 것은 같으나, 자원에 직접 락을 거는 것이 아닌 공통된 저장소에 락을 걸어 자원이 사용중인지를 체크하고, 사용 뮤무에 따라 프로세스를 진행하는 방식이다.
<h2…
18 Jun 2023 EffectiveJava
자바는 안전한 언어다.
네이티브 메서드를 사용하지않으니 C, C++ 같이 안전하지 않은 언어에서 흔히 보는 버퍼 오버런, 배열 오버런, 와일드 포인터 같은 메모리 충돌 오류에서 안전하다.
방어 프로그래밍
하지만 아무리 자바라 해도 다른 클래스로부터의 침범을 아무런 노력 없이 다 막을 수 있는건 아니다.
클라이언트가 여러분의...
18 Jun 2023 EffectiveJava
메서드와 생성자 대부분은 입력 매개변수의 값이 특정 조건을 만족하기를 바란다.
- index가 음수인 경우
- 객체 참조가 null 인경우
이런 제약은 반드시 문서화해야 하며 메서드 몸체가 시작되기 전에 검사해야 한다.
이는 “오류는 가능한 한 빨리 (발생한 곳에서) 잡아야 한다”(fail-fast) 일반 원칙의 한 사례 이기도 하다....
18 Jun 2023 EffectiveJava
주류 언어 중, 동시성 프로그래밍측면에서는 자바는 항상 앞서갔다.
java.util.concurrent
, 실행자(Executor), 스트림 API의 parallel 메서드와 같이 여러 개선사항과 함께, 자바로 동시성 프로그램을 작성하기가 점점 쉬워지고는 있지만, 이를 올바르고 빠르게 작성하는 일은 여전히 어려운 작업이다.
동시성 프로그래밍을 할 때는 안정성(safety)와 응답 가능(liveness) 상태를 유지하기...
17 Jun 2023 EffectiveJava
일련의 원소를 반환하는 메서드는 수없이 많다. 자바 7까지는 이런 메서드의 반환타입으로 Collection
, Set
, List
같은 컬렉션 인터페이스, 혹은 Iterable
이나 배열을 썼다.
그런데 자바 8이 스트림이라는 개념을 들고 오면서 이 선택이 아주 복잡한 일이 되어버렸다.
Stream과 Iterable의...