programming/Effective Java 4

[Effective Java] Chapter 5

Chapter 5 제네릭 제네릭을 지원하기 전에는 컬렉션에서 객체를 꺼낼 때마다 형변환을 했다. 그래서 누군가 실수로 엉뚠한 타입의 객체를 넣어두면 런타임에 형변환 오류가 나곤 했다. 반면, 제네릭을 사용하면 컬렉션이 담을 수 있는 타입을 컴파일러에게 알려주게 된다. 그래서 컴파일러는 알아서 형변환 코드를 추가할 수 있게 되고, 엉뚱한 타입의 객체를 넣으려는 시도를 컴파일 과정에서 차단햐여 더 안전하고 명확한 프로그램을 만들어 준다.Item 26 로 타입은 사용하지 말라제네릭 클래스, 제네릭 인터페이스: 클래스와 인터페이스 선언에 쓰이는 타입 매개변수제네릭 타입: 제네릭 클래스와 제네릭 인터페이스를 통틀어 칭한다 각각의 제네릭 타입은 일련의 매개변수화 타입을 정의한다. 먼저 클래스 이름이 나오고, 이어서..

[Effective Java] Chapter 4

Chapter 4 클래스와 인터페이스 클래스와 인터페이스는 자바 언어의 심장과도 같다. 그러니까 열심히 하자.item15 클래스와 멤버의 접근 권한을 최소화하라 어설프게 설계된 컴포넌트와 잘 설계된 컴포넌트의 가장 큰 차이는 바로 클래스 내부 데이터와 내부 구현 정보를 외부 컴포넌트롤부터 얼마나 잘 숨겼느냐다. 정보 은닉, 혹은 캡슐화라고 하는 이 개념은 소프트웨어 설계의 근간이 되는 원리다.  정보 은닉의 장점은 다음과 같다.시스템의 개발 속도를 높인다.시스템 관리 비용을 낮춘다.정보 은닉 자체가 성능을 높여주지는 않지만, 성능 최적화에 도움을 준다.완성된 시스템을 프로파일링해 최적화할 컴포넌트를 정한 다음 다른 컴포넌트에 영향을 주지 않고 해당 컴포넌트만 최적화할 수 있기 때문이다.소프트웨어의 재사용..

[Effective Java] Chapter 3

Chapter 3 모든 객체의 공통 메서드 Object에서 final이 아닌 메서드는 모두 재정의를 염두에 두고 설계된 것이라 재정의 시 지켜야하는 일반 규약이 명확히 정의되어있다. 메서드를 잘못 구현하면 대상 클래스가 이 규약을 준수한다고 가정하는 클래스를 오동작하게 만들 수 있다.Item 10 equals는 일반 규약을 지켜 재정의하라 아래의 상황에서는 재정의를 최대한 피하도록하자!각 인스턴스가 본질적으로 고유하다.값을 표현하는 게 아니라 동적하는 개체를 표현하는 클래스가 여기 해당한다.인스턴스의 '논리적 동치성(logical equality)'을 검사할 일이 없다.논리적 동치성을 원하지 않다면 재정의하지 않아도 된다.상위 클래스에서 재정의한 equals가 하위 클래스에도 딱 들어맞는다.대부분의 Se..

[Effective Java] Chapter 2

Chapter 2Item 1 생성자 대신 정적 팩터리 메서드를 고려하라정적 팩터리 메서드가 생성자 보다 좋은 장점 다섯가지.- 이름을 가질 수 있다.  정적 팩터리는 이름만 잘 지으면 반환될 객체의 특성을 쉽게 묘사할 수 있다. // 생성자BigInteger(int, int, Random)//정적 팩터리 메서드BigInteger.probablePrime  - 호출될 때마다 인스턴스를 새로 생성하지는 않아도 된다. 이는 인스터스를 미리 만들어 놓거나 새로 생성한 인스턴스를 캐싱하여 재활용하는 식으로 불피요한 객체 생성을 피할 수 있다. 대표적인 예인 Boolean.valueOf(boolean) 메서드는 객체를 아예 생성하지 않는다. (?)  반복되는 요청에 같은 객체를 반환하는 식으로 정적 팩터리 방식의 ..