본문 바로가기

JAVA

[Java] 람다식

Lambda 식이란?

함수적 프로그래밍 형태로 재사용 가능한 코드 블록

기존의 anonymous inner class를 이용한 처리 방식을 간결하게 처리

//anonymous inner class
Arrays.sort(nums, new Comparator<Integer>() {
	@Override
    public int compare(Integer o1, Integer o2){
    	return o1.compareTo(o2);
    }
}

//lambda 방식
Arrays.sort(nums, (o1,o2) -> {return o1.compareTo(o2);});
//한 줄일 경우 {}와 return ; 제거 가능
Arrays.sort(nums, (o1,o2) -> o1.compareTo(o2));

 

또한 인자 부분은 파라미터가 1개일 때만 () 생략가능

() -> {} // 인자가 없을 때

(a) -> {} // 인자가 1개만 있을 때
a -> {} 

(x,y) -> {} // 인자가 2개 이상
(a1,o2,j3) -> {}

 

람다 블록 안에서의 변수 참조

외부 클래스의 멤버변수 : 접근제한자의 제약 없이 참조 가능

외부 클래스의 local 변수 : final 키워드가 추가된 것으로 동작 == read only

 

:: 키워드(메서드 참조)

람다 실행문 내부에서 다른 함수 하나만을 실행하는 경우 :: 연산자를 이용해 기존 메서드 참조

<소유자>::<파라미터를 사용하는 소유자의 메서드>

생성자 참조도 가능하다

() -> new StringBuffer;

StringBuffer::new;

 

다만, 메서드 참조는 instance method인지 static method인지 구분하기 어려워질 수 있다. 적당한 선에서 가독성을 고려해 작성하면 충분하다

'JAVA' 카테고리의 다른 글

[Java] String에 대한 고찰 - UTF와 char  (0) 2024.01.24
[Java] Interface  (0) 2024.01.19
[Java] Abstract : 추상 클래스  (0) 2024.01.19
[Java] 자주 Override하는 함수들 : Object  (0) 2024.01.18
[Java] Polymorphism  (0) 2024.01.18