Effective Java

Chapter9 일반적인 프로그래밍 원칙 1. 지역변수의 범위를 최소화하라 지역변수의 유효 범위를 최소로 줄이면 코드 가독성과 유지보수성이 높아지고, 오류 가능성이 낮아진다. 가장 처음 쓰일 때 선언 for문이 while문보다 오류가능성(복붙할 때)이 낮다 2. 전통적인 for 문보다는 for-each 문을 사용하라 for문보다는 for-each문이 명료하고, 유연하며 버그를 예방해 준다. 3. 라이브러리를 익히고 사용하라 표준 라이브러리를 사용하여 좀 더 안정성이 있는 코드를 작성할 수 있다. 표준 라이브러리는 계속 업데이트 되므로, 따로 노력을 하지 않아도 성능이 지속해서 개선된다. 또한, 작성한 코드가 다른 사람들이 쉽게 이해할 수 있게 된다. 4. 정확한 답이 필요하다면 float와 double은..
Chapter8 메서드 1. 매개변수가 유효한지 검사하라 메서드를 검사하여 원자성을 지켜야 한다. public 메서드가 아니면 assert를 사용하여 매개변수의 유효성을 검증할 수 있다.(javaf를 실행할 때 -ea 플래그를 설정해주어어 함) 단, 런타임에는 아무런 영향도 주지 않는다. 2. 적시에 방어적 복사본을 만들라 클래스가 클라이언트로 반환하거나, 받는 요소가 가변이라면 방어적으로 복사하여 원래 요소를 불변상태로 만들어야 한다. 3. 메서드 시그니처를 신중히 설계하라 메서드 이름을 신중히 지어야 한다. 편의 메서드를 너무 많이 만들지 마라. 매개변수 목록은 짧게 유지하자. 방법 여러 메서드로 쪼갠다. 매개변수를 여러개 묶어주는 도우미 클래스를 생성한다. 빌더 패턴을 메서드 호출에 사용한다. → ..
Chapter7 람다와 스트림 1. 익명 클래스보다는 람다를 이용하라 람다는 익명 클래스와 개념은 비슷하지만 코드의 길이는 훨씬 짧다. 하지만 람다는 이름이 없고 문서화도 할 수 없기 때문에, 그 의미가 불명확하면 사용하지 말아야 한다. 또한 람다의 this는 자기 자신이 아니라 바깥의 객체를 나타낸다.(자신 참조x) 2. 람다보다는 메서드 참조를 사용하라 대부분 메서드 참조는 람다보다 코드의 길이가 더 짧게 사용이 가능하다. 또한 메서드 이름을 통하여 기능을 확실히 알 수 있게 해준다. 항상 그런 것은 아니므로 람다와 메서드 참조를 적절히 선택해서 사용해야 한다. 3. 표준 함수형 인터페이스를 사용하라 함수형 인터페이스가 미리 정의가 되어 있으므로, 필요한 용도에 맞는게 있으면 직접 구현하지말고 찾아서..
Chapter6 열거 타입과 애너테이션 1. int 상수 대신 열거 타입(enum)을 사용하라 단순히 int 상수를 private staic final로 선언하여 나열하는 것은 가독성이 좋지 않고, 안전하지 않으므로 안전하고, 다수의 기능이 있는 열거타입을 사용해야한다. 2. ordinal 메서드 대신 인스턴스 필드를 사용하라 ordinal()을 사용하면 해당 열거 타입이 몇 번째에 위치해 있는지를 알려 주는데, 이러한 방식은 새로운 열거 타입이 생겨 순서가 바뀌면 프로그램의 동작에 오류가 생길 수 있기 때문에 지양해야 한다. 대신 인스턴스 필드를 생성하여 사용하면 된다. 3. 비트 필드 대신 EnumSet을 사용하라 열거할 수 있는 타입을 한데 모아 사용하려면 비트 필드보다는 EnumSet을 사용해야 ..
Chapter5 제네릭 1. 로 타입은 사용하지 말라 제네릭 타입은 로 효현 하며, 제네릭 타입을 정의하면, 동시에 로타입도 같이 형성된다. ex) List, List 가 없는 로 타입을 사용했을 때는 컴파일 시에 오류가 잡히지 않고, 런타임 때 오류가 잡힌다 오류는 빨리 잡힐 수록 좋기 때문에 되도록이면 제네릭 타입을 사용해야 한다. 제네릭 타입은 로 타입보다 안정성이 뛰어나다. 2. 비검사 경고를 제거하라 비검사 경고는 런타임에 ClassCastException이 발생할 수 있음을 알려준다. 최대한 없애도록 노력하고, 경고가 발생했는데 없애는 방법을 모른다면 @SuppressWarings("unchecked")를 사용하여 경고를 숨겨라 @SuppressWarings은 최대한 좁은 범위에서 쓰여야 한다..
Chapter4 클래스와 인터페이스 1. 클래스와 멤버의 접근 권한을 최소화하라 접근 권한을 최소화 함으로써 소프트웨어의 재사용성을 높이고, 성능 최적화에 도움을 줌. public 같은 경우, 외부 API가 되기 때문에 쉽게 고치기가 어려운 반면 private는 내부 구현이므로 언제든지 수정이 가능 함 따라서 최소한의 public API를 설계해야 함 2. public 클래스에서는 public 필드가 아닌 접근자 메서드를 사용하라 public class에서는 인스턴스 필드를 private로 바꾸고 메서드를 통해 접근을 해야 한다. /* public class Point { public double x; public double y; //생성자 생략 } */ public class Point { priva..
Chapter3 모든 객체의 공통 메서드 1. equals는 일반 규약을 지켜 재정의하라 반사성(reflexitivy) : null이 아닌 모든 참조값 x에 대해, x.equals(x)는 true이다. 대칭성(symmetry) : null이 아닌 모든 참조값 x, y에 대해, x.equals(y)가 true이면 y.equals(x)도 true이다. 추이성(transitivity) : null이 아닌 모든 참조값 x, y, z에 대해, x.equals(y)가 true이고, y.equals(z)가 true이면, x.equals(z)가 true이다. 일관성(consistency) : null이 아닌 모든 참조값 x, y에 대해, x.equals(y)를 반복해서 호출하면 항상 true를 반환하거나 항상 fals..
Chapter2 객체 생성과 파괴 1. 생성자 대신 정적 팩터리 메서드를 고려하라 1.1 장점 이름을 가질 수 있음 → 반환될 객체의 특성을 쉽게 묘사할 수 있음 호출될 때마다 인스턴스를 새로 생성하지는 않아도 됨 → 객체의 생성 비용을 줄일 수 있음 반환 타입의 하위 타입 객체를 반환할 수 있음 → 유연성↑ 반환 타입의 하위 타입이기만 하면, 입력 매개변수에 따라 매번 다른 클래스의 객체를 반환할 수 있음 → 유연성↑ 정적 팩터리 메서드를 작성하는 시점에는 반환할 객체의 클래스가 존재하지 않아도 됨 → interface안에 static 메서드를 구현하여 가능하게 함 1.2 단점 상속을 하려면 public이나 protected 생성자가 필요하므로 정적 팩터리 메서드만으로 하위 클래스를 만들 수 없음. 정..
쿠엔크
'Effective Java' 태그의 글 목록