Java

[Java] - 람다식, Stream API, 인터페이스

2024. 7. 15. 22:58
목차
  1. 람다식 
  2. 람다식 표현법
  3. 스트림 API란?(Stream)
  4. Stream의 특징
  5. 람다표현식
  6. 생성, 중간처리, 최종처리
  7. 재사용 불가능
  8. Stream 사용법
  9. 주요 Stream API
  10. map()
  11. 출처

람다식 

  • 코드 간결해짐
  • 지연 연산 등을 통한 성능 향상 도모
  • 그러나, 모든 요소들을 순회하는 경우엔 성능이 떨어질 수 있음
  • 코드 분석이 어려울 수 있음

람다식 이전의 코드를 살펴보자

 


    
//MaxNumber Interface
public interface MaxNumber {
int getMaxNumber(int x, int y);
}

 


    
//MaxNumber Interface 구현 클래스
public class MaxNumberImpl implements MaxNumber {
@Override
public int getMaxNumber(int x, int y) {
return x >= y ? x : y;
}
}

 


    
public class Main {
public static void main(String[] args) {
// 인터페이스를 직접 클래스로 구현 후 메인 메소드에서 생성 후 호출
MaxNumber maxNumber = new MaxNumberImpl();
System.out.println(maxNumber.getMaxNumber(3,1));
}
}
//3

 

기존의 코드는

인터페이스를 생성 → 인터페이스 구현하고 class를 생성 → 인터페이스 타입의 참조변수에 인터페이스를 구현한 class 객체를 생성 및 대입하여 생성

람다식으로 구현해보자

 


    
public class Main {
public static void main(String[] args) {
// 람다식을 이용하여 호출 방식
MaxNumber maxNumber = (x, y) -> x >= y ? x : y;
System.out.println(maxNumber.getMaxNumber(3,1));
}
}

 


람다식 표현법

() → {};

() : 인터페이스의 추상 메서드에 대한 매개변수

{} : 인터페이스의 추상메소드에 대한 구현체

 


스트림 API란?(Stream)

JDK8 버전부터 제공된 컬렉션 혹은 배열에 저장된 요소를 하나씩 참조하여 람다 표현식으로 처리할 수 있는 반복자이다.

 

[과거 Iterator 사용]


    
List<Integer> numbers = List.of(1, 2, 3, 4, 5, 6);
Iterator iterator = numbers.iterator();
while (iterator.hasNext()) {
System.out.println(iterator.next());
}

 

 

[Stream을 사용한 반복처리]


    
List<Integer> numbers = List.of(1, 2, 3, 4, 5, 6);
Stream<Integer> stream = numbers.stream();
stream.forEach(number -> System.out.println(number));

 


Stream의 특징

람다표현식

스트림은 람다식으로 요소 처리 코드를 제공한다.

스트림이 제공하는 대부분의 요소 처리 메소드는 함수형 인터페이스를 사용하므로, 람다식으로 요소 처리 코드를 제공할 수 있다.

생성, 중간처리, 최종처리

재사용 불가능

스트림이 생성되고, 중간처리를 거쳐 최종처리까지 완료되면 닫히게 된다. 이미 닫힌 스트림은 재사용할 수 없으며, 재사용을 시도할 경우 예외가 발생한다.

즉 스트림은 일회용이다.

 


    
List<Integer> numbers = List.of(10, 20, 25, 15, 30, 35, 12, 24, 34);
Stream<Integer> integerStream = numbers.stream()
.filter(number -> number > 20);
integerStream.count();
// java.lang.IllegalStateException: stream has already been operated upon or closed

 

Stream 사용법

먼저 student 클래스를 정의한다.


    
class Student {
private final int grade;
private final int score;
Student(final int grade, final int score) {
this.grade = grade;
this.score = score;
}
public int getGrade() {
return grade;
}
public int getScore() {
return score;
}

그 다음 학생 컬렉션을 준비한다.

 


    
List<Student> students = List.of(
new Student(2, 100),
new Student(3, 50),
new Student(1, 56),
new Student(2, 90),
new Student(3, 90),
new Student(2, 100),
new Student(1, 30)
);

    
double averageScore = students.stream() // Stream 생성
.filter(student -> student.getGrade() == 3) // 필터링 (중간처리)
.mapToInt(student -> student.getScore()) // 매핑 (중간처리)
.average() // 평균 집계 (최종처리)
.getAsDouble();
System.out.println("평균 성적: " + averageScore); // 70.0

 

주요 Stream API

map()

  • Stream 클래스의 메소드
  • filter와 같은 다른 Stream 메소드를  호출하거나 이를 수집하여 변환
  • chain 생성

 


출처

https://woo0doo.tistory.com/21

 

람다(Lambda),스트림(Stream)이란?

람다(Lambda) 자바8부터 '람다식(Lambda Expression)이 지원되면서 자바는 완전히 새로운 언어처럼 보이기 시작했다. 제네릭이 자바를 크게 변화시킨 것처럼 람다 또한 자바를 어마어마하게 변화시켰다

woo0doo.tistory.com

 

'Java' 카테고리의 다른 글

Java : 접근 제어 지시자 (access modifier) & 캡슐화  (0) 2023.12.12
Java : 객체 지향 프로그래밍  (0) 2023.12.12
  1. 람다식 
  2. 람다식 표현법
  3. 스트림 API란?(Stream)
  4. Stream의 특징
  5. 람다표현식
  6. 생성, 중간처리, 최종처리
  7. 재사용 불가능
  8. Stream 사용법
  9. 주요 Stream API
  10. map()
  11. 출처
'Java' 카테고리의 다른 글
  • Java : 접근 제어 지시자 (access modifier) & 캡슐화
  • Java : 객체 지향 프로그래밍
0boss
0boss
Developer 공부 일지
0boss
영차0charBOSS
0boss
Total
Today
Yesterday
  • 분류 전체보기 (58)
    • SeSAC (21)
      • Git (0)
      • HTML (5)
      • CSS (4)
      • javascript (7)
    • Etc. (0)
    • Error (0)
    • CS (19)
      • 운영체제 (8)
      • 자료구조 (0)
      • 네트워크 (6)
    • 알고리즘 (7)
      • Python (5)
    • Java (3)
    • 우리FISA (0)
    • DB (1)
    • 클라우드 || 인프라 (0)
      • Docker (0)
      • Kubernetes (0)

최근 글

인기 글

hELLO · Designed By 정상우.
메뉴바
[Java] - 람다식, Stream API, 인터페이스
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.