목록JAVA (44)
개발 기록
## 반환 타입으로는 스트림보다 컬렉션이 낫다 - 스트림은 반복을 지원하지 않기 때문에 스트림과 반복을 알맞게 조합해야 좋은 코드가 나온다.ex. foreach로 반복 불가능 (컴파일 오류 발생)static Stream allProcesses()// Stream.iterator 사용for(ProcessHandle p: ProcessHandle.allProcesses.iterator()) {}Test.java:6: error: method reference not expected herefor (ProcessHandle ph : ProcessHandle.allProcesses()::iterator) { ### 어댑터(Adapter)1) Stream -> IterableStream 를 Iterable 로 중..
## 지역번수의 범위를 최소화하라 ### 지역변수의 유효 범위를 최소로 줄이면 코드 가독성과 유지보수성이 높아지고 오류 가능성은 낮아진다. ### 지역변수의 범위를 줄이는 기법- 가장 처음 쓰일 때 선언하기: 미리 선언부터 해두면 코드가 어수선해져 가독성이 떨어짐. 변수를 실제로 사용하는 시점엔 타입과 초깃값이 기억나지 않을 수도 있다.: 변수가 쓰이는 범위보다 너무 앞서 선언하거나,다 쓴 뒤에도 여전히 살아 있게 되기 쉽다. 그래서 실수로 의도한 범위 앞 혹은 뒤에서 그 변수를 사용하면 끔찍한 결과로 이어질 수 있다. - 거의 모든 지역변수는 선언과 동시에 초기화해야 한다.: 초기화에 필요한 정보가 충분하지 않다면 충분해질 때까지 선언을 미뤄야 한다.: try-catch 문은 이 규칙에서 예외다. 변수..
## 스트림 병렬화는 주의해서 적용하라 -자바8부터는 parallel 메서드를 호출하면 파이프라인을 병렬 실행할 수 있는 스트림을 지원함ex. public static void main(String[] args) { primes().map(p -> TWO.pow(p.intValueExact()).subtract(ONE)) .filter(mersenne -> mersenne.isProbablePrime(50)) .limit(20) .forEach(System.out::println); } static Stream primes() { return Stream.iterate(TWO, Big..

## 표준 함수형 인터페이스를 사용하라 java,util.function 패키지를 보면 다양한 용도의 표준 함수형 인터페이스가 담겨있다. 필요한 용도에 맞는 게 있다면, 직접 구현하지 말고 표준 함수형 인터페이스를 활용하라.- API가 다루는 개념의 수가 줄어들어 익히기 더 쉬워짐- 표준 함수형 인터페이스들은 유용한 디폴트 메서드를 많이 제공하므로 다른 코드와의 상호운용성도 크게 좋아짐- 매개타입으로 사용되어 람다식을 매개값으로 대입할 수 있도록 해준다. ### 기본 인터페이스 6개 (표준 함수형 인터페이스는 총 43개)Operator 인터페이스반환값과 인수의 타입이 같은 함수인수가 1개인 UnaryOperator와 2개인 BinaryOperator가 있다.Predicate 인터페이스인수 하나를 받아 b..
## 익명 클래스보다는 람다를 사용하라 ### 익명 클래스 : 클래스의 선언과 객체 생성과 동시에 단 한번 사용할 수 있게 만든 클래스Collections.sort(words, new Comparator() { @Override public int compare(String o1, String o2) { return Integer.compare(o1.length(), o2.length()); } }); - 자바8부터는 추상 메소드가 하나만 존재는 인터페이스는 람다식을 사용해 만들 수 있게 되었다.Comparator 타입은 추상메서드 하나만 구현하면 되기 때문에 람다로 대체 가능. Collections.sort(words, (o1, o2) ..
## @Override 애너테이션을 일관되게 사용하라 ### @Override가 없을 때 하기 쉬운 실수public class Item40Test { static class Bigram { private final char first; private final char second; public Bigram(char first, char second) { this.first = first; this.second = second; } public boolean equals(Bigram b) { return b.first == first && b.second == second; ..
## ordinal 인덱싱 대신 EnumMap을 사용하라 class Plant { enum LifeCycIe { AMMUAL, PERENNIAL, BIEMMIAL } final String name; final LifeCycIe lifeCycle; Plant(String name, LifeCycIe lifeCycle) { this.name = name; this.lifeCycle = lifeCycle; } @Override public String toString() { return name; }} ### ordinal() 을 배열 인덱스로 사용한 예 - 따라하면 안 됨public static void usingO..
## item34 예제, 열거 타입의 제약 ex 1. 데이터와 메서드를 갖는 열거 타입public enum Planet { MERCURY(3.302e+23, 2.439e6), VENUS (4.869e+24, 6.052e6), EARTH (5.975e+24, 6.378e6), MARS (6.419e+23, 3.393e6), JUPITER(1.899e+27, 7.149e7), SATURN (5.685e+26, 6.027e7), URANUS (8.683e+25, 2.556e7), NEPTUNE(1.024e+26, 2.477e7); private final double mass; // 질량(단위: 킬로그램) private final ..