업로드중..
재미없는 이펙티브 자바 그래도 조금 더 재밌게 공부해보려고 나름 계속해서 연구하는 중입니다요
클래스와 인터페이스는 자바의 심장이라고 한다. 이 심장의 접근 제한자를 사용해서 캡슐화 작업을 진행하고 내가 작성한 코드가 더 정보 은닉에 강해질 수 있게 해보자
가변 객체를 필드로 사용한다면 우리는 꼭 private를 사용해서 접근 제한을 해야 한다. 또한 우리는 접근자 메서드를 이용해서 private 필드에 접근하고 유연한 내부 표현식 수정도 할수 있게 해보자
불변 객체를 사용하자 설계하고 구현하는데 더 쉽고 오류가 생길 여지가 적고 훨씬 안전하니까. 그런데 불변 객체를 사용하지 못한다면 필드를 private final로 만들자 최소한의 변경만을 허용하자!
상속을 꼭 사용해야 하는 상황이 아니라면 우린 컴포지션과 전달을 사용해서 래퍼 클래스를 만들어 사용하자. 그래야 안전하게 캡슐화를 할수 있다. 내부 코드를 지켜 광명 찾자
상속이 꼭 필요하지 않으면 상속하지 못하게 final로 막아두자, 그러나 꼭 상속을 하게 설계를 하고 싶다면 무조건 상속 고려 설계, 문서화는 필수다
추상 클래스와 인터페이스가 있을 때 우리는 미완성 설계도인 인터페이스 확장을 고려하자. 그 이유로는 자바의 상속의 최대 단점인 다중 상속이 안 된다는 점이 인터페이스를 더 우선하게 한다. 또한 두가지의 이점을 모두 취하기 위해서는 골격 구현 클래스를 사용하자
자바 8부터 도입된 인터페이스 내의 디폴트 메서드 구현이 가능해짐에 따라 해당 인터페이스에 디폴트 메서드를 남발해서는 안된다. 이는 기존 구현체에 심각한 오류를 일으킬 수 있는 문제다. 그렇기 때문에 우리는 인터페이스도 언젠가 확장될 수 있음을 떠올리며 설계하자
인터페이스는 상수 공개용으로 사용하지 말아야 한다. 타입을 정의하는 용도로만 사용해야 한다.핵심 정리 인터페이스는 타입을 정의하는 용도로만 사용해야 한다. 상수 공개용 수단으로 사용하지말자클래스가 어떤 인터페이스를 구현하느냐에 따라서 어떤 인스턴스로 무엇을 할수 있는지
태그 달린 클래스는 단점이 너무 많다. 이를 완벽하게 해결해줄 클래스 계층구조를 이용한 방법을 사용해서 더 나은 코드 작성을 해보자
중첩 클래스의 종류 4가지를 알아보고 이때 별다른 이유가 없다면 static 중첩 클래스를 사용도록하자
자바 소스 내에서 톱레벨 클래스를 여러개 정의하지 말자 이렇게 쓰고 싶다면 정적 멤버 클래스로 만들어서 사용하자, 꼭 사용하여야 하는 경우가 아니라면 소스 파일을 분리해서 클래스를 작성하자
제네릭이 무엇인지 알아보고 이때 제네릭을 사용하지 않은 로타입이 무엇인지 이를 왜 사용하지 않아야하는지를 알아보고 이를 사용해야 하는 때가 있다면 언제인지를 알아보자
제네릭을 사용하면 타입 안전성을 얻을 수 있다. 그런데 컴파일 시점에 unchecked warning이 발생할 수 있는데 우리는 비검사 경고 역시 무시하지 않고 가능한 제거하도록 하자, 이를 못한다면 @suppressWarnings를 이용해 비검사 경고를 무시하자
배열? 문제가 많다 그러니까 제네릭하게 사용하자
가능하면 새로 만들 것들은 배열을 사용하기보다는 제네릭 타입을 사용하자
메서드를 만들 때 타입 안전성을 위해서 제네릭을 이용해 메서드를 만들자
제네릭의 불공변의 유연함을 더해주기 위해서 한정적 와일드카드를 넣어보자
가변인수와 매개변수화 타입의 사용 그리고 단점을 알아보고 그럼에도 사용할 수 밖에 없는 이유를 살펴보자