DEV ℧ Developer Diary

[EffectiveJava] item50 - 적시에 방어적 복사본을 만들라

자바는 안전한 언어다.

네이티브 메서드를 사용하지않으니 C, C++ 같이 안전하지 않은 언어에서 흔히 보는 버퍼 오버런, 배열 오버런, 와일드 포인터 같은 메모리 충돌 오류에서 안전하다.

방어 프로그래밍

하지만 아무리 자바라 해도 다른 클래스로부터의 침범을 아무런 노력 없이 다 막을 수 있는건 아니다.

클라이언트가 여러분의...

[EffectiveJava] item49 - 매개변수가 유효한지 검사하라

메서드와 생성자 대부분은 입력 매개변수의 값이 특정 조건을 만족하기를 바란다.

  • index가 음수인 경우
  • 객체 참조가 null 인경우

이런 제약은 반드시 문서화해야 하며 메서드 몸체가 시작되기 전에 검사해야 한다.

이는 “오류는 가능한 한 빨리 (발생한 곳에서) 잡아야 한다”(fail-fast) 일반 원칙의 한 사례 이기도 하다....

[EffectiveJava] item48 - 스트림 병렬화는 주의해서 적용하라

주류 언어 중, 동시성 프로그래밍측면에서는 자바는 항상 앞서갔다.
java.util.concurrent, 실행자(Executor), 스트림 API의 parallel 메서드와 같이 여러 개선사항과 함께, 자바로 동시성 프로그램을 작성하기가 점점 쉬워지고는 있지만, 이를 올바르고 빠르게 작성하는 일은 여전히 어려운 작업이다.

동시성 프로그래밍을 할 때는 안정성(safety)와 응답 가능(liveness) 상태를 유지하기...

[EffectiveJava] item47 - 반환 타입으로는 스트림보다 컬렉션이 낫다.

일련의 원소를 반환하는 메서드는 수없이 많다. 자바 7까지는 이런 메서드의 반환타입으로 Collection, Set, List 같은 컬렉션 인터페이스, 혹은 Iterable이나 배열을 썼다.

그런데 자바 8이 스트림이라는 개념을 들고 오면서 이 선택이 아주 복잡한 일이 되어버렸다.

Stream과 Iterable의...

[EffectiveJava] item46 - 스트림에서는 부작용 없는 함수를 사용하라

스트림은 처음 봐서는 이해하기 어려울 수 있다.

스트림은 그저 또하나의 API가 아닌, 함수형 프로그래밍에 기초한 패러다임이기 때문이다. 스트림이 제공하는 표현력, 속도, 병렬성을 얻으려면 API는 말할 것도 없고 이 패러다임 까지 함께 받아들어야 한다.

스트림 패러다임

스트림 패러다임의 핵심은 계산을 일련의 변환(transformations)으로 재구성 하는 부분이다....