전체 글
이펙티브 자바 - 7장. 람다와 스트림
7장 - 람다와 스트림 💡 익명 클래스보다는 람다를 사용하라 “익명 클래스는 (함수형 인터페이스가 아닌) 타입의 인스턴스를 만들 때만 사용하라” 1. 익명 클래스 자바8 이전에는 함수 객체를 만드는 주요 수단으로 익명 클래스를 사용했었음 익명 클래스 방식은 코드가 너무 길다.. // 익명 클래스의 인스턴스를 함수 객체로 사용 - 낡은 기법이다! Collections.sort(words, new Comparator() { public int compare(String s1, String s2) { return Integer.compare(s1.length(), s2.length()); } }); System.out.println(words); Collections.shuffle(words); 2. 람다 자..
이펙티브 자바 - 6장. 열거 타입과 애너테이션
6장 - 열거 타입과 애너테이션 💡 int 상수 대신 열거 타입을 사용하라 “열거 타입은 정수 상수보다 더 읽기 쉽고 안전하고 강력하다” 1. 정수 열거 패턴 public static final int APPLE_FUJI = 0; public static final int APPLE_PIPPIN = 1; public static final int APPLE_GRANNY_SMITH = 2; public static final int ORANGE_NAVEL = 0; public static final int ORANGE_TEMPLE = 1; public static final int ORANGE_BLOOD = 2; 정수 열거 패턴(int enum pattern)의 문제점 타입 안전을 보장할 방법이 없음 표현..
이펙티브 자바 - 5장. 제네릭
5장 - 제네릭 5장 용어 정리 한글 용어 영문 용어 예 매개변수화 타입 parameterized type List 실제 타입 매개 변수 actual type parameter String 제네릭 타입 generic type List 정규 타입 매개 변수 formal type parameter E 비한정적 와일드카드 타입 unbounded wildcard type List 로 타입 raw type List 한정적 타입 매개변수 bounded type bound 재귀적 타입 한정 recursive type bound 한정적 와일드카드 타입 bounded wildcard type List
이펙티브 자바 - 4장. 클래스와 인터페이스
4장 - 클래스와 인터페이스 💡 클래스와 멤버의 접근 권한을 최소화하라 “접근 권한을 가능한 한 좁히자” 1. 정보 은닉(캡슐화) 어설프게 설계된 컴포넌트와 잘 설계된 컴포넌트의 가장 큰 차이는 바로 “클래스 내부 데이터와 내부 구현 정보를 외부 컴포넌트로부터 얼마나 잘 숨겼느냐”다. 잘 설계된 컴포넌트는 모든 내부 구현을 완벽히 숨기며 오직 API를 통해서 다른 컴포넌트와 소통함. → 정보은닉(캡슐화) 정보 은닉의 장점 컴포넌트를 병렬로 개발할 수 있음 → 시스템 개발 속도↑ 컴포넌트 교체 부담↓ → 시스템 관리 비용↓ 외부에 거의 의존하지 않고 독자적으로 동작할 수 있는 컴포넌트 → 소프트웨어 재사용성↑ 시스템 전체가 완성되지 않았어도 개별 컴포넌트 동작 검증 가능 → 시스템 제작 난이도↓ 자바에서 ..
이펙티브 자바 - 3장. 모든 객체의 공통 메서드
3장 - 모든 객체의 공통 메서드 💡 equals는 일반 규약을 지켜 재정의하라 “꼭 필요한 경우가 아니면 equals를 재정의하지 말자” 1. 재정의를 최대한 피하자 equals 메서드는 재정의하기 쉬워 보이지만 곳곳에 함정이 도사리고 있음 문제를 회피하는 가장 쉬운 길은 아예 재정의하지 않는 것 많은 경우에 Object의 equals가 비교적 정확히 수행해 줌 2. equals 재정의가 필요한 상황 객체 식별성이 아니라 논리적 동치성을 확인해야 하는데, 상위 클래스의 equals가 논리적 동치성을 비교하도록 재정의되지 않았을 때. 객체 식별성 : 두 객체가 물리적으로 같은가(주소), == 연산자로 확인 논리적 동치성 : 값이 같은가?, equals 메서드로 확인 주로 Integer, String처럼 ..
이펙티브 자바 - 2장. 객체 생성과 파괴
2장 - 객체 생성과 파괴 💡 생성자 대신 정적 팩터리 메서드를 고려하라 “정적 팩터리를 사용하는 게 유리한 경우가 더 많으므로, 무작정 public 생성자를 제공하던 습관이 있다면 고치자” 1. 정적 팩터리 메서드 그 클래스의 인스턴스를 반환하는 단순한 정적 메서드 ex) Boolean.valueOf 메서드 public static Boolean valueOf(boolean b) { return b ? Boolean.TRUE : Boolean.FALSE; } 2. 정적 팩터리 메서드의 장점 5가지 a) 이름을 가질 수 있다. 생성자 BigInteger(int, int, Random)과 정적 팩터리 메서드 BigInteger.probablePrime 중 어느 쪽이 ‘값이 소수인 BigInteger를 반환..