1. Functional Interface(함수적 인터페이스)
1) 개요
- java.util.function
- JDK 1.8부터 지원
- 모두 인터페이스이므로 람다식 이용
2) 종류
종류 | params / return | 비고 |
consumer | O / X | |
supplier | X / O | |
function | O / O | data type을 바꾸어 return하는데 사용 |
operator | 연산해서 값을 return하는데 사용 | |
predicate | boolean return value |
// Function<T,R> // T : param type, R : return type
Function<String,Integer> f = t->t.length();
// Operator<T> // T : params & return type
Operator<Integer> o = (t,u) -> t+u;
// Predicate<T> // T : param type
Predicate<String> p = t->t.length() == 5;
2. Stream
1) Java I/O : InputStream/OutputStream
2) Stream API
- JDK 1.8 이상 지원
- Collection에 저장된 data를 중간처리 및 최종처리가 가능하다.
- 중간처리 : 최종처리 = map : reduce
3) Stream type 얻기
- Collection, 배열, file로 가능
- 예시
String [] names = ...;
// 외부반복자
for(str : names){
sysout(str);
}
// 내부반복자
Stream<String> s = Arrays.stream(names);
stream.forEach(s->sysout(s));
// 중복제거 및 List 반환
List<String> l = stream.distinct().collect(Collectors.toList());
이 외에도 filter, limit, skip, sorted method가 있다.
cf) 내부반복자가 외부반복자보다 성능이 더 좋다. why?
4) Optional Class
???
3. String, StringBuffer
// 값으로 생성
String s1 = "hi"; // 재사용
// 인스턴스 생성
String s2 = new String("hi"); // heap에 매번 생성
String s3 = "hi";
String s4 = new String("hi);
/*
* s1 == s2 : F
* s1 == s3 : T : s1과 s3는 같은 메모리를 가리킴
* s2 == s4 : F : s2와 s4는 값만 같은 서로 다른 인스턴스를 가리킴
*/
cf) String은 참조값이므로 비교할 떄는 equals()를 사용
String의 가장 큰 특징은 변경이 불가능한 것이다. 따라서 매번 새로운 인스턴스를 생성한다. 즉 메모리 관리가 비효율적
하지만, StringBuffer/StringBuilder는 변경가능하다. 즉 메모리 관리가 효율적
'CS > JAVA' 카테고리의 다른 글
[JAVA] JAVA I/O, 객체의 직렬화 (0) | 2021.01.18 |
---|---|
[JAVA] Exception (0) | 2021.01.18 |
[JAVA] Collection API (0) | 2021.01.14 |
[JAVA] Anonymous class, Lambda Expression, Generics (0) | 2021.01.14 |
[JAVA] Abstract, Interface (0) | 2021.01.12 |