All Day Tired

람다식, 익명클래스 본문

Back/Java

람다식, 익명클래스

yu.dev 2024. 12. 17. 21:22

강의를 듣는데 과제가 람다식과 익명클래스에 관한 내용...

둘 다 학원에서 배우고 열심히 사용했으나 일하면서 즈어언혀 쓰지 않아서 다 까먹고 모름...

 

람다식이 등장한 이유

간결하고 직관적인 코드 작성을 위해서 등장

기존 자바 코드는 특정 작업을 수행하기 위해 익명클래스를 사용함

하지만 익명클래스는 코드가 장황하고 읽기 어려움 -> 단점

그래서 함수형 프로그래밍의 개념을 자바에 도입하면서 데이터 처리, 조작 작업을 더 효율적으로 할 수 있는 람다식이 등장

 

람다식?

람다식은 자바 8에 도입된 기능이다.

람다식 = 익명함수

작업을 수행하려면 보통 메소드를 먼저 만드는데 람다식은 메소드를 만들지 않고 작업을 수행하는 코드 블록만으로 표현할 수 있다.

(a, b) -> a + b //a, b 값을 받아서 더해

 

람다식과 익명클래스의 관계

람다식은 익명클래스를 대체 가능(애초에 등장 배경이 이거때문)

익명클래스는 이름없는 클래스를 만들어 일회성으로 사용, 특정 인터페이스를 구현하는 경우 자주 사용 -> 하지만 코드가 길고 반복 작업에는 불편

//익명클래스 사용
Runnable task = new Runnable(){
    @Override
    public void run(){
    	System.out.println("hello");
    }
};

//람다식 사용
Runnable task = () -> System.out.println("hello");

 

람다식 문법

(매개변수) -> {실행 코드}

//두 숫자더하기
(int a, int b) -> {return a + b;}

//매개변수가 하나면 괄호 생각 가능
x -> x * 3

//실행 코드가 한 줄이면 중괄호, return 생략 가능
(a, b) -> a + b

 

@FunctionalInterface

람다식은 함수형 인터페이스와 함께 사용된다.

함수형 인터페이스는 딱 하나의 추상메소드만 가지는 인터페이스이다.

그래서 Runnable을 람다식으로 표현할 수 있었던 것(Runnable 인터페이스는 run()이라는 메소드 하나만 가지고 있기 때문)

 

스트림API

람다식은 스트림API와 자주 함께 사용된다.

스트림API는 컬렉션(리스트, 배열) 데이터를 처리할 때 반복문 대신 간결하고 직관적인 방식으로 처리

//리스트에서 짝수만 추출
List<Integer> nums = Arrays.asList(1,2,3,4,5,6);
nums.stream()
    .filter(n -> n % 2 == 0)
    .forEach(System.out::println);

 

메소드 레퍼런스

람다식을 더더 간단히 표현하는 방법

특정 메소드를 직접 참조해 호출

List<String> colors = Arrays.asList("red", "pink", "blue", "green");
names.forEach(System.out::println);					//메소드 레퍼런스 사용
names.forEach(name -> System.out.println(name));	//람다식 사용

'Back > Java' 카테고리의 다른 글

Annotation  (0) 2024.11.26
JDK, JRE, JVM  (0) 2024.10.14
Optional  (1) 2024.09.19
Comments