Home
Younghwani
Cancel

[Effective Java] Item83. 지연 초기화는 신중히 사용하라!

Item83. 지연 초기화는 신중히 사용하라! Intro 지연 초기화(lazy initialization)는 필드의 초기화 시점을 그 값이 처음 필요할 때까지 늦추는 기법이다. 값이 전혀 쓰이지 않으면 초기화도 결코 일어나지 않는다. 이 기법은 정적 필드, 인스턴스 필드 모두에 사용할 수 있다. 주로 ...

[Effective Java] Item82. 스레드 안전성 수준을 문서화하라!

Item82. 스레드 안전성 수준을 문서화하라! Intro 한 메서드를 여러 스레드가 동시 호출할 때 그 메서드가 어떻게 동작하느냐는 해당 클래스와 이를 사용하는 클라이언트 사이의 중요한 계약과 같다. API 문서에서 아무런 언급이 없다면 클래스 사용자는 나름의 가정을 해야 하고, 그 가정이 틀리면 클라이언트 프로그램은 동기화를 충분히 하...

[Effective Java] Item81. wait와 notify보다는 동시성 유틸리티를 애용하라!

Item81. wait와 notify보다는 동시성 유틸리티를 애용하라! Intro 이 책의 초판에서는 wait와 notify를 올바르게 사용하는 방법을 안내했지만, 지금은 wait와 notify를 사용해야 할 이유가 많이 줄었다. 자바 5에서 도입된 고수준의 동시성 유틸리티가 wait, notify로 하드코딩해야 했던 전형적인 일들을 대신...

[Effective Java] Item80. 스레드보다는 실행자, 태스크, 스트림을 애용하라!

Item80. 스레드보다는 실행자, 태스크, 스트림을 애용하라! java.util.concurrent 패키지 이 패키지는 실행자 프레임워크(Executor Framework)라고 하는 인터페이스 기반의 유연한 태스크 실행 기능을 담고 있다. 초판에서 다뤘던 예제인 단순한 작업 큐가 안전 실패나 응답 불가가 될 수...

[Effective Java] Item79. 과도한 동기화는 피하라!

Item79. 과도한 동기화는 피하라! Intro 충분하지 못한 동기화로 인해 겪을 수 있는 피해를 다룬 지난 아이템과 달리, 이번 아이템에서는 과도한 동기화로 인한 피해를 다룬다. 과도한 동기화는 성능을 떨어뜨리고, 교착 상태에 빠뜨리고, 심지어 예측 불가한 동작을 낳기도 한다. 과도한 동기화(정확성 측면) 응답 불가와 안전 ...

[Effective Java] Item78. 공유 중인 가변 데이터는 동기화해 사용하라!

Item78. 공유 중인 가변 데이터는 동기화해 사용하라! Intro synchronized 키워드는 해당 메서드나 블록을 한번에 한 스레드씩 수행하도록 보장한다. 많은 프로그래머가 동기화를 배타적 실행, 즉 한 스레드가 변경하는 중이라서 상태가 일관되지 않은 순간의 객체를 다른 스레드가 보지 못하게 막는 용도로만 생각한다. 생각을 확...

[Effective Java] Item77. 예외를 무시하지 말라!

Item77. 예외를 무시하지 말라! Intro API 설계자가 메서드 선언에 예외를 명시하는 까닭이 뭘까? 그 메서드를 사용할 때 적절한 조치를 취하라는 것이다. 예외를 try-catch 문으로 감싸고, catch 문을 비워두는 모습을 보이지 말자. 예외 무시 예외는 문제 상황에 잘 대처하기 위해 존재한다. catch 블록을 ...