오늘 집중 진짜 안되네
오늘꺼는 설렁설렁했으니까 내일 중으로 다시 복습하자
메타 애너테이션이랑 최종연산자는 너무 대충봤다. 내일 더 꼼꼼히 봐야지.
애너테이션Annotation : 단어 자체는 주석이라는 뜻. 기존에 사용하던 주석이 사람에게 정보를 전달하기 위함이였다면 애너테이션은 컴파일러, 프로그램에게 정보를 전달한다. 오버라이딩할 때 인텔리제이가 붙여주던 @Override 가 애너테이션
-표준 애너테이션 : 일반적인 에너테이션
@Override
@Deprecated : 반대하다는 뜻. 기존에 사용하던 것을 새롭게 다른 것으로 대체했지만 삭제하기 곤란할 때 붙인다. @Deprecated가 붙은 대상을 사용하려고 한다면 경고 메세지를 출력한다.
@SuppressWarnings : 경고 메세지가 출력되지 않도록 한다. 예외처리를 할 때처럼, 옵션을 넣어줄 수도 있다.
@FuctionalInterface : 함수형 인터페이스를 선언할 때, 제대로 선언되었는지 확인하게 하는 애너테이션
-메타 애너테이션 : 사용자 정의 애너테이션
@Target : 대상 지정
@Documented : javadoc에 포함되도록 설정
@Inherited : 하위 클래스가 애너테이션을 상속받도록 한다
@Rentention : 애너테이션의 지속시간 결정
@Repeatable
람다식Lamda Expression : 함수형 프로그래밍
람다식은 이름이 없는 익명의 객체.
public class Main {
public static void main(String[] args) {
Test test = (num1) -> num1 * num1;
System.out.println(test.pow(3)); //9
//람다식은 return ;를 생략할 수 있다
//여러 줄일때는 {}로 묶어서
//람다식은 하나의 메서드를 정의한다
//고로 추상 메서드가 두 개 이상인 인터페이스는 람다식으로 구현X
}
}
interface Test {
int pow(int num1);
}
메서드 참조 :
-클래스 메서드 <<클래스 :: 메서드>>
-인스턴스 메서드 <<참조 변수 :: 메서드>>
-생성자 <<클래스 :: new>>
스트림 : 배열, 컬렉션을 람다식으로 처리하도록 하는 반복자.
선언형 프로그래밍으로, 직관적이다.
read-only, 원본 데이터를 수정하지 않는다.
생성, 중간 연산, 최종 연산 > 일회용
생성 : stream() 혹은 Stream.of()
Stream<String> stream = Arrays.stream(arr);
Stream<String> stream = Stream.of(arr);
stream.forEach(System.out::print); //arr 요소들을 출력한다
primitive type의 경우 기본형 스트림을 사용할 수 있는데, 기본형 스트림을 사용할 경우 그냥 스트림을 사용하는 것보다 효율적이고, 자바에서 제공하는 기본 타입들의 메서드도 사용이 가능한 장점이 있다.
ex. int > IntStream
컬렉션 타입도 stream() 사용 가능
IntStream ints = new Random().ints();
ints.forEach(System.out::println); //무한으로 난수 출력
IntStream ints = new Random().ints(5); //생성 범위를 5개로 제한
IntStream ints = new Random().ints().limit(5);
IntStream ints = IntStream.range(1, 5); //1부터 4까지 생성. 1이상!! 5미만!!!
IntStream ints = IntStream.rangeCloased(1, 5); //1부터 5까지 생성. 5도 포함!!
중간연산자 https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/util/stream/Stream.html#distinct()
-필터링
--filter() : () 안의 조건에 맞는 데이터만 거를 수 있다. 조건은 람다식으로 정의 가능하다.
--distinct() : 중복 제거
-매핑map() : 원하는 필드만 추출하거나 변환. 람다식으로 정의한다.
--flatMap() : 이차원 배열 등 중첩 구조를 제거한다.
-정렬sorted() : 디폴트는 오름차순. 옵션을 넣고 싶다면 Comparator 참고
https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/util/Comparator.html
최종 연산자
sum(), count(), average(), max(), min()
allMatch(), anyMatch(), noneMaych() >>boolean
collect()