본문 바로가기

백엔드/Java86

Effective Java 맛보기 6탄 람다와 스트림 익명 클래스보다는 람다를 사용하라 자바가 8로 판올림되면서 작은 함수 객체를 구현하는 데 적합한 람다가 도입되었다. 익명 클래스는 (함수형 인터페이스가 아닌) 타입의 인스턴스를 만들 때만 사용하라. 람다는 작은 함수 객체를 아주 쉽게 표현할 수 있어 (이전 자바에서는 실용적이지 않던) 함수형 프로그래밍의 지평을 열었다. 람다보다는 메서드 참조를 사용하라 메서드 참조는 람다의 간단명료한 대안이 될 수 있다. 메서드 참조 쪽이 짧고 명확하다면 메서드 참조를 쓰고, 그렇지 않을 때만 람다를 사용하라. 표준 함수형 인터페이스를 사용하라 이제 자바도 람다를 지원한다. 여러분도 지금부터는 API를 설계할 때 람다도 염두에 두어야 한다는 뜻이다. 입력값과 반환값에 함수형 인터페이스 타입을 활용하라. 보.. 2019. 9. 20.
Effective Java 맛보기 5탄 열거 타입과 애너테이션 int 상수 대신 열거 타입을 사용하라. 열거 타입은 확실히 정수 상수보다 뛰어나다. 더 읽기 쉽고 안전하고 강력하다. 대다수 열거 타입이 명시적 생성자나 메서드 없이 쓰이지만, 각 상수를 특정 데이터와 연결짓거나 상수마다 다르게 동작하게 할 때는 필요하다. 드물게는 하나의 메서드가 상수별로 다르게 동작해야 할 때도 있다. 이런 열거 타입에서는 switch 문 대신 상수별 메서드 구현을 사용하자. 열거 타입 상수 일부가 같은 큰 동작을 공유한다면 전략 열거 타입 패턴을 사용하자. ordinal 메서드 대신 인스턴스 필드를 사용하라 비트 필드 대신 EnumSet 을 사용하라 열거할 수 있는 타입을 한데 모아 집합 형태로 사용한다고 해도 비트 필드를 사용할 이유는 없다. EnumSet.. 2019. 9. 17.
Effective Java 맛보기 4탄 제네릭 로 타은은 사용하지 말라 로 타입(raw type)을 사용하면 런타임에 예외가 일어날 수 있으니 사용하면 안된다. 로 타입은 제네릭이 도입되기 이전 코드와의 호환성을 위해 제공될 뿐이다. 빠르게 훑어보자면, Set 는 어떤 타입의 객체도 저장할 수 있는 매개변수화 타입이고, Set는 모종의 타입 객체만 저장할 수 있는 와일드 카드 타입이다. 그리고 이들의 로 타입인 Set 은 제네릭 타입 시스템에 속하지 않는다. Set 와 Set 안정하지만, 로 타입인 Set은 안전하지 않다. 비검사 경고를 제거하라. 비검사 경고는 중요하니 무시하지 말자. 모든 비검사 경고는 런타임에 ClassCastException 을 일으킬 수 있는 잠재적 기능성을 뜻하니 최선을 다해 제거하라. 경고를 없앨 방법을 찾지 못하.. 2019. 9. 16.
Effective Java 맛보기 3탄 클래스와 인터페이스 클래스와 멤버의 접근 권한을 최소화 하라. 프로그램 요소의 접근성은 가능한 한 최소한으로 하라. 꼭 필요한 것만 골라 최소한의 public API를 설계하자. 그 외에는 클래스, 인터페이스, 멤버가 의도치 않게 API로 공개 되는 일이 없도록 해야 한다. public 클래스는 상수용 public static final 필드 외에는 어떠한 public 필드도 가져서는 안된다. public static final 필드가 참조하는 객체가 불변인지 확인하라. public 클래스에서는 public 필드가 아닌 접근자 메서드를 사용하라. public 클래스는 절대 가변 필드를 직접 노출해서는 안된다. 불변 필드라면 노출해도 덜 위험하지만 완전히 안심할 수는 없다. 하지만 package-priva.. 2019. 9. 15.
Effective Java 맛보기 2탄 모든 객체의 공통 메서드 equals 는 일반 규약을 지켜 재정의하라. 꼭 필요한 경우가 아니면 equals를 재정의하지 말자. 많은 경우에 Object의 equals가 여러분이 원하는 비교를 정확히 수행해 준다. 재정의해야 할때는 그 클래스의 핵심 필드 모두를 빠짐없이, 다섯 가지 규약을 확실히 지켜가며 비교해야 한다. equals를 재정의하려거든 hashCode도 재정의하라. equals를 재정의할 때는 hashCode도 반드시 재정의해야 한다. 그렇지 않으면 프로그램ㅁ이 제대로 동작하지 않을 것이다. 재정의한 hashCode는 Object의 API 문서에 기술된 일반 규약을 따라야 하며, 서로 다른 인스턴스라면 되도록 해시코드도 서로 다르게 구현해야 한다.이렇게 구현하기가 어렵지는 않지만 조금 따분.. 2019. 9. 15.
728x90