effectivejava 2

[이펙티브 자바] Item 28 배열보다는 리스트를 사용하라.

핵심 정리 배열과 제네릭에는 매우 다른 타입 규칙이 적용된다. 배열은 공변이고 실체화되는 반면, 제네릭은 불공변이고 타입 정보가 소거된다. 그 결과 배열은 런타임에는 타입 안전하지만 컴파일타임에는 그렇지 않다. 제네릭은 반대다. 그래서 둘을 섞어 쓰기란 쉽지 않다. 둘을 섞어 쓰다가 컴파일 오류나 경고를 만나면, 가장 먼저 배열을 리스트로 대체하는 방법을 적용해보자. 배열 제네릭 공변 불공변 실체화 타입 정보 소거 런타임 - 타입 안전 런타임 - 불안전 컴파일타임 - 불안전 컴파일타임 - 안전 배열과 제네릭 타입의 차이 배열은 공변(covariant)이다. Sub가 Super의 하위 타입이라면 배열 Sub[ ]는 배열 Super[ ]의 하위 타입이 된다(공변, 즉 함께 변한다는 뜻이다). 반면, 제네릭은..

[이펙티브 자바] Item16 public 클래스에서는 public 필드가 아닌 접근자 메서드를 사용하라.

/** * 퇴보한 클래스 */ class Point { public double x; public double y; } 퇴보한 클래스는 데이터 필드에 직접 접근할 수 있으니 캡슐화의 이점을 제공하지 못한다. API를 수정하지 않고는 내부 표현을 바꿀 수 없고, 불변식을 보장할 수 없으며, 외부에서 필드에 접근할 때 부수 작업(추가 로직 - 연산 작업 등)을 수행할 수도 없다. /** * 접근자와 변경자(mutator) 메서드를 활용해 데이터를 캡슐화한다. */ class Point(){ private double x; private double y; public Point(double x, double y){ this.x = x; this.y = y; } public double getX(){ retur..