📚 Reading/Tech
이펙티브 자바 - 10장. 예외
10장 - 예외 💡 예외는 진짜 예외 상황에만 사용하라 “예외를 정상적인 제어 흐름에서 사용해서는 안 된다.” 1. 예외를 잘못 사용한 예 // 예외를 완전히 잘못 사용한 예 try { int i = 0; while(true) range[i++].climb(); } catch(ArrayIndexOutOfBoundsException e) { } 위의 예시는 아주 끔찍한 코드임. 무한 루프를 돌다가 배열의 끝에 도달해 ArrayIndexOutOfBoundsException이 발생하면 끝을 내는 것. 이 코드는 잘못된 추론을 근거로 성능을 높여보려 한 사례임. JVM은 배열에 접근할 때마다 경계를 넘지 않는지 검사하는데, 일반적인 반복문도 배열 경계에 도달하면 종료한다. → 따라서 이 검사를 반복문에도 명시하..
이펙티브 자바 - 9장. 일반적인 프로그래밍 원칙
9장 - 일반적인 프로그래밍 원칙 💡 지역변수의 범위를 최소화하라 “지역변수의 유효 범위를 최소로 줄이면 코드 가독성과 유지보수성이 높아지고 오류 가능성은 낮아진다” 1. 지역변수의 범위를 줄이는 방법 지역변수의 범위를 줄이는 가장 강력한 기법은 역시 ‘가장 처음 쓰일 때 선언하기’다. 사용하려면 멀었는데, 미리 선언부터 해두면 코드가 어수선해져 가독성이 떨어짐. 미리 선언해두면 변수를 실제로 사용하는 시점엔 타입과 초깃값이 기억나지 않을 수도 있음 → 거의 모든 지역변수는 선언과 동시에 초기화해야 한다. 메서드를 작게 유지하고 한 가지 기능에 집중하기 한 메서드에서 여러 가지 기능을 처리한다면 그중 한 기능과만 관련된 지역변수라도 다른 기능을 수행하는 코드에서 접근할 수 있을 것임. → 메서드를 기능별..
이펙티브 자바 - 8장. 메서드
8장 - 메서드 💡 매개변수가 유효한지 검사하라 “매개변수의 제약들을 문서화하고 메서드 코드 시작 부분에서 명시적으로 검사하자” 1. 매개변수 검사 매개변수 검사를 수행하지 않았을 때 문제점 메서드가 수행되는 중간에 모호한 예외를 던지며 실패할 수 있음. 메서드가 잘 수행되지만 잘못된 결과를 반환할 수 있음 메서드는 문제없이 수행됐지만, 어떤 객체를 이상한 상태로 만들어서 미래의 알 수 없는 시점에 이 메서드와는 관련 없는 오류를 낼 수 있음. → 매개변수 검사에 실패하면 실패 원자성(failure atomicity)을 어기는 결과를 낳을 수 있음. 매개변수 검사는 메서드 몸체가 실행되기 전에 진행해야 함. 매개변수의 제약을 문서화한다면 그 제약을 어겼을 때 발생하는 예외도 함께 기술해야 함. 2. 단언..
이펙티브 자바 - 7장. 람다와 스트림
7장 - 람다와 스트림 💡 익명 클래스보다는 람다를 사용하라 “익명 클래스는 (함수형 인터페이스가 아닌) 타입의 인스턴스를 만들 때만 사용하라” 1. 익명 클래스 자바8 이전에는 함수 객체를 만드는 주요 수단으로 익명 클래스를 사용했었음 익명 클래스 방식은 코드가 너무 길다.. // 익명 클래스의 인스턴스를 함수 객체로 사용 - 낡은 기법이다! Collections.sort(words, new Comparator() { public int compare(String s1, String s2) { return Integer.compare(s1.length(), s2.length()); } }); System.out.println(words); Collections.shuffle(words); 2. 람다 자..
이펙티브 자바 - 6장. 열거 타입과 애너테이션
6장 - 열거 타입과 애너테이션 💡 int 상수 대신 열거 타입을 사용하라 “열거 타입은 정수 상수보다 더 읽기 쉽고 안전하고 강력하다” 1. 정수 열거 패턴 public static final int APPLE_FUJI = 0; public static final int APPLE_PIPPIN = 1; public static final int APPLE_GRANNY_SMITH = 2; public static final int ORANGE_NAVEL = 0; public static final int ORANGE_TEMPLE = 1; public static final int ORANGE_BLOOD = 2; 정수 열거 패턴(int enum pattern)의 문제점 타입 안전을 보장할 방법이 없음 표현..
이펙티브 자바 - 5장. 제네릭
5장 - 제네릭 5장 용어 정리 한글 용어 영문 용어 예 매개변수화 타입 parameterized type List 실제 타입 매개 변수 actual type parameter String 제네릭 타입 generic type List 정규 타입 매개 변수 formal type parameter E 비한정적 와일드카드 타입 unbounded wildcard type List 로 타입 raw type List 한정적 타입 매개변수 bounded type bound 재귀적 타입 한정 recursive type bound 한정적 와일드카드 타입 bounded wildcard type List