[기술정리] 람다

송송승현's avatar
Nov 20, 2024
[기술정리] 람다

정의

💡
코드에서 간결하고 명확하게 함수를 정의하고 사용할 수 있게 함
익명함수를 쉽게 작성할 수 있으며, 주로 함수형 인터페이스와 함께 사용

예제

// 1. 람다는 인터페이스로 만든다. // 2. 인터페이스에는 메서드가 하나만 존재하야한다. // 3. 메서드가 인터페이스를 매개변수로 받고 있으면 , 행위를 달라는 뜻 // 4. 매개변수의 타입을 생략 가능 // 5. @FuctionInterface 표시 가능 public class App { public static void main(String[] args) { MyConsumer<Integer> r1 = data -> { System.out.println("소비할 데이터 : " + data); }; r1.accept(1); MySupplier<String> r2 = () -> { return "good";}; // 코드가 여러줄이고 리턴이 필요하면 사용 MySupplier<String> r3 = () -> "good"; // 중괄호를 생략하면 자동으로 리턴 : 리턴을 생략가능 String msg = r3.get(); System.out.println(msg); } } // 입력을 받아서 결과를 반환 - 이런걸 finctioninterface라고 함 public interface MyFunction<T,R> { R apply(T t); } // 소비자 // 입력만 받고 출력이 없는 연산을 수행 - 공급만 받고 여기안에서 소비하겠다 public interface MyConsumer<T> { void accept(T data); } // 입력없이 값을 반환(리턴) - 공급자 @FunctionalInterface public interface MySupplier<T>{ T get(); } // 입력을 받아서 논리값을 반환 public interface MyPredcate<T> { Boolean apply(T t); }

장점

  • 코드 간결성 : 코드가 더 간결하고 읽기 쉬음
  • 익명 함수 사용 : 익명 클래스를 사용할 필 요없이 함수를 간단히 정의
  • 함수형 프로그래밍 지원 : 함수형 인터페이스와 함께 사용되어 함수형 프로그래밍을 지원

단점

  • 가독성 저하 : 복잡한 로직을 람다식으로 처리할려고 하면 오히려 가독성 저하
  • 디버깅 어려움 : 람다식은 익명 함수이기 때문에 디버깅 과정에서 스택 트레이스를 읽기 어려움
  • 성능 : 일부 경우 람다 표현식이 일반 메서드 호출보다 성능이 떨어질 수 있음
  • 접근 : 람다식 내에서 this 키워드는 람다식을 포함하는 클래스의 인스턴스를 참조- 익명클래스와 달리 람다식 자체의 this를 참조 불가
Share article

송승현의 블로그