일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- 합병 정렬
- 스파르타코딩클럽
- 프리미티브 타입
- 함수형 인터페이스
- auto.create.topics.enable
- 상속
- Switch Expressions
- System.err
- System.out
- 제네릭 와일드 카드
- junit 5
- github api
- 익명 클래스
- 바운디드 타입
- 로컬 클래스
- 정렬
- 항해99
- 브릿지 메소드
- 제네릭 타입
- Effective JAVA
- Java
- 자바스터디
- System.in
- annotation processor
- 접근지시자
- 람다식
- raw 타입
- public 필드
- 자바할래
- Study Halle
- Today
- Total
목록Book (66)
코딩하는 털보
package me.rockintuna.effectivejava.item;import java.util.stream.DoubleStream;import java.util.stream.IntStream;import java.util.stream.LongStream;/*스트림은 주의해서 사용하라 */public class Item45 { /* 스트림 : 원소의 시퀀스 스트림 파이프라인 : 원소들로 수행하는 연산 단계 스트림 파이프라인의 단계 소스 스트림 - (중간 연산) - 종단 연산 종단 연사이 없는 스트림은 아무 작업도 하지 않는다. 스트림은 잘 쓰면 프로그램을 짧고 깔끔하게 만들 수 있지만, 그렇다고 스트림을 너무 과용하면 프로그램이 읽거나 유지보수하기 어려워..
package me.rockintuna.effectivejava.item;import java.util.ArrayList;import java.util.Comparator;import java.util.List;import java.util.Random;import java.util.function.*;/*표준 함수형 인터페이스를 사용하라 */public class Item44 { /* java.util.function 패키지에는 다양한 용도의 표준 함수형 인터페이스가 있다. 용도에 맞는게 있다면 직접 구현하지 말고 이걸 활용하자 표준 함수형 인터페이스의 장점 - API가 다루는 개념의 수가 줄어들어 익히기 쉬워진다. - 유용한 디폴트 메서드를 많이 제공하여 다른 코드..
package me.rockintuna.effectivejava.item;import java.util.Arrays;import java.util.Collections;import java.util.Comparator;import java.util.List;/*람다보다는 메서드 참조를 사용하라 */public class Item43 { public static void main(String[] args) { List words = Arrays.asList("ab", "b", "ce", "dfe", "easd"); //람다 Collections.sort(words, (o1, o2) -> Integer.compare(o1.length(), o2.length()));..
package me.rockintuna.effectivejava.item;import java.util.Arrays;import java.util.Collections;import java.util.Comparator;import java.util.List;/*익명 클래스보다는 람다를 사용하라 */public class Item42 { public static void main(String[] args) { List words = Arrays.asList("ab", "b", "ce", "dfe", "easd"); //익명 클래스로 생성한 함수 객체 Collections.sort(words, new Comparator() { @Override ..
package me.rockintuna.effectivejava.item;import java.io.Serializable;/*정의하려는 것이 타입이라면 마커 인터페이스를 사용하라 */public class Item41 implements Serializable { /* 마커 인터페이스: 아무 메서드 없이 단지 자신을 구현하는 클래스가 특정 속성을 가짐을 표시해주는 인터페이스 ex) Serializable 는 아무 메서드가 없는 마커 인터페이스이다. 어떤 객체가 특정 속성이나 능력을 가진 것임을 표시하고 싶을 때 사용한다. */ public interface Serializable {} // 마커 인터페이스 /* vs 마커 애너테이션 - 마커 인터페..
package me.rockintuna.effectivejava.item;import java.util.Objects;/*@Override 애너테이션을 일관되게 사용하라 */public class Item40 { private int x; private int y; public boolean equals(Item40 o) { if (o == null || getClass() != o.getClass()) return false; return x == o.x && y == o.y; } public int hashCode() { return Objects.hash(x, y); } /* 위 코드는 얼핏 제대로 동작할 것 같지만, ..
package me.rockintuna.effectivejava.item;import java.lang.annotation.ElementType;import java.lang.annotation.Retention;import java.lang.annotation.RetentionPolicy;import java.lang.annotation.Target;/*명명 패턴보다 애너테이션을 사용하라 */public class Item39 { /* 명명 패턴의 단점 - 오타로 인한 기능 오류 - 올바른 요소에만 사용되리라 보증할 방법 없음 - 프로그램 요소를 매개변수로 전달할 마땅한 방법이 없음 */ /* 애너테이션은 위의 모든 문제를 해결해준다. 메타 에너테이션 ..
package me.rockintuna.effectivejava.item;/*확장할 수 있는 열거 타입이 필요하면 인터페이스를 사용하라 */public class Item38 { /* 대부분 열거 타입에는 확장이 필요 없으나, 연산 코드 상수 열거의 경우에는 필요할 수 있다. (기본 연산 기능 외에 커스텀 연산 기능 확장) 하지만 열거 타입은 확장을 제공하지 않기 때문에 인터페이스를 구현할 수 있다는 점을 활용한 확장을 흉내내는 방법을 사용한다. 1. 인터페이스 정의 2. (기본 구현)인터페이스를 구현하는 enum 상수 정의 */ interface Operation { double apply(double a, double b); }..
package me.rockintuna.effectivejava.item;import java.util.*;import static java.util.stream.Collectors.groupingBy;import static java.util.stream.Collectors.toSet;/*ordinal 인덱싱 대신 EnumMap을 사용하라 */public class Item37 { /* ordinal 사용의 단점 - 타입 안전하지 않음 - 컴파일러는 ordinal과 배열의 인덱스의 관계를 알 수 없다. -> IndexOutOfBounds, NullPointer 등 런타임 에러가 발생 가능 */ private String name; private Style s..
package me.rockintuna.effectivejava.item;import java.util.EnumSet;import java.util.Set;/*비트 필드 대신 EnumSet을 사용하라 */public class Item36 { //비트 열거 패턴 public static final int STYLE_BOLD = 1 styleSet = EnumSet.of(Style.UNDERLINE, Style.ITALIC); item36.applyStyles(styleSet); } /* 비트 필드는 비트 연산을 통한 교집합/합집합 같은 집한 연산이 가능하지만 아래와 같은 단점이 있다. - 정수 열거 상수의 단점 - 값 자체를 통해서는 해석하기 어려..