2025/01/01 4

[Effective Java] 11-1. 동기화

조슈아 블로크 님의 "Effective Java" 책을 정리한 포스팅 입니다. 1. 공유 중인 가변 데이터는 동기화해 사용하라synchronized배타적 실행원자적 실행해당 메서드나 블록을 한번에 한 스레드씩 수행하도록 보장해당 블록에 접근 시, 락이 걸림 스레드 사이의 통신로컬 캐시의 값이 메인 메모리와의 동기화를 수행함필드를 읽을 때, 항상 수정이 완전히 반영된 값을 얻지 않음스레드의 로컬 캐시와 메인 스레드의 동기화가 즉각적으로 이루어지지 않음한 스레드가 저장한 값이 다른 스레드에게 보이는 가를 보장하지 않음 Volatile스레드의 메모리 가시성을 메인 메모리로 일치시킴단위 연산일 경우, 스레드 통신을 보장하므로 동기화 연산을 생략할 수 있음 AtomicLongprivate static final..

Java 2025.01.01

[Effective Java] 10-2. 예외

조슈아 블로크 님의 "Effective Java" 책을 정리한 포스팅 입니다. 1. 추상화 수준에 맞는 예외를 던지라예외 번역상위계층에서는 저수준 예외를 잡아 자신의 추상화 수준에 맞는 예외로 변경스스로 처리하기 어려운 경우 사용 예외 연쇄근본 원인인 저수준 예외를 고수준 예외에 실어 보내는 방식디버깅에 도움이 될 경우 사용 2. 메서드가 던지는 모든 예외를 문서화하라예외가 발생하는 상황을 자바독의 @throws 태그를 사용하여 정확히 문서화하기비검사 예외는 선언의 throws에 포함시키지 말기 3. 예외의 상세 메시지에 실패 관련 정보를 담으라실패 순간을 포착하려면 발생한 예외에 관여된 모든 매개변수와 필드의 값을 실패 메시지에 담아야 함 4. 가능한 한 실패 원자적으로 만들라호출된 메서드가 실패하더..

Java 2025.01.01

[Effective Java] 10-1. 예외

조슈아 블로크 님의 "Effective Java" 책을 정리한 포스팅 입니다.1. 예외는 진짜 예외 상황에만 사용하라코드를 try-catch에 작성하면 jvm이 적용할 수 있는 최적화가 제한됨특정 상태에서만 호출할 수 있는 상태 의존적 메서드를 제공하는 클래스는 상태 검사 메서드도 함께 제공해야 함2. 복구할 수 있는 상황에는 검사 예외를, 프로그래밍 오류에는 런타임 예외를 사용하라검사 예외호출하는 쪽에서 복구하리라 여겨지는 상황API 설계자는 검사 예외를 던져주어 사용자로 하여금 해당 상황에서 회복해달라 요구한 것 비검사 예외런타임 예외프로그래밍 오류전제조건이 지켜지지 않을 경우가 대다수적절한 에러 메시지를 뱉으며 중단됨RuntimeException 클래스 에러복구 불가능jvm 단에서 나는 에러 (자..

Java 2025.01.01

[Effective Java] 9-1. 일반적인 프로그래밍 원칙

조슈아 블로크 님의 "Effective Java" 책을 정리한 포스팅 입니다. 1. 지역변수의 범위를 최소화하라지역 변수의 유효 범위를 최소로 줄이면, 코드 가독성과 유지보수성이 높아지고 오류 가능성이 낮아짐지역변수는 선언과 동시에 초기화 하기 2. 전통적인 for 문보다는 for-each 문을 사용하라전통적인 for 문인덱스 변수는 코드를 지저분하게 함변수를 잘못 사용하더라도 컴파일러가 잡아주지 못함 Enhanced ForIterable이면 가능 가독성 예외필터링변형병렬반복 3. 라이브러리를 익히고 사용하라 4. 정확한 답이 필요하다면 float와 double은 피하라

Java 2025.01.01