Arrays
- Java에서 배열을 다루기 위한 유틸리티 클래스
- 배열의 정렬, 검색, 복사, 채우기 등 다양한 작업을 수행하는 정적 메소드 제공
- Arrays.sort(), Arrays.binarySearch(), Arrays.fill() 등의 메소드가 자주 사용됨
Quick Sorting
- 효율적인 비교 기반 정렬 알고리즘
- 평균적으로 O(nlogn)의 시간 복잡도를 가짐
- 피벗을 선택하고 파티셔닝하는 과정을 재귀적으로 반복하여 정렬을 수행
- Java의 Arrays.sort() 메소드에서 내부적으로 사용되는 알고리즘 중 하나
Lambda
- Java 8에서 도입된 함수형 프로그래밍 기능
- 익명 함수를 간결하게 표현할 수 있는 방법 제공
- (매개변수) -> { 표현식 } 형태로 작성
- 함수형 인터페이스와 함께 사용되어 코드의 가독성과 유연성을 향상시킴
Method References
- 람다 표현식을 더욱 간결하게 표현하는 방법
- 이미 정의된 메소드를 참조하여 람다 표현식을 대체
- 정적 메소드 참조(ClassName::staticMethodName), 인스턴스 메소드 참조(instance::methodName), 생성자 참조(ClassName::new) 등의 형태로 사용
Stream
- Java 8에서 도입된 데이터 처리를 위한 선언적 API
- 컬렉션, 배열 등의 데이터 소스로부터 연속된 요소를 처리하는 기능 제공
- 병렬 처리가 용이하며, 함수형 프로그래밍 스타일을 지원
- 중간 연산과 최종 연산으로 구성되어 데이터 처리 파이프라인을 구축
Method Chaining
- 여러 메소드 호출을 연쇄적으로 연결하는 프로그래밍 패턴
- 각 메소드가 객체 자신을 반환하여 추가적인 메소드 호출이 가능하게 함
- 코드의 가독성을 높이고 간결한 표현을 가능하게 함
- Stream API에서 자주 사용되는 패턴
Functional Interface
- 단 하나의 추상 메소드만을 가지는 인터페이스
- Java 8부터 @FunctionalInterface 어노테이션으로 명시 가능
- 람다 표현식과 함께 사용되어 함수형 프로그래밍을 지원
- Predicate, Function, Consumer, Supplier 등이 대표적인 예
- Stream API에서 사용되는 두 가지 주요 연산 유형
- Intermediate Operations: 중간 연산으로, 새로운 스트림을 반환하며 지연 평가됨 (예: filter, map, flatMap)
- Terminal Operations: 최종 연산으로, 스트림을 소비하고 결과를 생성함 (예: forEach, collect, reduce)
- 중간 연산은 여러 번 호출 가능하지만, 최종 연산은 스트림의 끝에서 한 번만 호출 가능