📕 book/이펙티브 자바
-
7장 - 람다와 스트림📕 book/이펙티브 자바 2022. 11. 7. 18:27
자바 8에서 함수형 인터페이스, 람다, 메서드 참조라는 개념이 추가되면서 함수 객체를 더 쉽게 만들 수 있게 되었다. 이와 함께 스트림 API까지 추가되어 데이터 원소의 시퀀스 처리를 라이브러리 차원에서 지원하기 시작했다. 📌 익명 클래스보다는 람다를 사용하라 JDK 1.1. 이전 예전에는 자바에서 함수 타입을 표현할 때 추상 메서드를 하나만 담은 인터페이스(드물게는 추상클래스)를 사용했다. 이런 인터페이스의 인스턴스를 함수 객체(function object)라고 한다. JDK 1.1 JDK 1.1이 등장하면서 함수 객체를 만드는 주요한 수단은 익명 클래스가 되었다. 문자열을 길이순으로 정렬하기 위한 비교 함수로 익명 클래스를 사용 Collections.sort(words, new Comparator()..
-
6장 - 열거타입과 애너테이션📕 book/이펙티브 자바 2022. 11. 4. 19:21
자바의 특수한 목적의 참조타입 두가지 클래스의 일종인 열거 타입(Enum) 인터페이스의 일종인 어노테이션(annotation) 📌 int 상수 대신 열거 타입을 사용하라 열거 타입은 일정 개수의 상수 값을 정의한 후, 그 외의 값은 허용하지 않는 타입이다. 자바에서 열거 타입을 지원하기 전에는 정수 상수를 한 묶음 선언해서 사용하곤 했다. public static final int APPPLE_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_TEM..
-
5장 - 제네릭📕 book/이펙티브 자바 2022. 11. 1. 17:21
제네릭은 자바 5부터 사용할 수 있다. 제네릭을 지원하기 전에는 컬렉션에서 객체를 꺼낼 때마다 형변환을 해야 했다. 누군가 실수로 엉뚱한 타입의 객체를 넣어두면 런타임에 형변환 오류가 발생 ⇒ 제네릭을 사용해 컴파일 과정에서 차단하여 더 안전하고 명확한 프로그램을 만들자. 📌 로 타입은 사용하지 마라 클래스와 인터페이스 선언에 타입 매개변수(type parameter)가 쓰이면, 이를 제네릭 클래스 혹은 제네릭 인터페이스라고 한다. 제네릭 타입 (generic type) 제네릭 클래스와 제네릭 인터페이스를 통틀어 제네릭 타입이라 한다. 각각의 제네릭 타입은 일련의 매개변수화 타입 을 정의한다. ex) List 은 원소의 타입이 String인 리스트를 뜻하는 매개변수화 타입 String이 정규 타입 매개변..
-
4장 - 클래스와 인터페이스📕 book/이펙티브 자바 2022. 11. 1. 17:15
📌 클래스와 멤버의 접근 권한을 최소화하라 어설프게 설계된 컴포넌트, 잘 설계된 컴포넌트의 가장 큰 차이점 클래스 내부 데이터와 내부 구현 정보를 외부 컴포넌트로부터 얼마나 잘 숨겼느냐 잘 설계된 컴포넌트는 모든 내부 구현을 완벽히 숨겨, 구현과 API를 깔끔히 분리한다. 오직 API를 통해서만 다른 컴포넌트와 소통 서로의 내부 동작 방식에는 전혀 개의치 않는다. 정보 은닉, 캡슐화 장점 시스템 개발 속도를 높인다 시스템 관리 비용을 낮춘다 성능최적화에 도움을 준다. 소프트웨어 재사용성을 높인다 큰 시스템을 제작하는 난이도를 낮춘다. 접근 제어 메커니즘 자바는 정보 은닉을 위한 다양한 장치를 제공, 그중 하나가 접근 제어 메커니즘이다. 각 요소의 접근성은 그 요소가 선언된 위치와 접근 제한자로 정해진다...
-
3장 - 모든 객체의 공통 메서드📕 book/이펙티브 자바 2022. 10. 26. 21:19
💡 equals는 일반 규약을 지켜 재정의하라 꼭 필요한 경우가 아니면 equals는 재정의 하지 않은 것이 좋다. equals를 재정의하지 않아도 되는 경우 각 인스턴스가 본질적으로 고유 값을 표현하는 것이 아닌 동작하는 객체를 표현하는 클래스 - ex) Thread 값 클래스라도, 값이 같은 인스턴스가 둘 이상 만들어지지 않음을 보장하는 인스턴스 통제 클래스라면 재정의 하지 않아도 된다. 인스턴스 논리적 동치성을 검사할 일이 없을 때 상위 클래스에서 재정의한 equals가 하위 클래스에도 들어 맞을 때 ex) 대부분의 Set 구현체는 AbstractSet이 구현한 equals를 상속받아 사용 ex) List 구현체들은 AbstractList, Map 구현체들은 AbstractMap으로부터 상속받아 사..
-
2장 - 객체 생성과 파괴📕 book/이펙티브 자바 2022. 10. 25. 13:18
📌 생성자 대신 정적 팩터리 메서드를 고려하라 클라이언트는 클래스의 인스턴스를 얻는 전통적인 수단으로는 public 생성자이다. 클래스는 생성자와 별도로 정적 팩터리 메서드를 제공할 수 있다. 정적 팩터리 메서드 (static factory method) 해당 클래스의 인스턴스를 반환한다 (객체를 생성하는 메서드) ex) Optional의 of() : ‘new’ 키워드 대신 ‘of()’ 메서드를 이용해 객체를 만든다. 장점 1. 이름을 가질 수 있다. public class Hat { private String color; private int cost; private Hat(String color, int cost) { this.color= color; this.cost = cost; } public ..