Home

effective java 3/E - 10장. 예외

10장 예외 10장에서 배울 내용 예외를 제대로 활용한다면 프로그램의 가독성, 신뢰성, 유지보수성이 높아지지만, 잘못사용하면 반대의 효과가 난다. 예외로 효과적으로 활용하는 지침을 다룬다 아이템 69: 예외는 진짜 예외 상황에만 사용하라 예외를 완전히 잘못 사용한 예 - 따라하지 말 것! try { int i = 0; while(true) { range[i++].climb(); } } catch(ArrayIndexOutOfBoundsException e) { } 이 코드는 전혀 직관적이지 않다는 사실 하나로 이렇게 작성하면 안 되는 이유로...

Read more

effective java 3/E - 9장. 일반적인 프로그래밍 원칙

9장 일반적인 프로그래밍 원칙 9장에서 배울 내용 지역변수, 제어구조, 라이브러리, 데이터 타입 리플렉션과 네티이브 메서드 최적화와 명명 규칙 아이템 57: 지역변수의 범위를 최소화하라 지역변수의 유효 범위를 최소로 줄이면 코드 가독성과 유지보수성이 높아지고 오류 가능성은 낮아진다. 지역변수의 범위를 줄이는 가장 강력한 기법은 역시 ‘가장 처음 쓰일 때 선언 하기’다. 미리 선언부터 해두면 코드가 어수선해져 가독성이 떨어진다. 변수를 실제로 사용하는 시점엔 타입과 초깃값이 기억나지 않을 수 있다. 지역변수를 생각 없이 선언하다 보면 변수가 쓰이는 범위보다 너무 앞서 선언하거...

Read more

effective java 3/E - 8장. 메서드

8장 메서드 8장에서 배울 내용 메서드를 설계할 때 주의할 점 매개변수와 반환값을 어떻게 처리해야 하는가 메서드 시그니처는 어떻게 설계해야 하는가 문서화는 어떻게 해야 하는가 메서드 뿐 아니라 생성자에도 적용이된다. 사용성, 견고성, 유연성에 집중한다. 아이템 49: 매개변수가 유효한지 검사하라 메서드와 생성자 대부분은 입력 매개변수의 값이 특정 조건을 만족하기를 바란다. ex) 인덱스 값은 음수가 안 되며, 객체 참조는 null이 아니어야 한다. 이런 제약은 반드시 문서화해야 하며 메서드 몸체가 시작되기 전에 검사해야 한다. “오류는 가능한 한 빨리 (발생한 곳에서) ...

Read more

effective java 3/E - 7장. 람다와 스트림

7장 람다와 스트림 7장에서 배울 내용 자바 8에서 함수형 인터페이스, 람다, 메서드 참조라는 개념이 추가되고 함수 객체를 더 쉽게 만들 수 있다. 스트림 API 까지 추가되어 데이터 원소의 시퀀스 처리를 라이브러리 차원에서 지원하기 시작했다. 이 기능들을 효과적으로 사용하는 방법들을 알아본다. 아이템 42: 익명 클래스보다는 람다를 사용하라 예전에는 자바에서 함수 타입을 표현할 때 추상 메서드를 하나만 담은 인터페이스(드물게는 추상 클래스)를 사용했다. 이런 인터페이스 함수를 객체라고 하여, 특정 함수나 동작을 나타내는데 썼다. JDK 1.1 이후 함수 객체를 만드는 주요 수단은 익명 클...

Read more

effective java 3/E - 6장. 열거 타입과 애너테이션

6장 열거 타입과 애너테이션 6장에서 배울 내용 특수한 목적의 참조 타입 2가지 클래스의 일종인 열거 타입(enum; 열거형) 인터페이스의 일종인 애너테이션(annotation) 이 타입들을 올바르게 사용하는 방법을 알아본다. 아이템 34: int 상수 대신 열거 타입을 사용하라 열거 타입은 일정 개수의 상수 값을 정의한 다음, 그 외의 값은 허용하지 않는 타입이다. 정수 열거 패턴 - 상당히 취약하다! public static final int APPLE_FUJI = 0; public static final int APPLE_P...

Read more

effective java 3/E - 5장. 제네릭

5장 클래스와 인터페이스 5장에서 배울 내용 제네릭은 자바5 부터 사용할 수 있다. 제네릭의 이점을 최대로 살리고 단점을 최소화 하는 방법을 이야기한다. 아이템 26: 로 타입은 사용하지 말라 용어 정리 클래스와 인터페이스 선언에 타입 매개변수(type-prameter)가 쓰이면, 이를 제네릭 클래스 혹은 제네릭 인터페이스라고 한다. List 인터페이스는 매개변수 E를 받는다. 인터페이스의 완전한 이름은 List<E> 지만, 짧게 List로 쓰며 제네릭 클래스와 인터페이스를 통틀어 제네릭 타입(generic type)이라 한다. 매개변수화 타입(parameterized type...

Read more

effective java 3/E - 4장. 클래스와 인터페이스

4장 클래스와 인터페이스 4장에서 배울 내용 클래스와 인터페이스를 사용하여 쓰기 편하고, 견고하며, 유연하게 만드는 방법 아이템 15: 클래스와 멤버의 접근 권한을 최소화하라 잘 설계된 컴포넌트는 클래스 내부 데이터와 내부 구현 정보를 외부로 부터 얼마나 잘 숨겼느냐의 여부이다. 잘 설계된 컴포넌트는 모든 내부 구현 내부를 완벽히 숨겨, 구현과 API를 깔끔히 분리한다. 정보은닉, 캡슐화라고 하는 이 개념은 소프트웨어 설계의 근간이 되는 원리이다. 정보 은닉의 장점 시스템 개발 속도를 높인다. 여러 컴포넌트를 병렬로 개발할 수 있기 때문이다. 시스템 관리 비용을 낮춘다. 각 컴포넌트를 더...

Read more

effective java 3/E - 3장. 모든 객체의 공통 메서드

3장 모든 객체의 공통 메서드 3장에서 배울 내용 final이 아닌 Object 메서드들을 언제 어떻게 재정의해야 하는지 다룬다. equals, hashCode, toString, clone, finalize(아이템 8에서 다룸) 성격이 비슷한 Comparable.comapreTo 아이템 10: equals는 일반 규약을 지켜 재정의하라 equals는 재정의하기 쉬워 보이지만 잘못 정의하면 끔찍한 결과를 초래한다. 문제를 피하는 가장 쉬운 길은 아예 재정의 하지 않는 것이다. 다음 상황에는 재정의하지 않는 것이 최선이다. 각 인스턴스가 본질적으로 고유하다. ...

Read more