일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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
- Java
- System.out
- 항해99
- 제네릭 와일드 카드
- 제네릭 타입
- 브릿지 메소드
- 정렬
- 상속
- 람다식
- 자바스터디
- 스파르타코딩클럽
- 접근지시자
- github api
- System.err
- 함수형 인터페이스
- public 필드
- 바운디드 타입
- System.in
- 프리미티브 타입
- 합병 정렬
- Study Halle
- 익명 클래스
- 자바할래
- junit 5
- Switch Expressions
- annotation processor
- Effective JAVA
- raw 타입
- Today
- Total
목록Book (85)
코딩하는 털보
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); } /* 비트 필드는 비트 연산을 통한 교집합/합집합 같은 집한 연산이 가능하지만 아래와 같은 단점이 있다. - 정수 열거 상수의 단점 - 값 자체를 통해서는 해석하기 어려..
package me.rockintuna.effectivejava.item;/*enum의 ordinal 메서드 대신 인스턴스 필드를 사용하라 */public class Item35 { enum DAY { MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY } public static void main(String[] args) { /* ordinal() 메서드는 정의된 열거 타입 상수의 순서를 리턴한다. enum의 ordinal 메서드에 의미를 두어 사용하는 건 좋지 않다. - enum 상수의 ..