The Debugging Chronicles : "코드의 미학"

Mentor JAVA - section17. 람다식 본문

JAVA/Mentor JAVA

Mentor JAVA - section17. 람다식

sweetseonah1004 2024. 7. 28. 23:20

람다식

- 함수의 이름이 없는 익명 함수(anonymous function)를 만들기 위한 표현식이다.

- 함수만을 구현하고 실행할 수 있는 함수형 프로그래밍을 사용하여, 함수를 하나의간결한 식으로 표현한 것을 말한다.

- 식별자 없이 실행 가능한 함수를 말한다.

 

람다식 문법

- 메서드의 이름과 반환 타입을 제거하고 화살표 기호(→)를 사용해 구현한다.

 

 

· 소괄호 생략하기

매개변수자료형을 생략할 수 있으며, 매개 변수가 한 개인 경우에는 소괄호도 생략이 가능하다.

 

· 중괄호 생략하기

함수의 구현 내용이 한 문장이거나 return이 없다면 중괄호 { }도 생략 가능하다.

 

 

· return 생략하기

중괄호 안의 구현 코드가 return문만 존재할 때 중괄호와 return을 모두 생략 가능하다.

함수형 인터페이스

- 람다식은 Java에서 인터페이스를 사용할 때 상속하는 것을 생략할 수 있다.

- 단, 람다식을 이용해 인터페이스를 사용할 경우, 인터페이스는 하나으 ㅣ기능만을 정의할 수 있다.

- 오직 하나의 추상 메서드가 선언된 인터페이스만이 람다식의 타겟 타입이 될 수 있으며, 이러한 인터페이스를 함수형 인터페이스라고 한다.

- 람다식은 메서드명이 없는 익명 함수로 구현하기 때문에 여러 개의 메서드가 있을 경우 구분이 모호해 진다.

 

- 함수형 인터페이스 선언

· 자바 인터페이스를 이용해 선언한다.

public interface CompareNumber {
  int comparteTo(int num01, int num02);
}

· 두 개 이상의 메서드를 추가하는 오류를 방지하기 위해 에노테이션을 부여해 제한할 수 있다.

@FunctionalInterface
public interface CompareNumber {
  int comparteTo(int num01, int num02);
}

- 람다식 사용하기

· Java에서 해당 인터페이스를 클래스로 구현하지 않고 사용하려면 다음과 같이 익명 객체로 선언한 후 사용해야된다.

public interface CompareNumber {
  int comparteTo(int num01, int num02);
}

//인터페이스 객체 선언 시 람다식을 이용해 함수를 구현
CompareNumber compare = 
   (num01, num02) -> {return num01 > num02 ? 1 : num01 < num02 ? -1 : 0;};

- 람다식과 외부변수의 관계

· 람다식을 사용할 때 외부에서 정의된 지역변수를 사용할 경우 그 지역변수는final로 선언되어야 한다.

· 지역 변수는 메모리 영역에 생성되고, 람다식의 경우 익명 객체를 만들기 때문에 Heap 영역에 생성되어 서로 생성 위치가 다르므로

간섭이 불가능하다. 그러므로 값을 그대로 사용하는 것만이 가능하고 수정은 불가능 하다.(variable capture)