본문 바로가기
부트캠프/백

11.14 Annotation, Lambda, Stream

by 티코딩 2022. 11. 14.

ㅇ Annotation

주석이라는 뜻. 하지만 우리가 썼던 // , /* */ 같은 comment는 사람에게 정보를 전달하는것이고, Annotation은 프로그램에게 정보를 전달한다.

 

ㅇ 표준어노테이션

@Override - 오버라이딩하는데 실수하면 컴파일러가 알려준다.

@Deprecated - 새로운것으로 대체될때 기존의 것을 사용하지 않을 것을 권장할때 사용한다.

@SuppressWarnings - 컴파일 경고메시지 나타나지 않게 함.

@FunctionalInterface - 함수형 인터페이스의 선언이 바르게 됐는지 확인한다.

 

 

ㅇ 메타 어노테이션

@Target - 어노테이션을 적용할 대상들을 지정함.

@Documented - 어노테이션에 대한 정보가 javadoc으로 작성한 문서에 포함되게함.

@Inherited - 하위 클래스가 어노테이션을 상속받도록함.

@Retention - 어노테이션의 지속시간 결정

@Repeatable - 어노테이션을 여러번 붙힐 수 있도록 허용

 

ㅇ 람다식

메서드를 조금이라도 더 간단하게 표현하기 위해 사용한다. 기본적으로 반환타입과 메서드 이름을 생략가능.

반환값이 있으면 세미콜론도 생략 가능. 실행문이 한개일때는 중괄호까지 생략 가능하다. 매개변수의 타입을 유추가 가능하면 타입까지 생략 가능.

int sum(num1, num2){
   return num1 + num2;
} 

이런 메서드를 람다식으로 표현하면

(num1, num2) -> num1 + num2

이렇게 간단하게 표현 가능하다.

 

ㅇ 함수형 인터페이스

익명 클래스. 객체의 선언과 생성을 동시에 해 한개의 객체만 생성가능한 일회용 클래스이다.

1개의 추상메서드를 갖고 있는 인터페이스. 람다식도 하나의 객체이기 때문에 인터페이스에 정의된 추상메서드를 구현할 수 있다. 함수형 인터페이스엔 단 하나의 추상 메서드만 선언 가능.

 

ㅇ 메서드 레퍼런스

(left, right) -> Math.max(left, right);

위코드를 아래처럼 표현할 수 있다.

Math : : max;

정적메서드 참조

- - - > 클래스 :: 메서드

인스턴스메서드 참조

- - - > 참조변수 :: 메서드

 

ㅇ 스트림

배열, 컬렉션의 저장 요소를 하나씩 참조해 람다식으로 처리해 줄 수 있는 반복자.

다양한 데이터 소스로부터 스트림을 만들 수 있다. 다양한 메서드도 제공한다.

 

ㅇ 스트림의 특징

선언형으로 데이터 소스를 처리함.

람다식으로 요소 처리 코드를 제공함.

내부반복자를 사용해 병렬처리가 쉽다. (내부반복자 : 컬렉션 내부에서 요소들을 반복, 외부반복자 : 개발자가 코드로 직접 컬렉션 요소반복해 가져옴.)

중간연산과 최종연산을 할 수 있음.(중간연산 : 매핑,필터링,정력수행  최종연산 : 반복,카운팅,평균,총합)

 

ㅇ 파이프라인

여러개의 스트림이 연결되어있는 구조. 최종연산 제외한 나머지는 모두 중간연산 스트림.

ex)

double ageAve = list.stream()   //오리지널 스트림
        .fliter(m->m.getGender() == Member.MALE) //중간연산스트림
        .mapToInt(Member::getAge)//중간연산스트림
        .average()//최종 연산
        .getAsDouble();

 

ㅇ 스트림 생성

stream()을 사용하면 해당 객체를 소스로 하는 Stream 반환.

읽기만 가능, 일회용이다.

 

ㅇ 중간연산

연산결과를 Stream으로 반환, 연속 수행가능

 

ㅇ 최종연산

한번만 연산 가능

'부트캠프 > ' 카테고리의 다른 글

11.15 Thread2  (0) 2022.11.16
11.15 스레드1, JVM  (0) 2022.11.16
11.11 컬렉션 연습문제  (0) 2022.11.14
11.10 enum, 제네릭, 예외, 컬렉션 프레임워크  (0) 2022.11.14
11.8 다형성 추상화  (0) 2022.11.09