분류 전체보기 612

[Effective Java] 11-2. 동기화

조슈아 블로크 님의 "Effective Java" 책을 정리한 포스팅 입니다. 1. wait와 notify보다는 동시성 유틸리티를 애용하라사용하기기 아주 까다로움으로 고수준 동시성 유틸리티를 사용하자 실행자 프레임워크스레드 풀 관리와 작업 실행을 위한 구현 제공스레드 생성과 관리를 추상화하여 직접 스레드 작업을 제어하지 않아도 됨 동시성 컬렉션동시 접근을 처리하기 위해 내부적으로 락 매커니즘을 활용여러 메서드를 원자적으로 묶어 호출하는 일 불가 ConcurrentHashMapBlockingQueue생산자-소비자 패턴에 적합큐가 비어 있을 떄 소비가자 대기하거나, 큐가 꽉 찼을 떄 생산자가 대기하는 방식으로 동작 동기화 장치멀티스레드 작업에서 스레드 간 협력을 지원하기 위한 유틸리티 CountDownLa..

Java 2025.01.03

[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

[Effective Java] 8-2. 메서드

조슈아 블로크 님의 "Effective Java" 책을 정리한 포스팅 입니다.1. 다중정의는 신중히 사용하라다중정의한 메서드는 정적으로 선택됨오버로딩의 호출 메서드는 컴파일 타임에 정해짐public class CollectionClassifier { public static String classify(Set s) { return "set"; } public static String classify(List list) { return "list"; } public static String classify(Collection c) { return "collection"; } public static void main(String[] args) { Collecti..

Java 2024.12.31

[Effective Java] 8-1. 메서드

조슈아 블로크 님의 "Effective Java" 책을 정리한 포스팅 입니다. 1. 매개변수가 유효한지 검사하라메서드 몸체가 실행되기 전에 오류 검출하기 Null Checkjava.util.Objects.requireNonNull유연하고 사용하기 편함입력을 그대로 반환 Assertprivate static void sort(long[] a, int offset, int length) { assert a != null; assert offset >= 0 && offset = 0 && length 인자의 값 유효성 체크 2. 적시에 방어적 복사본을 만들라자바는 불변식을 지켜주는 언어메모리 충돌 오류버퍼 오버런, 배열 오버런, 와일드 포인터 프로그래밍 방식클라이언트가 불변식을 깨뜨리려 한다 가정하..

Java 2024.12.31

[Effective Java] 7-3. 람다와 스트림

조슈아 블로크 님의 "Effective Java" 책을 정리한 포스팅 입니다. 1. 반환 타입으로는 스트림보다 컬렉션이 낫다원소 시퀀스 반환시, 스트림 처리와 반복 처리 모두를 만족시키도록 노력하자스트림은 반복을 지원하지 않음Iterable 확장 X반복문에서 사용하기 어려움그러나, Iterable이 정의한 추상 메서드를 모두 정의함 Collection이나 그 하위타입을 쓰자Iterable의 하위타입stream 메서드도 지원함 하위 타입 사용 시 주의점메모리가 큰 시퀀스를 무작정 메모리에 올리면 안됨 예멱집합 원소 배열public class PowerSet { public static final Collection> of(Set s) { List src = new ArrayList(..

Java 2024.12.31

[Effective Java] 7-2. 람다와 스트림

조슈아 블로크 님의 "Effective Java" 책을 정리한 포스팅 입니다. 1. 스트림은 주의해서 사용하라스트림데이터 원소의 시퀀스유한 혹은 무한컬렉션, 배열, 파일, 정규표현식 패턴 매처 등다량의 데이터 처리 작업을 돕고자 추가됨 (Java 8) 파이프라인원소들로 수행하는 연산 단계순차적으로 수행됨플루언트 API로 메서드 연쇄를 지원 시작소스 스트림으로 시작 중간연산한 스트림을 다른 스트림으로 변환함 종단 연산마지막 중간 연산이 내놓은 스트림에 최후의 연산을 수행함지연 평가무한 스트림이 이루어지도록 함 주의사항재사용 불가Stream stream = Stream.of("a", "b", "c");stream.forEach(System.out::println);// 재사용하려 하면 예외 발생stream..

Java 2024.12.31

[Effective Java] 7-1. 람다와 스트림

조슈아 블로크 님의 "Effective Java" 책을 정리한 포스팅 입니다.1. 익명 클래스보다는 람다를 사용하라람다 함수Collections.sort(words, new Comparable() { public int compare(String s1, String s2) { return Integer.compare(s1.length(), s2.length()); } }Collections.sort(words, (s1, s2) -> Integer.compare(s1.length(), s2.length()));함수형 인터페이스의 인스턴스를 짧게 즉시 구현 장점간결함매개변수형의 타입 생략 가능컴파일러가 타입을 추론함직접 명시 가능 단점이름이 없어, 문서화 못함코드 자체로 동작이 명확..

Java 2024.12.31