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의...
17 Jun 2023 EffectiveJava
스트림은 처음 봐서는 이해하기 어려울 수 있다.
스트림은 그저 또하나의 API가 아닌, 함수형 프로그래밍에 기초한 패러다임이기 때문이다. 스트림이 제공하는 표현력, 속도, 병렬성을 얻으려면 API는 말할 것도 없고 이 패러다임 까지 함께 받아들어야 한다.
스트림 패러다임
스트림 패러다임의 핵심은 계산을 일련의 변환(transformations)으로 재구성 하는 부분이다....